i.MX Processors Knowledge Base

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX Processors Knowledge Base

Discussions

Sort by:
Android Power Debug and Optimization Introduction Android Power Management on i.MX Overview How to do power optimization for Android on i.MX How to check high power consumption on i.MX How to debug suspend/resume problems on i.MX Introduction This document describes i.MX Android power issues debug and power consumption optimization. Android Power Management on i.MX Overview What Power Manager introduced by Android • Early Suspend    It is allow drivers like LCD, keypad backlight, touch-screen, gsensor, to be notified when user-space writes to /sys/power/request_state to indicate that the user visible sleep state should change. These drivers will act as like Linux stand suspend() to let these devices entry in suspend for better battery life. •Late Resume    Late resume is matching with early suspend. It will resume the devices suspended during early suspend after the Stand Linux resume finished •Wake Locks     Wake locks are used by applications, services, kernel drivers to request CPU resources. A locked wakelock, depending on its type, prevents the system from entering suspend or other low-power states. It as a core member in android power management architecture from framework to kernel What introduced by i.MX to enhance the power framework BusFreq Support High bus, Low power audio bus and Low bus totally 3 system bus working points. Switching between these 3 bus mode according clock flags automatically. DDR running frequency will change according bus mode changing (highest 528/400MHz and lowest at 24MHz for MX6DQ/DL). CPUFreq The CPU frequency scaling device driver allows the clock speed of the CPUs to be changed on the fly. Once the CPU frequency is changed, the GP voltage will be changed to the voltage value. Enhance the default interactive governor for better performance on SDHC/GPU etc. System Power Profile Service and App (just for MX6DQ/DL) Support 3 profiles currently: Normal mode, Power Saving Mode and Performance Mode to get much better balance between performance and power consumption. Profiles can be customized according customers’ HW /MD design, including: CPU running max freq, trigger temperature, CPU running minimal freq, running cpu LDO bypass mode           i.MX6X has built-in LDO module, but also allows you to use external LDO suppliers. SW will provide the configuration using external LDO or internal LDO. How to do power optimization for Android on i.MX Suspend Mode All devices enter in suspend or low power Config GPIO PADs as High Z or input mode (depending on HW design,FSL provide Ref code) Cut off LDOs which no modules need (depending on HW design, FSL provide Ref code) DDR enter in self-refresh mode (FSL done) Config DDR IO Float pin to reduce the DDR IO consumption (FSL done) ARM core entry stop mode (WFI) (FSL done) All PLLs will cut off, just 32KHZ sleep clock living (FSL done) Notify the PMIC entry in standby to save some power (FSL done) User Idle Mode Optimization on device driver for WiFi, 3G, BT, screen brightness modules, etc., to save some power Let some device/GPIOs entry in suspend mode/low power mode Active power saving profile to reduce some system power loading. GPU 2D/3D auto entry in Stop/Standby mode if no activity needs update. (FSL done) Enable CPUFreq reduce ARM CORE power consumption (FSL done) Busfreq scanning to let system work at lower Freq to save power (FSL done) Audio/Video Playback Mode Optimization on device driver for WiFi, 3G, BT, screen brightness modules, etc., to save some power Let some device/GPIOs entry in suspend mode/low power mode Disable HW 3D acceleration for some Apps such as System UI, Music Player, etc., to save some power when System in IDLE or music playing mode. Enable CPUFreq and SOC WAIT mode, decrease CPU Freq/Voltage to save power for ARM CORE when no there is no task need cpu to handle(FSL done) Busfreq scanning will set bus work at low power audio bus mode to save some power (FSL done for audio case) DDR enter in self-refresh mode (FSL done for audio case) Reduce the screen brightness will save some power (for video case) VPU clock auto-gating to save power on SOC domain (for video case, FSL done) GPU 2D/3D auto-gating to save some power on SOC domain (FSL done) Try VDOA+IPU to bypass GPU in video playback(not comment for Android platform, pure Linux environment using this method, for it has some limitation such as the input/output size limit), this can save some power on DDR domain. How to check high power consumption on i.MX Idle Audio/Video Playback high power consumption Check the CPUFreq and  Bus_freq is enabled           cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor           cat /sys/devices/platform/imx_busfreq.0/enable Check whether the system bus working poing   For MX6Q:           cat /sys/kernel/debug/clock/osc_clk/pll2_528_bus_main_clk/periph_clk/mmdc_ch0_axi_clk/rate   For MX6DL/SL:           cat /sys/kernel/debug/clock/osc_clk/pll2_528_bus_main_clk/pll2_pfd_400M/periph_clk/mmdc_ch0_axi_clk/rate Check CPU Loading and Interrupt(cat /proc/interrupts) Check clock tree carefully to see which clocks arenot gated off  but no any modules need them.            powerdebug –d  -c SUSPEND MODE high power consumption Make sure all device entries are in suspend mode Make sure the system entry in DSM(measure the voltage &current of VDDARM_CAP, VDDSOC_CAP,DDR_1V5, VDD_HIGH…)      Some tips help to locate the problems Add debug message in device drivers which may lead high power consumption Enable PM debug in kernel Catch the waveform from these modules which may impact the high power consumption Remove devices from the board or do H/W rework to exclude some H/W problems How to debug suspend/resume problems on i.MX System could not entry in suspend mode Check below settings has been disabled: GPS has been disabled Don't connect USB cable to the board (adb will hold a wake lock) RIL will hold a wake lock if RIL failed to initialize (logcat -b radio) Setting->Application->Developer options->stay awake (stay awake not set) Check all wake locks which holed by kernel have been released          echo 15 > /sys/module/wakelock/parameters/debug_mask Check all user wake locks have been releaed          echo 15 > /sys/module/userwakelock/parameters/debug_mask System hang when resume or suspend Enable PM debug system to get more info about PM in kernel     make menuconfig  enable the PM debug sys [*] Power Management support                                                           [*]   Power Management Debug Support                                                           [*]     Verbose Power Management debugging Add no_console_suspend to the boot option for kernel         This makes the system print more useful info before entry in suspend Check the PMIC_STBY_REQ signal. Measure the VDDARM_IN Using Trace32 or ICE to locate the problem. Using RAMCONSOLE to dump the kernel log after reboot. Kernel resume back from suspend  but Android not    This is usually because of the wrong key layout file Use tool to get power key scan code        getevent  Correct the Keylayout         system/usr/keylayout/****.kl Correct the scandcode with your power key report value to Match the POWE key
View full article
Print caller stack may help you to analyze the program and find out the caller stack more easily. You can write your code like this: Java:      Exception e = new Exception();      Log.e(TAG,"xxx",e); C++ file:       #include <utils/Callstack.h>      android::CallStack stack;      stack.update(1,30);      stacn.dump("xxx"); Then you can see the function's caller stack in Android main log file. C file: #include <corkscrew/backtrace.h> #define MAX_DEPTH 31 #define MAX_BACKTRACE_LINE_LENGTH 800 static backtrace_frame_t mStack[MAX_DEPTH]; static size_t mCount; void csupdate(int32_t ignoreDepth, int32_t maxDepth) {     if (maxDepth > MAX_DEPTH) {         maxDepth = MAX_DEPTH;     }     ssize_t count = unwind_backtrace(mStack, ignoreDepth + 1, maxDepth);     mCount = count > 0 ? count : 0; } void csdump(const char* prefix)\ { size_t i = 0;     backtrace_symbol_t symbols[MAX_DEPTH];     get_backtrace_symbols(mStack, mCount, symbols);     for (i = 0; i < mCount; i++) {         char line[MAX_BACKTRACE_LINE_LENGTH];         format_backtrace_line(i, &mStack[i], &symbols[i],                 line, MAX_BACKTRACE_LINE_LENGTH);         ALOGE("%s%s", prefix, line);     }     free_backtrace_symbols(symbols, mCount); } void myFunc() {      csupdate(1, 30);      csdump("myprefix"); } In Android.mk, add libcorkscrew, as below LOCAL_SHARED_LIBRARIES := libxxx libyyy libcorkscrew
View full article
Graphics are a big topic in the Android platform, containing java/jni graphic framework and 2d/3d graphic engines (skia, OpenGL-ES, renderscript). This document describes the general Android graphic stack and UI features on Freescale devices. 1. Android Graphic Stacks All Android 3D apps and games have the following graphic stack: Android system UI and all Apps UI follow 2D graphic stack as below, the hardware render will accelerate Android 2D UI with GPU HW OpenGL-ES 2.0 to improve the whole UI performance. Hardware acceleration can be disabled on i.mx6 in device/fsl/imx6/soc/imx6dq.mk USE_OPENGL_RENDERER := false Then rebuild frameworks/base/core/jni, and replace libandroid_runtime.so Surfaceflinger is responsible of all surface layers composition, and  then generate the framebuffer pixmap for display devices. these graphic surface layers are from 2D/3D apps. Hwcomposer is the alternative module of Surfaceflinger with OpenGL-ES. Hwcomposer is used to combine the specific surface layers supported by specific vendor devices. Freescale i.MX6 devices use GPU 2D to combine most surface layers, and the system power can be reduced with GPU 2D instead of GPU 3D. The typical power saving case is video playback. Hwcomposer with GPU 2D can offload GPU 3D task when running game and benchmarks, it is proved to improve the overall system performance about 20%. 2. Performance measurment Show FPS for Android system performance For NFS boot you can set “debug.sf.showfps” to 1 in init.freescale.rc (“setprop debug.sf.showfps 1”) and then reboot the system. For SD or EMMC boot, you can issue command “setprop debug.sf.showfps 1” in console, then find system_server thread by top and kill it to reset the system. Graphic benchmarks for 3D capability measurement Quadrant Full test benchmark cover CPU, Memory, IO, 2D and 3D GLBenchmark http://www.glbenchmark.com/ NenaMark2 https://market.android.com/details?id=se.nena.nenamark2 An3DBench http://www.androidzoom.com/android_applications/tools/an3dbench_hnog.html AnTutu http://www.antutu.com/software.html 3DMark http://www.futuremark.com/benchmarks/3dmark06/introduction/ Browser benchmarks http://www.webkit.org/perf/sunspider/sunspider.html http://v8.googlecode.com/svn/data/benchmarks/current/run.html http://www.craftymind.com/guimark2/ http://www.craftymind.com/factory/guimark/GUIMark_HTML4.html http://themaninblue.com/writing/perspective/2010/03/22/ 3.  Android UI features Dual display with same content This feature is supported in the default image in Android i.MX 6 release package. In this feature, LVDS panel and HDMI output can be supported simultaneously. It is only enabled when the HDMI TV has been connected with the board. Overscan for TV devices Some TVs may miss display the contents in overscan area. To avoid the contents in overscan area being lost, the common implement is by underscanning with an adjustable black border and letitng the viewer adjust the width of the black border. The downscan operation is done by surfaceflinger when it does surface composition through HW OpenGL ES. There is no performance impact since all the work is done by GPU HW. Overscan can be configured in display setting in visual mode: 32 bits color depth 32bpp UI can be supported by adding “bpp=32” in uboot as below: setenv bootargs ‘… video=mxcdi1fb:RGB666,XGA,bpp=32 …’, also can configure it in display setting. Enable 32bpp frame buffer and application surface buffer will be allocate to RGBA8888 format instead of default RGB565 format, that means more system memory is allocated. After enabling 32bpp, if some applications still don't have better UI quality, check to see if  there is hard code to request RGB565 format surface (should request RGBA8888 format to get better quality). Sample code is attached to test for 32bpp (left is on 16bpp, right is on 32bpp) Display Visual Setting The display setting is the add-on feature in FSL Android release, it is very convenient for end-users to change display property, mostly for the following features: Dual display enablement Display color depth setting(16bpp, 32bpp) Overscan adjustment in horizontal and vertical orientation 4. Issue Diagnosis Application Compatibility Some Android applications may not run correctly on some Android releases. It may cause application compatibility, so check the application in other platforms. For example Neocore and Asphalt 5 can run on Eclair, Froyo, and Gingerbread, but will not correctly run on Honeycomb. GPU Compatibility Some game UIs may not correctly display on our Android release. When encountering this kind of issue, the customer can check whether it is caused by the game using an OpenGL extension which our GPU does not support. They can download another data package (for example not extension data package) to have a check. Others Enlarge GPU memory if you encounter UI abnormally displaying after running an application for a while. Some applications need Wifi connections, so monitor the console log to see whether there are any error reports.
View full article
Description about VPU & IPU usage in Android R13.4 GA release for i.MX6DQ
View full article
Trace the malloc and expose violate access to freed memory Introduction Libc has a malloc debug framework for difference debugger. Each debugger takes as a libraries, and override the default malloc/free/calloc/realloc/, hooked before calling the real functions. NOTE: This tip assume that you are working with an eng or userdebug build of the platform, not on a production device. Trace the low level malloc/free in bionic Bionic has a malloc debugger called leak debugger, which can record all the malloc/free in low level. And developers can use ddms on host to check each block of memory on heap by malloc. And ddms support convert caller function address to name conver. That makes easy for us to check which component, which function allocated for how many memories. You can turn on memory tracking with debug level 1: $ adb shell setprop libc.debug.malloc 1 $ adb shell stop $ adb shell start You need to restart the runtime so that zygote and all processes launched from it are restarted with the property set. Now all Dalvik processes have memory tracking turned on. You can look at these with DDMS, but first you need to turn on its native memory UI: Open ~/.android/ddms.cfg Add a line "native=true" Upon relaunching DDMS and selecting a process, you can switch to the new native allocation tab and populate it with a list of allocations. This is especially useful for debugging memory leaks. NOTE: to solve the module symbols, please export two env on HOST: $ export PATH=$PATH:<android src>/prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin $ export ANDROID_PRODUCT_OUT=<android src>/out/target/product/<platform> Expose the memory access to freed area In this release he Electric Fence 2.2.0 has been ported to Android. it's also a memory debugger tool as above leak debugger. It helps you detect two common programming bugs: software that overruns the boundaries of a malloc() memory allocation, and software that touches a memory allocation that has been released by free(). It will dump the call stack and mmap of the process, if the malloc/free is not called with correct parameters. It will also make a segment fault, when applications want to access the address which is freed. The usage of efence is almost same as above, which we define it's debug level to 15: $ adb shell setprop libc.debug.malloc 15 After setting this property, you can run your applications, and if there's any memory leakage, logcat will show information. Example: Access the memory, which has been freed already: root@android:/data # setprop libc.debug.malloc 15 I/libc    ( 4136): setprop using MALLOC_DEBUG = 1 (leak checker) root@android:/data # ./memtest I/libc    ( 4138): ./memtest using MALLOC_DEBUG = 15 (efence) F/libc    ( 4138): Fatal signal 11 (SIGSEGV) at 0x4015bff4 (code=2) I/DEBUG  ( 3856): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG  ( 3856): Build fingerprint: 'freescale/sabresd_6dq/sabresd_6dq:4.0.4/R13.5-rc1/eng.b03824.20120711.11133 8:eng/test-keys' I/DEBUG  ( 3856): pid: 4138, tid: 4138  >>> ./memtest <<< I/DEBUG  ( 3856): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 4015bff4 I/DEBUG  ( 3856):  r0 00000000  r1 00000002  r2 40151c6c  r3 00000000 I/DEBUG  ( 3856):  r4 4015bff4  r5 bec75a54  r6 00000001  r7 bec75a5c I/DEBUG  ( 3856):  r8 00000000  r9 00000000  10 00000000  fp 00000000 I/DEBUG  ( 3856):  ip 00000000  sp bec75a20  lr 40133f8f  pc 0000a554  cpsr 60000010 I/DEBUG  ( 3856):  d0  203f810033915fe5  d1  0000000000000000 I/DEBUG  ( 3856):  d2  0000000000000000  d3  0000000000000000 I/DEBUG  ( 3856):  d4  0000000000000000  d5  0000000000000000 I/DEBUG  ( 3856):  d6  0000000000000000  d7  204cb48d00000000 I/DEBUG  ( 3856):  d8  0000000000000000  d9  0000000000000000 I/DEBUG  ( 3856):  d10 0000000000000000  d11 0000000000000000 I/DEBUG  ( 3856):  d12 0000000000000000  d13 0000000000000000 I/DEBUG  ( 3856):  d14 0000000000000000  d15 0000000000000000 I/DEBUG  ( 3856):  d16 41c0265a46a47ae1  d17 3f50624dd2f1a9fc I/DEBUG  ( 3856):  d18 41c9c8aff2800000  d19 0000000000000000 I/DEBUG  ( 3856):  d20 0000000000000000  d21 0000000000000000 I/DEBUG  ( 3856):  d22 0000000000000000  d23 0000000000000000 I/DEBUG  ( 3856):  d24 0000000000000000  d25 0000000000000000 I/DEBUG  ( 3856):  d26 0000000000000000  d27 0000000000000000 I/DEBUG  ( 3856):  d28 0000000000000000  d29 0000000000000000 I/DEBUG  ( 3856):  d30 0000000000000000  d31 0000000000000000 I/DEBUG  ( 3856):  scr 00000010 I/DEBUG  ( 3856): I/DEBUG  ( 3856):          #00  pc 0000a554  /data/memtest I/DEBUG  ( 3856):          #01  pc 00016834  /system/lib/libc.so (__libc_init) I/DEBUG  ( 3856): I/DEBUG  ( 3856): code around pc: I/DEBUG  ( 3856): 0000a534 e3a0000a ebfff8d1 e3a01001 e1a00004  ................ I/DEBUG  ( 3856): 0000a544 e5c4100a ebfff8d9 e3560001 e3a03000  ..........V..0.. I/DEBUG  ( 3856): 0000a554 e5c43000 0a000064 e59f21f0 e2857004  .0..d....!...p.. I/DEBUG  ( 3856): 0000a564 e5954004 e08f1002 e1a00004 ebfff8c0  .@.............. I/DEBUG  ( 3856): 0000a574 e3500000 0a00003f e59fc1d4 e1a00004  ..P.?........... I/DEBUG  ( 3856): I/DEBUG  ( 3856): code around lr: I/DEBUG  ( 3856): 40133f6c 68200701 0001f020 454e1046 2e00d018  .. h ...F.NE.... I/DEBUG  ( 3856): 40133f7c 2102da01 1c81e000 43394338 f7eb4622  ...!....8C9C"F.. I/DEBUG  ( 3856): 40133f8c 4605ed56 d1ec2800 da062e00 0101f008  V..F.(.......... I/DEBUG  ( 3856): 40133f9c f06f4620 f7ea4200 4628e8d4 87f0e8bd  Fo..B....(F.... I/DEBUG  ( 3856): 40133fac eff0f7e9 6003234b 30fff04f bf00e7f6  ....K#.`O..0.... I/DEBUG  ( 3856): I/DEBUG  ( 3856): memory map around addr 4015bff4: I/DEBUG  ( 3856): 40150000-4015a000 I/DEBUG  ( 3856): 4015a000-4015d000 I/DEBUG  ( 3856): 4015d000-4015e000 I/DEBUG  ( 3856): I/DEBUG  ( 3856): stack: I/DEBUG  ( 3856):    bec759e0  00000000 I/DEBUG  ( 3856):    bec759e4  00000000 I/DEBUG  ( 3856):    bec759e8  00000000 I/DEBUG  ( 3856):    bec759ec  4012090f  /system/lib/libefence.so I/DEBUG  ( 3856):    bec759f0  4015a014 I/DEBUG  ( 3856):    bec759f4  00002000 I/DEBUG  ( 3856):    bec759f8  00000004 I/DEBUG  ( 3856):    bec759fc  40120df1  /system/lib/libefence.so I/DEBUG  ( 3856):    bec75a00  4015bff4 I/DEBUG  ( 3856):    bec75a04  bec75a54  [stack] I/DEBUG  ( 3856):    bec75a08  00000001 I/DEBUG  ( 3856):    bec75a0c  bec75a5c  [stack] I/DEBUG  ( 3856):    bec75a10  00000000 I/DEBUG  ( 3856):    bec75a14  400d9167  /system/lib/libc.so I/DEBUG  ( 3856):    bec75a18  df0027ad I/DEBUG  ( 3856):    bec75a1c  00000000 I/DEBUG  ( 3856): #00 bec75a20  00008924  /data/memtest I/DEBUG  ( 3856):    bec75a24  bec75a54  [stack] I/DEBUG  ( 3856):    bec75a28  00000001 I/DEBUG  ( 3856):    bec75a2c  bec75a5c  [stack] I/DEBUG  ( 3856):    bec75a30  00000000 I/DEBUG  ( 3856):    bec75a34  400d9837  /system/lib/libc.so I/DEBUG  ( 3856): #01 bec75a38  00000000 I/DEBUG  ( 3856):    bec75a3c  00000000 I/DEBUG  ( 3856):    bec75a40  00000000 I/DEBUG  ( 3856):    bec75a44  00000000 I/DEBUG  ( 3856):    bec75a48  00000000 I/DEBUG  ( 3856):    bec75a4c  b00046ef  /system/bin/linker I/DEBUG  ( 3856):    bec75a50  00000001 I/DEBUG  ( 3856):    bec75a54  bec75b79  [stack] I/DEBUG  ( 3856):    bec75a58  00000000 I/DEBUG  ( 3856):    bec75a5c  bec75b83  [stack] I/DEBUG  ( 3856):    bec75a60  bec75b8f  [stack] I/DEBUG  ( 3856):    bec75a64  bec75ba2  [stack] I/DEBUG  ( 3856):    bec75a68  bec75bc5  [stack] I/DEBUG  ( 3856):    bec75a6c  bec75bde  [stack] I/DEBUG  ( 3856):    bec75a70  bec75c08  [stack] I/DEBUG  ( 3856):    bec75a74  bec75c20  [stack] I/DEBUG  ( 3856):    bec75a78  bec75c57  [stack] I/DEBUG  ( 3856):    bec75a7c  bec75c61  [stack] I/BootReceiver( 3551): Copying /data/tombstones/tombstone_00 to DropBox (SYSTEM_TOMBSTONE) D/dalvikvm( 3551): GC_CONCURRENT freed 398K, 10% free 8805K/9735K, paused 3ms+5ms [2] + Segmentation fault  ./memtest
View full article
document about how to use usb camera on imx6 android-4.0 platform.
View full article
1. Making information easier for our members to find, and make the community more effective: If you submit a discussion and it is a question, check the “Mark this discussion as a question” box when you are creating the discussion. This will highlight the discussion as a request for help. Acknowledge a reply as “Answer” when it answers your question, or identify it as “Helpful” if a reply was helpful. This will recognize the members who are taking the time to help other members. Select applicable categories when entering your discussions. This makes it easy to filter on and view related content in the “Content” tab. Tag everything. This helps surface the most relevant search results and it helps to bring appropriate content to your “What Matters” Activity stream. 2. Getting FSL help: Even though you can have and use multiple accounts in the community, It is generally good practice to use a single account.  Furthermore, it behooves community members to use your primary Freescale.com account when submitting community questions.  This allows Freescale support to see more information about you that you may not expose in your community profile, such as your company name and location.  This information helps us to assign the proper support resources to your issue.
View full article
Introduction This guide provides a step by step explanation of what is involved in adding a new WiFi driver and making a new WiFi card work well in a custom Android build. (This guide was written for Android 4.1 but should be applicable to previous Android releases and hopefully future releases.) Contents Understand how Android WiFi works Port WiFi driver. Compile a proper wpa_supplicant in your BoardConfig.mk Modify your wifi.c in HAL. Launch wpa_supplicant and dhcpcd services in init.rc. Several debug tips. Understand How Android WiFi Works As the following figure, Android wireless architecture can be divided into three parts: Java Framework(WifiManager, WifiMonitor etc..), HAL(wifi.c,wpa_supplicant,netd) kernel space modules(wireless stack, wifi drivers) Java Framework communicate with wpa_supplicant using native interface (wifi.c). Wpa_supplicant and netd uses wireless extension or nl80211 to control WiFi drivers. Port WiFi driver Usually WiFi driver is provided as a kernel module. There are mainly two types of Android WiFi architecture:nl80211 and wext. With the implementation of nl80211/cfg80211 many wireless drivers in main line kernel  support nl80211 interface instead of wireless extension. For different vendors’ WiFi drivers, writing one Android.mk to add its compile into Android is what you should do. Here take atheros’s AR6kl as an example: ath6kl_module_file :=drivers/net/wireless/ath/ath6kl/ath6kl_sdio.ko $(ATH_ANDROID_SRC_BASE)/$(ath6kl_module_file):$(mod_cleanup) $(TARGET_PREBUILT_KERNEL) $(ACP)         $(MAKE) -C $(ATH_ANDROID_SRC_BASE) O=$(ATH_LINUXPATH) ARCH=arm CROSS_COMPILE=$(ARM_EABI_TOOLCHAIN)/arm-eabi- KLIB=$(ATH_\ LINUXPATH) KLIB_BUILD=$(ATH_LINUXPATH)         $(ACP) -fpt $(ATH_ANDROID_SRC_BASE)/compat/compat.ko $(TARGET_OUT)/lib/modules/         $(ACP) -fpt $(ATH_ANDROID_SRC_BASE)/net/wireless/cfg80211.ko $(TARGET_OUT)/lib/modules/ include $(CLEAR_VARS) LOCAL_MODULE := ath6kl_sdio.ko LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_PATH := $(TARGET_OUT)/lib/modules LOCAL_SRC_FILES := $(ath6kl_module_file) include $(BUILD_PREBUILT) Compile a proper wpa_supplicant in your BoardConfig.mk In Android’s external directory, there are two wpa_supplicant_* projects. For wext-based wifi driver, wpa_supplicant_6 can be used. For nl80211-based WiFi driver, wpa_supplicnat_8 can only be used. But if WiFi vendors supply their own customized wpa_supplicant, it will be much easier to debug the communication between wpa_supplicant and WiFi drivers. No matter which supplicant  you choose, just control their compile in your BoardConfig.mk. Take atheros’s ath6kl as an example: ifeq ($(BOARD_WLAN_VENDOR),ATHEROS) BOARD_WLAN_DEVICE                        := ar6003 BOARD_HAS_ATH_WLAN                      := true WPA_SUPPLICANT_VERSION                  := VER_0_8_ATHEROS WIFI_DRIVER_MODULE_PATH                  := "/system/lib/modules/ath6kl_sdio.ko" WIFI_DRIVER_MODULE_NAME                  := "ath6kl_sdio" WIFI_DRIVER_MODULE_ARG                  := "suspend_mode=3 wow_mode=2 ar6k_clock=26000000 ath6kl_p2p=1" WIFI_DRIVER_P2P_MODULE_ARG              := "suspend_mode=3 wow_mode=2 ar6k_clock=26000000 ath6kl_p2p=1 debug_mask=0x2413" WIFI_SDIO_IF_DRIVER_MODULE_PATH          := "/system/lib/modules/cfg80211.ko" WIFI_SDIO_IF_DRIVER_MODULE_NAME          := "cfg80211" WIFI_SDIO_IF_DRIVER_MODULE_ARG          := "" WIFI_COMPAT_MODULE_PATH                  := "/system/lib/modules/compat.ko" WIFI_COMPAT_MODULE_NAME                  := "compat" WIFI_COMPAT_MODULE_ARG                  := "" endif then you need to provide a proper wpa_supplicant.conf  for your device. wpa_supplicant.conf  is very important because the control socket for android is specified in this file(ctrl_interface=). This file should be copied to /system/etc/wifi. Minimum required config options in wpa_supplicant.conf : There are two different ways in which wpa_supplicant can be configured, one is to use a "private" socket in android namespace, created by socket_local_client_connect() function in wpa_ctrl.c and another is by using a standard UNIX socket. Android private socket ctrl_interface=wlan0 update_config=1 - Unix standard socket ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi update_config=1 Modify your wifi.c in HAL Here what you should do is modifying some codes like wifi_load_driver and wifi_unload_driver. For Broadcom or CSR’s wifi driver, you can directly use the original wifi.c. But for atheros’s ath6kl driver, there are total three  .ko modules to install. So some micro variables and codes need to be changed to adapt it. Launch wpa_supplicant and dhcpcd services in init.rc If you have configured to use android private socket, you should do like this: service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0 -c / data/misc/wifi /wpa_supplicant.conf socket wpa_wlan0 dgram 660 wifi wifi disabled oneshot or if you have configured to use unix standard socket, you should do like this: service wpa_supplicant /system/bin/wpa_supplicant -Dwext -iwlan0  -c/data/misc/wifi/wpa_supplicant.conf disabled oneshot If WiFi driver is not “wext” but “nl80211”, you should change it to –Dnl80211. For dhcpcd, you should lunch it like the following: service dhcpcd_wlan0 /system/bin/dhcpcd -ABKL     class late_start     disabled oneshot The parameters “-ABKL” can largely enhance wifi connection speed.  About what “ABKL” stand for, you can refer to dhcpcd’s GNU manual. Several debug tips Incorrect permissions will result in wpa_supplicant not being able to create/open the control socket andlibhardware_legacy/wifi/wifi.c won't connect. Since Google modified wpa_supplicant to run as wifi user/group the directory structure and file ownership should belong to wifi user/group (see os_program_init() function in wpa_supplicant/os_unix.c ). Otherwise errors like: E/WifiHW  (  😞 Unable to open connection to supplicant on "/data/system/wpa_supplicant/wlan0": No such file or directory will appear. Also wpa_supplicant.conf should belong to wifi user/group because wpa_supplicant will want to modify this file. How to Enable debug for wpa_supplicant.               By default wpa_supplicant is set to MSG_INFO that doesn't tell much.                    To enable more messages:                 modify common.c and set wpa_debug_level = MSG_DEBUG                 modify common.h and change #define wpa_printf from if ((level) >= MSG_INFO) to if ((level) >= MSG_DEBUG)         3. WiFi driver’s softmac.               For most vendors’ WiFi driver, the mac address is fixed. We should add one softmac rule to let WiFi driver’s mac is unique for each board.
View full article
This ppt provides a tutorial about how to add 24bit LVDS support in Android for iMX6QD.
View full article
Instruction On Linux OS, we have two major audio system API to play/record audio pcm, alsa-lib and pulseaudio. Pulseaudio is in Freescale Ubuntu root fs release, while alsa-lib is used by default in LTIB release. This article is to tell how to configure alsa-lib by configuration file. Architecture Alsa-lib has a set of standard API which allows application to develop easily. At the same time, it provides a scalable mechanism to fulfill its features, including resample, channels remix, sound mixing from different applications, and so on. As above figure describes, alsa plugin provide fundamental function, and the whole pipeline makes customization possible. Alsa-lib API pretend to be an alsa device and provide a name for caller to open. What kind of plugin the name represents for is decided by configuration. For example, pcm.card0 {    type hw    card 0 } card0 is the fake alsa device name, with type hw, which represents for the first real alsa device. pcm.plug {     @args [ SLAVE ]     @args.SLAVE {         type string     }     type plug     slave.pcm $SLAVE } plug is the fake alsa device name, with type plug, which represents for audio conversion processor. In addition, it's also receive arguments from application that make it more flexible. When we call snd_pcm_open(.., "plug:card0",..); in the application, we create a pipeline which will first convert the source pcm to sound card 0 capable pcm if necessary in "plug" plugin, then play it to sound card 0 in "card0" plugin.  "slave.pcm" is the key to link different plugins. The number of arguments could be more than one, with definition pcm.xxx {     @args [ arg1 arg2 arg3 ]     @args.arg1 { type string }     @args.arg2 { type string }     @args.arg3 { type string }     ... } The argument could also have default value, please refer to /usr/share/alsa/alsa.conf. To pass the arguments, use snd_pcm_open(.., "xxx:arg1,arg2,arg3",..); From the name, we can always follow the pipeline to the last plugin, which type might be hw(to alsa driver), file(to file), or others (pulse, bluetooth...) to network, protocol stack and so on. The Configuration Files In configuration file, we mainly define the fake alsa device name. The root configuration file is /usr/share/alsa/alsa.conf, which will load additional configuration files which might overwrite previous name definition in the previously loaded file. The load sequence is: 1. /usr/share/alsa/alsa.conf 2. /usr/share/alsa/alsa.conf.d/* 3. /etc/asound.conf for administrator 4. $(HOME)/.asoundrc for certain user In practice, alsa applications (e.g. aplay or speaker-test) are always using "default" as the fake device name, so that the most important thing to customize your own pipeline is to overwirte "default". For example, pcm.dmix_44100{     type dmix     ipc_key 5678293     ipc_key_add_uid yes     slave{         pcm "hw:0,0"         period_time 10000         format S16_LE         rate 44100     } } pcm.!default{     type plug     route_policy "average"     slave.pcm "tee:dmix_44100,/home/wayne/a.pcm" } The "!" in "pcm.!default" means forcing overwrite. The pipeline defined above is as following figure: The next example is the "default" definition on ubuntu root fs. pcm.!default {     type pulse     hint {         show on         description "Playback/recording through the PulseAudio sound server"     } } The only alsa plugin is "pulse", and the pipeline is as following: Additional Resources There are a lot of alsa plugins developed, with various configuration parameters, I won't list them in detail. Please refer to .asoundrc - ALSA wiki for more details.
View full article
System Memory Usage and Configuration Introduction This document describes i.MX android memory usage, layout and configuration for the entire system. Total DDR memory usage When i.MX Android is running, the DDR memory will be used by the following components: Linux Kernel reserved space, including: kernel text, data section and initrd kernel page tables       Normal zone space managed by kernel’s MM (high memory zone is also included) Used by application by brk() or malloc() in libc Used by kernel by mm api, like: kmalloc, dma_alloc, vmalloc       Reserved memory for GPU drivers, used by GPU libs, drivers Android surface view, normal surface buffers VPUs working buffer and bitstream (we allocate the VPU buffer from GPU driver to make a unify method of allocation) Reserved space for framebuffer BG triple buffers Framebuffer display are always required to have triple and large buffers       Memory layout The following diagram shows the default memory usage and layout on i.MX6Q/DL platform. Memory configuration According to different type of product and different hardware configurations (ddr size, screen resolution, camera), customer may do some configurations to the memory layout and usage to optimize their system. Some memory reservation can be configured by command line or modifying the code. The kernel reserved space cannot be adjusted. It is controlled by the kernel and the Normal zone size and it depends on the total DDR size and the reserved spaces. Reserved GPU memory size can be adjusted by adding "gpumem=" parameters in kernel commandline. It's size is highly depends on the screen resolution, the video stream decoding requirement and the camera resolution, fps. gpumem=<size>M Reserved memory size for BG (background) framebuffer can be configured by command line fbmem=<fb0 size>,<fb2 size>,<fb4 size>,<fb5 size> For example: If you have two display devices, one is XGA LVDS, the other is HDMI 1080p device (default 32bpp), you have to specify the BG buffer size for them: fbmem=10M,24M The size is calculated by xres*yres*bpp*3: 10M ~= 1024x768x4(32bpp)x3(triple buffer) 24M ~= 1920x1080x4(32bpp)x3(triple buffer)
View full article
U-Boot 2009.08 (Sep 24 2011 - 22:18:53) CPU:   Freescale i.MX53 family 2.1V at 800 MHz mx53 pll1: 800MHz mx53 pll2: 400MHz mx53 pll3: 432MHz mx53 pll4: 455MHz ipg clock     : 66666666Hz ipg per clock : 33333333Hz uart clock    : 66666666Hz cspi clock    : 108000000Hz ahb clock     : 133333333Hz axi_a clock   : 400000000Hz axi_b clock   : 200000000Hz emi_slow clock: 133333333Hz ddr clock     : 400000000Hz esdhc1 clock  : 80000000Hz esdhc2 clock  : 80000000Hz esdhc3 clock  : 80000000Hz esdhc4 clock  : 80000000Hz nfc clock     : 26666666Hz Board: MX53-LOCO 1.0 Rev. A Boot Reason: [POR] Boot Device: SD I2C:   ready DRAM:   1 GB MMC:   FSL_ESDHC: 0,FSL_ESDHC: 1 In:    serial Out:   serial Err:   serial da9052_i2c_is_connected - i2c write success.... Serial reinitilized! Net:   got MAC address from IIM: 00:04:9f:01:dc:48 FEC0 [PRIME] Hit any key to stop autoboot:  2     1     0 Unknown command 'mem=64M' - try 'help' FEC: enable RMII gasket PHY indentify @ 0x0 = 0x0007c0f1 Using FEC0 device TFTP from server 192.168.0.50; our IP address is 192.168.0.150 Filename 'uImage'. Load address: 0x70800000 Loading: * FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 FEC: Link is down 7809 #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   #################################################################   ######################### done Bytes transferred = 3121348 (2fa0c4 hex) ## Booting kernel from Legacy Image at 70800000 ...    Image Name:   Linux-2.6.35.3-g4b94fa6-dirty    Image Type:   ARM Linux Kernel Image (uncompressed)    Data Size:    3121284 Bytes =  3 MB    Load Address: 70008000    Entry Point:  70008000    Verifying Checksum ... OK    Loading Kernel Image ... OK OK Starting kernel ... Éñ)Áä)Éùñ&æ'ÑÎޝÔÑ,ÂÅÄæ—X;Ù!É!ÉÑ/6ç)1)å/6ç)1)éäé×Þöæùé$ä4ÉE,ØØ ì)ÉùñÆäÌ/à&öÄ6Ex ä))á) )ÉEÐ,1'ù))É4é×/ÜØ1æÉô–ÉÉ É!)&ö ÖÑŽ0ÑEÑdÎvÀE¥¡…e%¥@9E—»@¥\ á¡QfÎ=à±&ôQ YÔ–À™$ÔÁ))Ï )/' ù)ù6 'ä1ÔÔ fÞ1ìÉÉùñÖE $éÅ—'Ø6Üá4—'ÌØ'.w”)öæ)–”Àyùñ á É Éñ9Æ—XzÁ4—XØèÉá‘)& ! f××XîÑ Éñ9×Üöä)!Éùñ4—XØèÉéˆp'ÁÁÉñ)Ñ™(Ü1É á )Ö—çÄÔÔÐÈAß !éˆ0'ÉéùÉùáÉÉÑQ(ÐÐ ÈÉ á)!á(0è 4—XØèÉôÉ!) ÙéˆpÐ9Ñá!‘_×.wÑ! È]ßñ)ôÞæÉáQר4ØÉ!ÉôÜ×/žÙq9ö,,ˆ (ù! á 9)ÑYf'ÌìedpÑ1äñ)á4—×××XïÈÆ×]wÉÑY ×.7ù±ÄÖˆØ×Ü×.è!ÉéÁÆÑŽé‘‘^×/,Üöñ)éä,Þ Ñé$äÑÎwðyäÑÎàÙ$æÑŽwðqäÑ'ö…$äÑÎwðqäÑÎ=ä¥ÖæÌé y$ÖÔäŽ=öÑö,,ÑñÉ!éöÑÞaÑñù×]zÀ‘ùù!éô,/.Ü Ü1ùù!é&äÑÎwðyæÑ'˜ô}×××,Ñ/6ç)1)ùæ.Üyßù!ù×_ sçáä×××ØÙ æ9éÈ0(!2ºÁÁÄ á)Ö/Þ4ÉÑ™fîÑÜÆÉÑQÌ.À…&Ä™\<è)ÉÖÁ )ñ!É6—XØèÉ×XÜèÀ¡ á)Ö/Þ4ÉÑ gñ™EÜæÉÑÑfÀ&öä‘\<è)ÉÖÁñù!)é4—XØèÉ×XÞèÀ¡ á)Ô/Ü6ÉÑ'˜ñ¹EÜÆÉÑ‘FÀ…ä6Ä™\<è)ÉÔÁ )éùÉÑ™'¢ ì¡ÔÐ èù! áéˆ0'ÉéùÉÑY'ð…&4×Ñ'ð…$4È0î Éá á)áQG'Îv×$))1)!á FÑ ÐÉ9Áé)ééÈ0)4æ!) á4×,ÞïÉáÔ×,7ßÉÄ×X<ß)!ÑÔÁÀD/1Ç!ù™gàÁ1111Qˆ0ð1111 dÐD;À]%Ñ ÁÀd,4ðé ‘GàÁ111YÈ0ð111)DÐæÑ]AÑed0À('dÀÙF|ÌÉÔÌ0àQÈ0ð11)DÐYg'%ÑÁÀD/7Áááù&f|ð¡Yˆ 0ð1!dÐ…öÄYÐQÌ ÀÆ××/7Éé‘GàÁÁYÈ0ðÁÄDБ'@eE”‹YŒ ÀÙé DÏ àÁ9æ—,˜àQÈ0ðÁdÐdÎ % ÑÁÀD7ß!)á)&f|ï9Yˆ0ð9ä—,àdÐQF;ÀeE”‹YÌ ÀDÑ]wÑ!$F|ðYÈ0ðÁ44DÐô&Ñ]AÑedpÀdÜ¡)Á!&f|ð 64Yˆ0ðÁ6dÐÁ&äÙ]AÑeDpÀDÞ! ! $F|ðäQÈ0ðÁ$—ØÎ0àdÀæÑ]AÑeDpÔŽ)EÑ(1Üá é ÄÈÈ/ áÉ9ñé4&ÆÈÞæÉéÖÑÎ.Àe%רeÉ!éĈÐP)éÆˆß!)éÔÁÉ) ÁÉ á$é()ÀEéá)é)ñ! ! ÉùññÖÁ‘e”)Ä )!Æ—.œÅ!Éùñö.ç! áá)!4”)ç×Þ ÈÉ á)!ñÔÁ¹¥Þaß)4! áá)!é6”) çÄ—,œÅ!Éùñ×Þ ÈÉ á)!ñÖÁé)Ö('Ñ4äÖÁÁé()ÔˆèÁ!9 )éˆ0'0¢¢²…²ºîÑ!É áÉÑ)!éÈ0 '0å)(0äáÉ6)É á6—×Þ×,Á!ÔÖÔQÈ0ð)4æØØ0àE^zÑùñöYFé‘öQEg—×/Ø×Ü×.7!!ÉéÁÔ f1Þ á )!éÈðùñùá)ÑÙ\××/Ü È)ééÉÄ—./6Ç)ÔÁ áÉ !Éñ9Ä—,wÁÉÆ××^/ÞqññÅæ'Ì ù9ùé%–Ö ÐaÑéÄö&ÑÁàÉ!ù)×X|öÆ—.,0éá!ÑÑfÎ''žÀeÉñÉé)éÑÙFáedðù)ñ!é4—XØèÉ×XÞèÀ¡ á)Ô/Ü6ÉÑ Y'äedð))Ï ()!Éñ9öÉ!)$—/.,1ä4—]1ä)ñÉÑùßÙéÈðæ)9)á !ùÑÑ\Ü1À±)ÉùñæÑ'ÿ)…%Ï $)9É!))!ù! ùùáæ—X7ÑáÉäÔÁÑñÖ—`EE¥ ùùáÑYFÌ8À]EP0ðÁÆÄÖÁ)('À‘¥”PB1éˆðùe”É%ÖY&É%ÔQ$É%ÖÙY_ØÉ.×XqÈ ù)×]zYü))ÑÑ—ç$),/4çÉùñ&äÑ·ÔÖÐÉ%ÔQ$É%ÖY&É%ÔÑQ_çý…×ר×)××)×]zQü)Éñ94 ('ÑPPéˆð Áé( é%È  É¢ºîÑ!É áÉÑ)!éˆðé F9çô Ù))ù)éˆðé F9çô Ù))ù)éÈðÄÉùÑÑ\qÉ ! )4á Æ$—»ïفäQ\zÀÔÁ'e¥²@)É!)é×]zÑ áÉÑ)!éÈð)) á)Ôé%Ð !é( É1)Æ××XbÉ!á&Ô1 ìÉÉùñÑQfÑ'À!ÔÁQÉ%ÖQ&É%ÔY$É%ÖQ&É%ÔY$É%ÖQ&É%ÔY$ˆÏ!)ÖÐ!ÀQ$É%ÖQ&É%ÔY$É%ÖQ&É%ÔY$É%ÖQ& É%Y\K×/Ð 1)4))ñÆÁÉä×/4Ç)—Þ ñù)×X{ÉÔ×XaØ)!ô)(ÈÉ1)æ—Ü ÙÁ)6ÔÔЈaß !éˆp(Ü Ù Á)4×רÈaß !á/vÉö)(Î)ñ!Éùñ×Ü éñ 1 Éá á)Ä—/1À¡ù×XyÈ9 )Ä×]7Ñ! ! ÉùñéÈpÖˆ×_ ßñ)Öä—/רöÑùñ.1ìÉ)ôÜ Ðù!ÉÙ\0Þ$—,Á1 Éá á)æ—Ü Ç)! Éñ××X,1Y JvÉ )4—.4Ïù)6×.ÜïÉáÆùÆ—»ãá)ö)(Áñ!ÄÁ)Öæ—/רöÑùñù)Æ—×$œ@œ ñ!ÆùÖ)éˆp Ü!&)é É ñÄÁ)ô/vÉÔä—/רöÑùñù)ôù)á!Æ×]Ù1À¡ùÔ)éˆ0G”.wß9ô)(Çùñ1É96Áù)á!$—,ä)éù1)!ÑÔÁùÅ($ù)— Ðé)(Àå($ù))ÔA?ù…¥(—ÁÁùù)ö×,ß1&—.wß94—,6Ïä—Ü Ðù!öÞ È)1É)æ—/רöÑùñéÈ0Ð9èÆ–È! f Øèßù)ÄÁ)éÄù9)!Á)éÈ0÷)(Ðù!4—.4ÏéÈ0Ð(&ù))ÖA?)ÖÐ&? E¥Ðé)(—Á!é(È)1É)6—.4ÏéÈ0Ð(&ù))ÖA ?9%((!(éˆpÿéù)Ñ‘^1ÏÉ!))!ä×./Ññ!)1 )ÆÞ4ì)Ö1éˆðéù)Ñ‘^1ÏÉ!))!ä×,/Ññ!)1 ) ÆÞ4î)×/Øÿéù)Ñ‘^1ÏÉ!))!æ×./È)1É)ÆÜ6ì)ÔéÈðÈ ÉÔ$ö)ÌØ)×Üé.×,ØöÉ!ÔÈ6ä&) ! 4))ñæÑÁä)9)á !ùÑ( ñÔ$ö (ÔŽ=À±ÔÑQfàY)Á!4Q)Þùé áÔÁä)9)á !ùÑ( ñÔ $ö (Î=À±ÔÑYfàQ)Á!4Q)Þùé áÔÁä)9)á !ùÑ( ñÔ$ö (ÔÎ=À…ô$ÖÖÑÙFÌ0à Ô)Á!44Y)Üùé áÖÁä)9)á !ùÑ( ñÔ$ö ('Ï áœ$ÖÖÑÙFÌ0àÔ)Á!$ôöÔY)Üùé á ÖÁä)9)á !ùÑ( ñÔ$ö (Ô'Ï á‘ÔÑÙF'˜àÔ)Á!4Q)Þùé áÔÁä)9)á !ùÑ( ñÔ &ö ('Ï á™ÖÑÑF'˜àÔ)Á!6Y)Üùé áÖÁæ)9)á !ùÑ( ñÖ$ô (Ö'Ï á‘Ô ÑÙf'àÔ)Á!&ôÔQ)Þùé áÔÁä)9)á !ùÑ( ñÔ$ö (=À…$ÖÑÙF'˜àÔ)Á!Y)Üùé á ÖÁæ)9)á !ùÑ( ñÖ&ô (ÖÏ=À…&ÖÔÑÑf'àÖ)Á!ÖQ)Üùé áÔÁæ)9)á !ùÑ( ñÖ &ô (ÖÎ0ö&ÔÑÙf'˜àÔ)Á!4Q)Þùé áÔÁä)9)á !ùÑ( ñÔ$öÉ()Ùåé(Ô!ôÔÖÑ™F˜ï¥Q)Á! &ÖY)Üùé áÖÁæ)9)á !ùÑ( ñÖ&ôÉ()Ùå %ÔÏ éÖÑ‘F˜ï¥Y)Á!6Y)Üùé á ÖÁä)9)á !ùÑ( ñÔ&öÉ()Ùå)Ô('ô$ÖÖÑ™FàQ)Á!ÔY)Üùé áÖÁä)9)á !ùÑ( ñÔ&öÉ()Ùå ¥ ¡¢EEQfàÔÑÑf'àÖ)Á!äôÖQ)Þùé áÔÁ  %Ô4Ù\ìÑ(æ)9$) !é 1GÐ ì)Éùñù)!éÈð) ),!%ÈYÉ9ÔG;ð1ÔÁ))é"Ô1ÏÖg;ðÁæÖÁ))2Ö1ÏÔG;ðÁŒ0àedp$ ) F$ é%”Ð $)9ÔG;ðÁÔÌ0àeDð))  F Ô1ÏÖg;ðÅ$ÖÁ)) "Ô1ÏÖg;ðÅæÖÁ)) éŔР&)9Ög;ðÅŒ0àeDp$ ) FC™J1ÏÔG;ðÅÖÌ0àed𑁥%˜ É% #ÈYÉ9ÔG;ðÔÁÀE¥¥@¥(Ð $)9ÔG;ð1ÔÁ)))Ž $)9ÔG;ð ÔÁ)))ÔŽ &)9Ög;ð)ÖÁ)))Ö,7ÀåG;ðÔÁ ))()Ô.7Àåg;ñÖÁ)) 2¥Åeá !)ÔÔ.7Àåg;ñ¡ÖÁ)) Éá É$),.4ßñYÔ.7Àåg;ðÔÁÑ)ùé.w×Ö‘fàÔ Á)) éŔРùE¥£a²»ïÈ)ÑYfàù ÈÁÆÄÑ'ØÖæ‹vØœÑÁ!1 ñ)!ÄÖ]wéÁ6é×/.ÁÉ!)!))ÆÞ4î)æ).ÜÞ 4ßñäÎ/ææÑÁá))!ùù!ÁÑÑXÞ1À±)$äÑÎQü)…%Ï &)9É!))!ù!ùùáä—X7ÑáÉ4ÔÁá))!ùù!ÁÑQÐ&À!)1É), Çùññ)!ÉùñÖ×XïÁ9)×]zÑ áÉÑ)!éˆðá))!ùù!ÁÑQÐ$ÀùÙ)!Æ×X>É×]zÑ áÉÑ)!éÈð'9É!ÁÉñ9 Äù4×רÙÞ×/ÞØ1ÀeÁù /4Ù) ÖÁ)…%Ï $)9É!))!ù!ùùáæ—X7ÑáÉ$ÔÁ fÞ×/œÅ6—XØèÉ×XÞè À¡ á)Ö/Ü6ÉÑQf˜ä¡EÜæÉÑFÀ¡ä™\<è)ÉÔÁ(%É! áÉÁ)!×XÜèÀ¡ á)Ô/Þ4ÉÑ™FèÁEÞæÉ Ñ™fÀ…æ4Æ‘\>è)ÉÔÁ(%ÆÉñ!×XÜèÀ¡ á)Ô/Ü6ÉÑ™FèÁEÞÆÉÑYFÀÁ&‘\>è)ÉÖÁ(%Ï ÁÄ á )4—.4Ï))!Ñ,ÞöÁáÉÁ)!$Æ™\4Þ!$ÆÑÁ(%æ)ñù&)9É!))!éÈð)  FtÁÁÆ á)Ô/Ü6ÉÑ‘FìÑÞÆÉÑFÀ¡ä‘\<è )ÉÖÁ)!¥‹ŒÑ!)×XÞèÀ¡ á)Ô/Ü6ÉÑ‘FìÑÞÆÉÑfÀ¡ä‘\<è)ÉÖÁ)…%Ï &)9É!))!ù!ùùáä—X7ÑáÉÔÁ$ é(Ï &)9É!))!Ö!Æ ñù!Ö×,9Ø)ñÔÁ&é(Ï $)9É!))!ÄÄ ñù!Ô×.9Ø)ñÔÁ&é(Ï $)9É!))!Æä(Ö÷èy ‘\0ÇÙÁ ññ)áÄ ñù!Ö×,9Ø)ñÔÁ)Ö.1À!É1)Ö×,9Ø)Æ××XbÉ!éˆpÖöÁ!Éé×/1æÖÔXïÁ9)é)ñ!ä—Þ )) á )Ñ—Yü é"¹âE1)Ô×.9Ø)Ä××XbÉ!éÈðç! é—/œß9 !Éñ9ÄÞ6î)Ô×.9Ø)Ä××XbÉ!éˆð)æÞ1áÄÜ6ì)Ô×,9Ø )Ä××XrÉ!éÈpBQ]Þ àÉé ÉéˆðÙÁù ,/,Üé.Þ1?ù)éÈð 1É(Ö ÈÉ1)Ö×,9Ø)Æ××XbÉ!éˆðÑñÔ—Ð ))Ì ) ))ñÉÆÜ6ì)éˆð 1É(Ö  )E%ÈÉ1)Ô×.9Ø)Æ××XbÉ!éˆð1Å”Ô9À±)Éùñ&äÌ/ÀAæÔPÏ É‘xÖÀ™ÖÎ0౑ J1ÈÔXzØ×Ø/QüÙ9éñÉ×XÜ Ä))ñ4)!ÄùÔÁÁá9Ñ™ÔÈöÉ!ä—Þ ç!!ñ9ÑÙqÞ9ÉÔÁÇÉ!ù!)1Ñ,Þ4î)Æ××XbÉ!ñ ÖÁÑù4Á)!)á)ä××^ æ)9É!))!éˆp6ß6Á)!)á)Æ—.0ÈáÉñ)$)9É!))!éˆðÑù6Á)!)á)6,8À‘)9É!))!,1Î ) á!ÉÖÁä)9)á !ùÑÙ.1èÁÈ/4èÁä׈4È)ñ!É1É)éÈðÉ6)!!Éñ9á(Ð ÈÉ1)öÉááä×/Ä)Ô×XaØ)!éˆð ÙÁ1ùé/1è)ÑQ×.1À!ÔÔÑXŽ ¥Ñ))( QüÙÁù)^9ÀeÁù)^9ô4»Áyñ)áÜ1Á!ÉÄ—»óá)!ÔÁÙÁù)^9ÀeÁù)^9 ô4»Áqñ)áÜ1Á!ÉÖñÉñÉ!É áÉÑ)!ÔÁùñùá)ÑÙ^/4èÁÉñ9Æù6—××/Ü Ì é)$—/.,1䯗./6Ç) ÔÁÙÁ1ùé/1è)ÑY×,1À!ÔÖ‘)( ÙÁå”PÿÙÁù)^9ÀeÁù)^9ô4»Áqñ)áÜ1Á!ÉÆ—»ãá)!öÖÁÙÁù)^9ÀeÁù)^9 ö6»Áqñ)áÞ1Á!ÉÖñÉñÉ!É áÉÑ)!öÔÁÙÁ1ùé/1è)ё׈7ß!)6!éˆðÙÁù)^9ÀeÁù)^9ô4»Áyñ)áÜ1Á!É Ä—»óá)!ÖÁÙÁù)^9ÀeÁù)^9ô4»Áyñ)áÜ1Á!ÉÔñÉñÉ!É áÉÑ)!ÖÁ')É áÑQ—Ð ñ!)ñ á Ô)(Ö–À!É1)éˆðÙÁÉñ!) !ñ&/œùeÁY\zÀe¥ÔYˆ0ð)4䨨0àE6ä ÖÑfÑ×Ü ÁäÜ1É á)Ñ—ÿcon sole [ttymxc0] enabled, bootconsole disabled console [ttymxc0] enabled, bootconsole disabled mxcintuart.1: ttymxc1 at MMIO 0x53fc0000 (irq = 32) is a Freescale i.MX mxcintuart.2: ttymxc2 at MMIO 0x5000c000 (irq = 33) is a Freescale i.MX mxcintuart.3: ttymxc3 at MMIO 0x53ff0000 (irq = 13) is a Freescale i.MX mxcintuart.4: ttymxc4 at MMIO 0x63f90000 (irq = 86) is a Freescale i.MX loop: module loaded MXC MTD nand Driver 3.0 i.MX GPMI NFC vcan: Virtual CAN interface driver Freescale FlexCAN Driver FEC Ethernet Driver fec_enet_mii_bus: probed ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1 fsl-ehci fsl-ehci.0: irq 18, io base 0x53f80000 fsl-ehci fsl-ehci.0: USB 2.0 started, EHCI 1.00 hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected fsl-ehci fsl-ehci.1: Freescale On-Chip EHCI Host Controller fsl-ehci fsl-ehci.1: new USB bus registered, assigned bus number 2 fsl-ehci fsl-ehci.1: irq 14, io base 0x53f80200 fsl-ehci fsl-ehci.1: USB 2.0 started, EHCI 1.00 hub 2-0:1.0: USB hub found hub 2-0:1.0: 1 port detected usbcore: registered new interface driver cdc_acm cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapter s Initializing USB Mass Storage driver... usbcore: registered new interface driver usb-storage USB Mass Storage support registered. ARC USBOTG Device Controller driver (1 August 2005) mice: PS/2 mouse device common for all mice input: gpio-keys as /devices/platform/gpio-keys/input/input0 MXC keypad loaded egalax_ts 2-0004: request gpio failed:-16 egalax_ts 2-0004: egalax_ts: failed to read firmware version egalax_ts: probe of 2-0004 failed with error -5 p1003_fwv33 2-0041: couldn't read panel infomation. p1003_fwv33: probe of 2-0041 failed with error -5 DA9052 TSI Device Driver, v1.0 da9052_tsi da9052_tsi: da9052_tsi_init_drv: error getting regulator VDD_A input: da9052_tsi as /devices/virtual/input/input1 TSI Drv Successfully Inserted da9052_tsi, 4-wire input: da9052-onkey as /devices/platform/imx-i2c.0/i2c-0/0-0048/da9052-onkey/inp ut/input2 mxc_rtc mxc_rtc.0: rtc core: registered mxc_rtc as rtc0 i2c /dev entries driver IR NEC protocol handler initialized IR RC5(x) protocol handler initialized IR RC6 protocol handler initialized IR JVC protocol handler initialized IR Sony protocol handler initialized Linux video capture interface: v2.00 OVIYA  init_camera_struct   2597 OV5640***: ioctl_s_power on=1    Setting mclk to 24 MHz ov5640_init_mode:write frame_rate=1, frame_rate=0 ov5640_init_mode:write frame rate=1, modee=0 OV5640***: ov5640_init_mode OV5640****: write reg=3103 val=11 ov5640_write_reg:write reg error:reg=3103,val=11 OV5640****: read reg=3103 val=11 OV5640****: write reg=3008 val=82 ov5640_write_reg:write reg error:reg=3008,val=82 OV5640****: read reg=3008 val=2 OV5640****: write reg=3008 val=42 ov5640_write_reg:write reg error:reg=3008,val=42 OV5640****: read reg=3008 val=42 OV5640****: write reg=3103 val=3 ov5640_write_reg:write reg error:reg=3103,val=3 OV5640****: read reg=3103 val=3 OV5640****: write reg=3017 val=7f ov5640_write_reg:write reg error:reg=3017,val=7f OV5640****: read reg=3017 val=7f OV5640****: write reg=3018 val=fc ov5640_write_reg:write reg error:reg=3018,val=fc OV5640****: read reg=3018 val=fc OV5640****: write reg=503d val=0 ov5640_write_reg:write reg error:reg=503d,val=0 OV5640****: read reg=503d val=0 OV5640****: write reg=3034 val=18 ov5640_write_reg:write reg error:reg=3034,val=18 OV5640****: read reg=3034 val=18 OV5640****: write reg=3035 val=11 ov5640_write_reg:write reg error:reg=3035,val=11 OV5640****: read reg=3035 val=11 OV5640****: write reg=3036 val=48 ov5640_write_reg:write reg error:reg=3036,val=48 OV5640****: read reg=3036 val=48 OV5640****: write reg=3037 val=13 ov5640_write_reg:write reg error:reg=3037,val=13 OV5640****: read reg=3037 val=13 OV5640****: write reg=303d val=32 ov5640_write_reg:write reg error:reg=303d,val=32 OV5640****: read reg=303d val=32 OV5640****: write reg=3108 val=1 ov5640_write_reg:write reg error:reg=3108,val=1 OV5640****: read reg=3108 val=1 OV5640****: write reg=3630 val=2e ov5640_write_reg:write reg error:reg=3630,val=2e OV5640****: read reg=3630 val=2e OV5640****: write reg=3632 val=e2 ov5640_write_reg:write reg error:reg=3632,val=e2 OV5640****: read reg=3632 val=e2 OV5640****: write reg=3633 val=23 ov5640_write_reg:write reg error:reg=3633,val=23 OV5640****: read reg=3633 val=23 OV5640****: write reg=3621 val=e0 ov5640_write_reg:write reg error:reg=3621,val=e0 OV5640****: read reg=3621 val=e0 OV5640****: write reg=3704 val=a0 ov5640_write_reg:write reg error:reg=3704,val=a0 OV5640****: read reg=3704 val=a0 OV5640****: write reg=3703 val=5a ov5640_write_reg:write reg error:reg=3703,val=5a OV5640****: read reg=3703 val=5a OV5640****: write reg=3715 val=78 ov5640_write_reg:write reg error:reg=3715,val=78 OV5640****: read reg=3715 val=78 OV5640****: write reg=3717 val=1 ov5640_write_reg:write reg error:reg=3717,val=1 OV5640****: read reg=3717 val=1 OV5640****: write reg=370b val=60 ov5640_write_reg:write reg error:reg=370b,val=60 OV5640****: read reg=370b val=60 OV5640****: write reg=3705 val=1a ov5640_write_reg:write reg error:reg=3705,val=1a OV5640****: read reg=3705 val=1a OV5640****: write reg=3905 val=2 ov5640_write_reg:write reg error:reg=3905,val=2 OV5640****: read reg=3905 val=2 OV5640****: write reg=3906 val=10 ov5640_write_reg:write reg error:reg=3906,val=10 OV5640****: read reg=3906 val=10 OV5640****: write reg=3901 val=a ov5640_write_reg:write reg error:reg=3901,val=a OV5640****: read reg=3901 val=a OV5640****: write reg=3731 val=12 ov5640_write_reg:write reg error:reg=3731,val=12 OV5640****: read reg=3731 val=12 OV5640****: write reg=3600 val=8 ov5640_write_reg:write reg error:reg=3600,val=8 OV5640****: read reg=3600 val=8 OV5640****: write reg=3601 val=33 ov5640_write_reg:write reg error:reg=3601,val=33 OV5640****: read reg=3601 val=33 OV5640****: write reg=302d val=60 ov5640_write_reg:write reg error:reg=302d,val=60 OV5640****: read reg=302d val=60 OV5640****: write reg=3620 val=52 ov5640_write_reg:write reg error:reg=3620,val=52 OV5640****: read reg=3620 val=52 OV5640****: write reg=371b val=20 ov5640_write_reg:write reg error:reg=371b,val=20 OV5640****: read reg=371b val=20 OV5640****: write reg=471c val=50 ov5640_write_reg:write reg error:reg=471c,val=50 OV5640****: read reg=471c val=50 OV5640****: write reg=3a18 val=0 ov5640_write_reg:write reg error:reg=3a18,val=0 OV5640****: read reg=3a18 val=0 OV5640****: write reg=3a19 val=f8 ov5640_write_reg:write reg error:reg=3a19,val=f8 OV5640****: read reg=3a19 val=f8 OV5640****: write reg=3635 val=1c ov5640_write_reg:write reg error:reg=3635,val=1c OV5640****: read reg=3635 val=1c OV5640****: write reg=3634 val=40 ov5640_write_reg:write reg error:reg=3634,val=40 OV5640****: read reg=3634 val=40 OV5640****: write reg=3622 val=1 ov5640_write_reg:write reg error:reg=3622,val=1 OV5640****: read reg=3622 val=1 OV5640****: write reg=3c01 val=34 ov5640_write_reg:write reg error:reg=3c01,val=34 OV5640****: read reg=3c01 val=34 OV5640****: write reg=3c04 val=28 ov5640_write_reg:write reg error:reg=3c04,val=28 OV5640****: read reg=3c04 val=28 OV5640****: write reg=3c05 val=98 ov5640_write_reg:write reg error:reg=3c05,val=98 OV5640****: read reg=3c05 val=98 OV5640****: write reg=3c06 val=0 ov5640_write_reg:write reg error:reg=3c06,val=0 OV5640****: read reg=3c06 val=0 OV5640****: write reg=3c07 val=8 ov5640_write_reg:write reg error:reg=3c07,val=8 OV5640****: read reg=3c07 val=8 OV5640****: write reg=3c08 val=0 ov5640_write_reg:write reg error:reg=3c08,val=0 OV5640****: read reg=3c08 val=0 OV5640****: write reg=3c09 val=1c ov5640_write_reg:write reg error:reg=3c09,val=1c OV5640****: read reg=3c09 val=1c OV5640****: write reg=3c0a val=9c ov5640_write_reg:write reg error:reg=3c0a,val=9c OV5640****: read reg=3c0a val=9c OV5640****: write reg=3c0b val=40 ov5640_write_reg:write reg error:reg=3c0b,val=40 OV5640****: read reg=3c0b val=40 OV5640****: write reg=3820 val=41 ov5640_write_reg:write reg error:reg=3820,val=41 OV5640****: read reg=3820 val=41 OV5640****: write reg=3821 val=7 ov5640_write_reg:write reg error:reg=3821,val=7 OV5640****: read reg=3821 val=7 OV5640****: write reg=3814 val=31 ov5640_write_reg:write reg error:reg=3814,val=31 OV5640****: read reg=3814 val=31 OV5640****: write reg=3815 val=31 ov5640_write_reg:write reg error:reg=3815,val=31 OV5640****: read reg=3815 val=31 OV5640****: write reg=3800 val=0 ov5640_write_reg:write reg error:reg=3800,val=0 OV5640****: read reg=3800 val=0 OV5640****: write reg=3801 val=0 ov5640_write_reg:write reg error:reg=3801,val=0 OV5640****: read reg=3801 val=0 OV5640****: write reg=3802 val=0 ov5640_write_reg:write reg error:reg=3802,val=0 OV5640****: read reg=3802 val=0 OV5640****: write reg=3803 val=4 ov5640_write_reg:write reg error:reg=3803,val=4 OV5640****: read reg=3803 val=4 OV5640****: write reg=3804 val=a ov5640_write_reg:write reg error:reg=3804,val=a OV5640****: read reg=3804 val=a OV5640****: write reg=3805 val=3f ov5640_write_reg:write reg error:reg=3805,val=3f OV5640****: read reg=3805 val=3f OV5640****: write reg=3806 val=7 ov5640_write_reg:write reg error:reg=3806,val=7 OV5640****: read reg=3806 val=7 OV5640****: write reg=3807 val=9f ov5640_write_reg:write reg error:reg=3807,val=9f OV5640****: read reg=3807 val=9f OV5640****: write reg=3808 val=2 ov5640_write_reg:write reg error:reg=3808,val=2 OV5640****: read reg=3808 val=2 OV5640****: write reg=3809 val=80 ov5640_write_reg:write reg error:reg=3809,val=80 OV5640****: read reg=3809 val=80 OV5640****: write reg=380a val=1 ov5640_write_reg:write reg error:reg=380a,val=1 OV5640****: read reg=380a val=1 OV5640****: write reg=380b val=e0 ov5640_write_reg:write reg error:reg=380b,val=e0 OV5640****: read reg=380b val=e0 OV5640****: write reg=380c val=b ov5640_write_reg:write reg error:reg=380c,val=b OV5640****: read reg=380c val=b OV5640****: write reg=380d val=1c ov5640_write_reg:write reg error:reg=380d,val=1c OV5640****: read reg=380d val=1c OV5640****: write reg=380e val=7 ov5640_write_reg:write reg error:reg=380e,val=7 OV5640****: read reg=380e val=7 OV5640****: write reg=380f val=b0 ov5640_write_reg:write reg error:reg=380f,val=b0 OV5640****: read reg=380f val=b0 OV5640****: write reg=3810 val=0 ov5640_write_reg:write reg error:reg=3810,val=0 OV5640****: read reg=3810 val=0 OV5640****: write reg=3811 val=10 ov5640_write_reg:write reg error:reg=3811,val=10 OV5640****: read reg=3811 val=10 OV5640****: write reg=3812 val=0 ov5640_write_reg:write reg error:reg=3812,val=0 OV5640****: read reg=3812 val=0 OV5640****: write reg=3813 val=6 ov5640_write_reg:write reg error:reg=3813,val=6 OV5640****: read reg=3813 val=6 OV5640****: write reg=3811 val=10 ov5640_write_reg:write reg error:reg=3811,val=10 OV5640****: read reg=3811 val=10 OV5640****: write reg=3812 val=0 ov5640_write_reg:write reg error:reg=3812,val=0 OV5640****: read reg=3812 val=0 OV5640****: write reg=3813 val=6 ov5640_write_reg:write reg error:reg=3813,val=6 OV5640****: read reg=3813 val=6 OV5640****: write reg=3814 val=11 ov5640_write_reg:write reg error:reg=3814,val=11 OV5640****: read reg=3814 val=11 OV5640****: write reg=3815 val=11 ov5640_write_reg:write reg error:reg=3815,val=11 OV5640****: read reg=3815 val=11 OV5640****: write reg=3618 val=0 ov5640_write_reg:write reg error:reg=3618,val=0 OV5640****: read reg=3618 val=0 OV5640****: write reg=3612 val=29 ov5640_write_reg:write reg error:reg=3612,val=29 OV5640****: read reg=3612 val=29 OV5640****: write reg=3708 val=62 ov5640_write_reg:write reg error:reg=3708,val=62 OV5640****: read reg=3708 val=62 OV5640****: write reg=3709 val=52 ov5640_write_reg:write reg error:reg=3709,val=52 OV5640****: read reg=3709 val=52 OV5640****: write reg=370c val=3 ov5640_write_reg:write reg error:reg=370c,val=3 OV5640****: read reg=370c val=3 OV5640****: write reg=3a02 val=3 ov5640_write_reg:write reg error:reg=3a02,val=3 OV5640****: read reg=3a02 val=3 OV5640****: write reg=3a03 val=d8 ov5640_write_reg:write reg error:reg=3a03,val=d8 OV5640****: read reg=3a03 val=d8 OV5640****: write reg=3a08 val=1 ov5640_write_reg:write reg error:reg=3a08,val=1 OV5640****: read reg=3a08 val=1 OV5640****: write reg=3a09 val=27 ov5640_write_reg:write reg error:reg=3a09,val=27 OV5640****: read reg=3a09 val=27 OV5640****: write reg=3a0a val=0 ov5640_write_reg:write reg error:reg=3a0a,val=0 OV5640****: read reg=3a0a val=0 OV5640****: write reg=3a0b val=f6 ov5640_write_reg:write reg error:reg=3a0b,val=f6 OV5640****: read reg=3a0b val=f6 OV5640****: write reg=3a0e val=3 ov5640_write_reg:write reg error:reg=3a0e,val=3 OV5640****: read reg=3a0e val=3 OV5640****: write reg=3a0d val=4 ov5640_write_reg:write reg error:reg=3a0d,val=4 OV5640****: read reg=3a0d val=4 OV5640****: write reg=3a14 val=3 ov5640_write_reg:write reg error:reg=3a14,val=3 OV5640****: read reg=3a14 val=3 OV5640****: write reg=3a15 val=d8 ov5640_write_reg:write reg error:reg=3a15,val=d8 OV5640****: read reg=3a15 val=d8 OV5640****: write reg=4000 val=1 ov5640_write_reg:write reg error:reg=4000,val=1 OV5640****: read reg=4000 val=1 OV5640****: write reg=4001 val=2 ov5640_write_reg:write reg error:reg=4001,val=2 OV5640****: read reg=4001 val=2 OV5640****: write reg=4004 val=2 ov5640_write_reg:write reg error:reg=4004,val=2 OV5640****: read reg=4004 val=2 OV5640****: write reg=3000 val=0 ov5640_write_reg:write reg error:reg=3000,val=0 OV5640****: read reg=3000 val=0 OV5640****: write reg=3002 val=1c ov5640_write_reg:write reg error:reg=3002,val=1c OV5640****: read reg=3002 val=1c OV5640****: write reg=3004 val=ff ov5640_write_reg:write reg error:reg=3004,val=ff OV5640****: read reg=3004 val=ff OV5640****: write reg=3006 val=c3 ov5640_write_reg:write reg error:reg=3006,val=c3 OV5640****: read reg=3006 val=c3 OV5640****: write reg=300e val=58 ov5640_write_reg:write reg error:reg=300e,val=58 OV5640****: read reg=300e val=58 OV5640****: write reg=302e val=0 ov5640_write_reg:write reg error:reg=302e,val=0 OV5640****: read reg=302e val=0 OV5640****: write reg=4300 val=30 ov5640_write_reg:write reg error:reg=4300,val=30 OV5640****: read reg=4300 val=30 OV5640****: write reg=501f val=0 ov5640_write_reg:write reg error:reg=501f,val=0 OV5640****: read reg=501f val=0 OV5640****: write reg=5027 val=1 ov5640_write_reg:write reg error:reg=5027,val=1 OV5640****: read reg=5027 val=1 OV5640****: write reg=5028 val=4 ov5640_write_reg:write reg error:reg=5028,val=4 OV5640****: read reg=5028 val=4 OV5640****: write reg=5029 val=90 ov5640_write_reg:write reg error:reg=5029,val=90 OV5640****: read reg=5029 val=90 OV5640****: write reg=502a val=5 ov5640_write_reg:write reg error:reg=502a,val=5 OV5640****: read reg=502a val=5 OV5640****: write reg=502b val=90 ov5640_write_reg:write reg error:reg=502b,val=90 OV5640****: read reg=502b val=90 OV5640****: write reg=502c val=3 ov5640_write_reg:write reg error:reg=502c,val=3 OV5640****: read reg=502c val=3 OV5640****: write reg=4713 val=3 ov5640_write_reg:write reg error:reg=4713,val=3 OV5640****: read reg=4713 val=3 OV5640****: write reg=4407 val=4 ov5640_write_reg:write reg error:reg=4407,val=4 OV5640****: read reg=4407 val=4 OV5640****: write reg=502d val=6c ov5640_write_reg:write reg error:reg=502d,val=6c OV5640****: read reg=502d val=6c OV5640****: write reg=502e val=4 ov5640_write_reg:write reg error:reg=502e,val=4 OV5640****: read reg=502e val=4 OV5640****: write reg=502f val=2c ov5640_write_reg:write reg error:reg=502f,val=2c OV5640****: read reg=502f val=2c OV5640****: write reg=5034 val=80 ov5640_write_reg:write reg error:reg=5034,val=80 OV5640****: read reg=5034 val=80 OV5640****: write reg=5035 val=2a ov5640_write_reg:write reg error:reg=5035,val=2a OV5640****: read reg=5035 val=2a OV5640****: write reg=5036 val=14 ov5640_write_reg:write reg error:reg=5036,val=14 OV5640****: read reg=5036 val=14 OV5640****: write reg=460b val=35 ov5640_write_reg:write reg error:reg=460b,val=35 OV5640****: read reg=460b val=35 OV5640****: write reg=460c val=22 ov5640_write_reg:write reg error:reg=460c,val=22 OV5640****: read reg=460c val=22 OV5640****: write reg=3824 val=2 ov5640_write_reg:write reg error:reg=3824,val=2 OV5640****: read reg=3824 val=2 OV5640****: write reg=5000 val=a7 ov5640_write_reg:write reg error:reg=5000,val=a7 OV5640****: read reg=5000 val=a7 OV5640****: write reg=5001 val=23 ov5640_write_reg:write reg error:reg=5001,val=23 OV5640****: read reg=5001 val=23 OV5640****: write reg=5005 val=36 ov5640_write_reg:write reg error:reg=5005,val=36 OV5640****: read reg=5005 val=36 OV5640****: write reg=5180 val=ff ov5640_write_reg:write reg error:reg=5180,val=ff OV5640****: read reg=5180 val=ff OV5640****: write reg=5181 val=f2 ov5640_write_reg:write reg error:reg=5181,val=f2 OV5640****: read reg=5181 val=f2 OV5640****: write reg=5182 val=0 ov5640_write_reg:write reg error:reg=5182,val=0 OV5640****: read reg=5182 val=0 OV5640****: write reg=5183 val=90 ov5640_write_reg:write reg error:reg=5183,val=90 OV5640****: read reg=5183 val=90 OV5640****: write reg=5184 val=25 ov5640_write_reg:write reg error:reg=5184,val=25 OV5640****: read reg=5184 val=25 OV5640****: write reg=5185 val=24 ov5640_write_reg:write reg error:reg=5185,val=24 OV5640****: read reg=5185 val=24 OV5640****: write reg=5186 val=9 ov5640_write_reg:write reg error:reg=5186,val=9 OV5640****: read reg=5186 val=9 OV5640****: write reg=5187 val=9 ov5640_write_reg:write reg error:reg=5187,val=9 OV5640****: read reg=5187 val=9 OV5640****: write reg=5188 val=9 ov5640_write_reg:write reg error:reg=5188,val=9 OV5640****: read reg=5188 val=9 OV5640****: write reg=5189 val=75 ov5640_write_reg:write reg error:reg=5189,val=75 OV5640****: read reg=5189 val=75 OV5640****: write reg=518a val=54 ov5640_write_reg:write reg error:reg=518a,val=54 OV5640****: read reg=518a val=54 OV5640****: write reg=518b val=e0 ov5640_write_reg:write reg error:reg=518b,val=e0 OV5640****: read reg=518b val=e0 OV5640****: write reg=518c val=b2 ov5640_write_reg:write reg error:reg=518c,val=b2 OV5640****: read reg=518c val=b2 OV5640****: write reg=518d val=42 ov5640_write_reg:write reg error:reg=518d,val=42 OV5640****: read reg=518d val=42 OV5640****: write reg=518e val=3d ov5640_write_reg:write reg error:reg=518e,val=3d OV5640****: read reg=518e val=3d OV5640****: write reg=518f val=56 ov5640_write_reg:write reg error:reg=518f,val=56 OV5640****: read reg=518f val=56 OV5640****: write reg=5190 val=46 ov5640_write_reg:write reg error:reg=5190,val=46 OV5640****: read reg=5190 val=46 OV5640****: write reg=5191 val=f8 ov5640_write_reg:write reg error:reg=5191,val=f8 OV5640****: read reg=5191 val=f8 OV5640****: write reg=5192 val=4 ov5640_write_reg:write reg error:reg=5192,val=4 OV5640****: read reg=5192 val=4 OV5640****: write reg=5381 val=1c ov5640_write_reg:write reg error:reg=5381,val=1c OV5640****: read reg=5381 val=1c OV5640****: write reg=5382 val=5a ov5640_write_reg:write reg error:reg=5382,val=5a OV5640****: read reg=5382 val=5a OV5640****: write reg=5383 val=6 ov5640_write_reg:write reg error:reg=5383,val=6 OV5640****: read reg=5383 val=6 OV5640****: write reg=5384 val=a ov5640_write_reg:write reg error:reg=5384,val=a OV5640****: read reg=5384 val=a OV5640****: write reg=5385 val=7e ov5640_write_reg:write reg error:reg=5385,val=7e OV5640****: read reg=5385 val=7e OV5640****: write reg=5386 val=88 ov5640_write_reg:write reg error:reg=5386,val=88 OV5640****: read reg=5386 val=88 OV5640****: write reg=5387 val=7c ov5640_write_reg:write reg error:reg=5387,val=7c OV5640****: read reg=5387 val=7c OV5640****: write reg=5388 val=6c ov5640_write_reg:write reg error:reg=5388,val=6c OV5640****: read reg=5388 val=6c OV5640****: write reg=5389 val=10 ov5640_write_reg:write reg error:reg=5389,val=10 OV5640****: read reg=5389 val=10 OV5640****: write reg=538a val=1 ov5640_write_reg:write reg error:reg=538a,val=1 OV5640****: read reg=538a val=1 OV5640****: write reg=538b val=98 ov5640_write_reg:write reg error:reg=538b,val=98 OV5640****: read reg=538b val=98 OV5640****: write reg=5300 val=8 ov5640_write_reg:write reg error:reg=5300,val=8 OV5640****: read reg=5300 val=8 OV5640****: write reg=5301 val=30 ov5640_write_reg:write reg error:reg=5301,val=30 OV5640****: read reg=5301 val=30 OV5640****: write reg=5302 val=10 ov5640_write_reg:write reg error:reg=5302,val=10 OV5640****: read reg=5302 val=10 OV5640****: write reg=5303 val=0 ov5640_write_reg:write reg error:reg=5303,val=0 OV5640****: read reg=5303 val=0 OV5640****: write reg=5304 val=8 ov5640_write_reg:write reg error:reg=5304,val=8 OV5640****: read reg=5304 val=8 OV5640****: write reg=5305 val=30 ov5640_write_reg:write reg error:reg=5305,val=30 OV5640****: read reg=5305 val=30 OV5640****: write reg=5306 val=8 ov5640_write_reg:write reg error:reg=5306,val=8 OV5640****: read reg=5306 val=8 OV5640****: write reg=5307 val=16 ov5640_write_reg:write reg error:reg=5307,val=16 OV5640****: read reg=5307 val=16 OV5640****: write reg=5309 val=8 ov5640_write_reg:write reg error:reg=5309,val=8 OV5640****: read reg=5309 val=8 OV5640****: write reg=530a val=30 ov5640_write_reg:write reg error:reg=530a,val=30 OV5640****: read reg=530a val=30 OV5640****: write reg=530b val=4 ov5640_write_reg:write reg error:reg=530b,val=4 OV5640****: read reg=530b val=4 OV5640****: write reg=530c val=6 ov5640_write_reg:write reg error:reg=530c,val=6 OV5640****: read reg=530c val=6 OV5640****: write reg=5480 val=1 ov5640_write_reg:write reg error:reg=5480,val=1 OV5640****: read reg=5480 val=1 OV5640****: write reg=5481 val=8 ov5640_write_reg:write reg error:reg=5481,val=8 OV5640****: read reg=5481 val=8 OV5640****: write reg=5482 val=14 ov5640_write_reg:write reg error:reg=5482,val=14 OV5640****: read reg=5482 val=14 OV5640****: write reg=5483 val=28 ov5640_write_reg:write reg error:reg=5483,val=28 OV5640****: read reg=5483 val=28 OV5640****: write reg=5484 val=51 ov5640_write_reg:write reg error:reg=5484,val=51 OV5640****: read reg=5484 val=51 OV5640****: write reg=5485 val=65 ov5640_write_reg:write reg error:reg=5485,val=65 OV5640****: read reg=5485 val=65 OV5640****: write reg=5486 val=71 ov5640_write_reg:write reg error:reg=5486,val=71 OV5640****: read reg=5486 val=71 OV5640****: write reg=5487 val=7d ov5640_write_reg:write reg error:reg=5487,val=7d OV5640****: read reg=5487 val=7d OV5640****: write reg=5488 val=87 ov5640_write_reg:write reg error:reg=5488,val=87 OV5640****: read reg=5488 val=87 OV5640****: write reg=5489 val=91 ov5640_write_reg:write reg error:reg=5489,val=91 OV5640****: read reg=5489 val=91 OV5640****: write reg=548a val=9a ov5640_write_reg:write reg error:reg=548a,val=9a OV5640****: read reg=548a val=9a OV5640****: write reg=548b val=aa ov5640_write_reg:write reg error:reg=548b,val=aa OV5640****: read reg=548b val=aa OV5640****: write reg=548c val=b8 ov5640_write_reg:write reg error:reg=548c,val=b8 OV5640****: read reg=548c val=b8 OV5640****: write reg=548d val=cd ov5640_write_reg:write reg error:reg=548d,val=cd OV5640****: read reg=548d val=cd OV5640****: write reg=548e val=dd ov5640_write_reg:write reg error:reg=548e,val=dd OV5640****: read reg=548e val=dd OV5640****: write reg=548f val=ea ov5640_write_reg:write reg error:reg=548f,val=ea OV5640****: read reg=548f val=ea OV5640****: write reg=5490 val=1d ov5640_write_reg:write reg error:reg=5490,val=1d OV5640****: read reg=5490 val=1d OV5640****: write reg=5580 val=2 ov5640_write_reg:write reg error:reg=5580,val=2 OV5640****: read reg=5580 val=2 OV5640****: write reg=5583 val=40 ov5640_write_reg:write reg error:reg=5583,val=40 OV5640****: read reg=5583 val=40 OV5640****: write reg=5584 val=10 ov5640_write_reg:write reg error:reg=5584,val=10 OV5640****: read reg=5584 val=10 OV5640****: write reg=5589 val=10 ov5640_write_reg:write reg error:reg=5589,val=10 OV5640****: read reg=5589 val=10 OV5640****: write reg=558a val=0 ov5640_write_reg:write reg error:reg=558a,val=0 OV5640****: read reg=558a val=0 OV5640****: write reg=558b val=f8 ov5640_write_reg:write reg error:reg=558b,val=f8 OV5640****: read reg=558b val=f8 OV5640****: write reg=5800 val=23 ov5640_write_reg:write reg error:reg=5800,val=23 OV5640****: read reg=5800 val=23 OV5640****: write reg=5801 val=15 ov5640_write_reg:write reg error:reg=5801,val=15 OV5640****: read reg=5801 val=15 OV5640****: write reg=5802 val=10 ov5640_write_reg:write reg error:reg=5802,val=10 OV5640****: read reg=5802 val=10 OV5640****: write reg=5803 val=10 ov5640_write_reg:write reg error:reg=5803,val=10 OV5640****: read reg=5803 val=10 OV5640****: write reg=5804 val=15 ov5640_write_reg:write reg error:reg=5804,val=15 OV5640****: read reg=5804 val=15 OV5640****: write reg=5805 val=23 ov5640_write_reg:write reg error:reg=5805,val=23 OV5640****: read reg=5805 val=23 OV5640****: write reg=5806 val=c ov5640_write_reg:write reg error:reg=5806,val=c OV5640****: read reg=5806 val=c OV5640****: write reg=5807 val=8 ov5640_write_reg:write reg error:reg=5807,val=8 OV5640****: read reg=5807 val=8 OV5640****: write reg=5808 val=5 ov5640_write_reg:write reg error:reg=5808,val=5 OV5640****: read reg=5808 val=5 OV5640****: write reg=5809 val=5 ov5640_write_reg:write reg error:reg=5809,val=5 OV5640****: read reg=5809 val=5 OV5640****: write reg=580a val=8 ov5640_write_reg:write reg error:reg=580a,val=8 OV5640****: read reg=580a val=8 OV5640****: write reg=580b val=c ov5640_write_reg:write reg error:reg=580b,val=c OV5640****: read reg=580b val=c OV5640****: write reg=580c val=7 ov5640_write_reg:write reg error:reg=580c,val=7 OV5640****: read reg=580c val=7 OV5640****: write reg=580d val=3 ov5640_write_reg:write reg error:reg=580d,val=3 OV5640****: read reg=580d val=3 OV5640****: write reg=580e val=0 ov5640_write_reg:write reg error:reg=580e,val=0 OV5640****: read reg=580e val=0 OV5640****: write reg=580f val=0 ov5640_write_reg:write reg error:reg=580f,val=0 OV5640****: read reg=580f val=0 OV5640****: write reg=5810 val=3 ov5640_write_reg:write reg error:reg=5810,val=3 OV5640****: read reg=5810 val=3 OV5640****: write reg=5811 val=7 ov5640_write_reg:write reg error:reg=5811,val=7 OV5640****: read reg=5811 val=7 OV5640****: write reg=5812 val=7 ov5640_write_reg:write reg error:reg=5812,val=7 OV5640****: read reg=5812 val=7 OV5640****: write reg=5813 val=3 ov5640_write_reg:write reg error:reg=5813,val=3 OV5640****: read reg=5813 val=3 OV5640****: write reg=5814 val=0 ov5640_write_reg:write reg error:reg=5814,val=0 OV5640****: read reg=5814 val=0 OV5640****: write reg=5815 val=0 ov5640_write_reg:write reg error:reg=5815,val=0 OV5640****: read reg=5815 val=0 OV5640****: write reg=5816 val=3 ov5640_write_reg:write reg error:reg=5816,val=3 OV5640****: read reg=5816 val=3 OV5640****: write reg=5817 val=7 ov5640_write_reg:write reg error:reg=5817,val=7 OV5640****: read reg=5817 val=7 OV5640****: write reg=5818 val=b ov5640_write_reg:write reg error:reg=5818,val=b OV5640****: read reg=5818 val=b OV5640****: write reg=5819 val=8 ov5640_write_reg:write reg error:reg=5819,val=8 OV5640****: read reg=5819 val=8 OV5640****: write reg=581a val=5 ov5640_write_reg:write reg error:reg=581a,val=5 OV5640****: read reg=581a val=5 OV5640****: write reg=581b val=5 ov5640_write_reg:write reg error:reg=581b,val=5 OV5640****: read reg=581b val=5 OV5640****: write reg=581c val=7 ov5640_write_reg:write reg error:reg=581c,val=7 OV5640****: read reg=581c val=7 OV5640****: write reg=581d val=b ov5640_write_reg:write reg error:reg=581d,val=b OV5640****: read reg=581d val=b OV5640****: write reg=581e val=2a ov5640_write_reg:write reg error:reg=581e,val=2a OV5640****: read reg=581e val=2a OV5640****: write reg=581f val=16 ov5640_write_reg:write reg error:reg=581f,val=16 OV5640****: read reg=581f val=16 OV5640****: write reg=5820 val=11 ov5640_write_reg:write reg error:reg=5820,val=11 OV5640****: read reg=5820 val=11 OV5640****: write reg=5821 val=11 ov5640_write_reg:write reg error:reg=5821,val=11 OV5640****: read reg=5821 val=11 OV5640****: write reg=5822 val=15 ov5640_write_reg:write reg error:reg=5822,val=15 OV5640****: read reg=5822 val=15 OV5640****: write reg=5823 val=29 ov5640_write_reg:write reg error:reg=5823,val=29 OV5640****: read reg=5823 val=29 OV5640****: write reg=5824 val=bf ov5640_write_reg:write reg error:reg=5824,val=bf OV5640****: read reg=5824 val=bf OV5640****: write reg=5825 val=af ov5640_write_reg:write reg error:reg=5825,val=af OV5640****: read reg=5825 val=af OV5640****: write reg=5826 val=9f ov5640_write_reg:write reg error:reg=5826,val=9f OV5640****: read reg=5826 val=9f OV5640****: write reg=5827 val=af ov5640_write_reg:write reg error:reg=5827,val=af OV5640****: read reg=5827 val=af OV5640****: write reg=5828 val=df ov5640_write_reg:write reg error:reg=5828,val=df OV5640****: read reg=5828 val=df OV5640****: write reg=5829 val=6f ov5640_write_reg:write reg error:reg=5829,val=6f OV5640****: read reg=5829 val=6f OV5640****: write reg=582a val=8e ov5640_write_reg:write reg error:reg=582a,val=8e OV5640****: read reg=582a val=8e OV5640****: write reg=582b val=ab ov5640_write_reg:write reg error:reg=582b,val=ab OV5640****: read reg=582b val=ab OV5640****: write reg=582c val=9e ov5640_write_reg:write reg error:reg=582c,val=9e OV5640****: read reg=582c val=9e OV5640****: write reg=582d val=7f ov5640_write_reg:write reg error:reg=582d,val=7f OV5640****: read reg=582d val=7f OV5640****: write reg=582e val=4f ov5640_write_reg:write reg error:reg=582e,val=4f OV5640****: read reg=582e val=4f OV5640****: write reg=582f val=89 ov5640_write_reg:write reg error:reg=582f,val=89 OV5640****: read reg=582f val=89 OV5640****: write reg=5830 val=86 ov5640_write_reg:write reg error:reg=5830,val=86 OV5640****: read reg=5830 val=86 OV5640****: write reg=5831 val=98 ov5640_write_reg:write reg error:reg=5831,val=98 OV5640****: read reg=5831 val=98 OV5640****: write reg=5832 val=6f ov5640_write_reg:write reg error:reg=5832,val=6f OV5640****: read reg=5832 val=6f OV5640****: write reg=5833 val=4f ov5640_write_reg:write reg error:reg=5833,val=4f OV5640****: read reg=5833 val=4f OV5640****: write reg=5834 val=6e ov5640_write_reg:write reg error:reg=5834,val=6e OV5640****: read reg=5834 val=6e OV5640****: write reg=5835 val=7b ov5640_write_reg:write reg error:reg=5835,val=7b OV5640****: read reg=5835 val=7b OV5640****: write reg=5836 val=7e ov5640_write_reg:write reg error:reg=5836,val=7e OV5640****: read reg=5836 val=7e OV5640****: write reg=5837 val=6f ov5640_write_reg:write reg error:reg=5837,val=6f OV5640****: read reg=5837 val=6f OV5640****: write reg=5838 val=de ov5640_write_reg:write reg error:reg=5838,val=de OV5640****: read reg=5838 val=de OV5640****: write reg=5839 val=bf ov5640_write_reg:write reg error:reg=5839,val=bf OV5640****: read reg=5839 val=bf OV5640****: write reg=583a val=9f ov5640_write_reg:write reg error:reg=583a,val=9f OV5640****: read reg=583a val=9f OV5640****: write reg=583b val=bf ov5640_write_reg:write reg error:reg=583b,val=bf OV5640****: read reg=583b val=bf OV5640****: write reg=583c val=ec ov5640_write_reg:write reg error:reg=583c,val=ec OV5640****: read reg=583c val=ec OV5640****: write reg=5025 val=0 ov5640_write_reg:write reg error:reg=5025,val=0 OV5640****: read reg=5025 val=0 OV5640****: write reg=3a0f val=30 ov5640_write_reg:write reg error:reg=3a0f,val=30 OV5640****: read reg=3a0f val=30 OV5640****: write reg=3a10 val=28 ov5640_write_reg:write reg error:reg=3a10,val=28 OV5640****: read reg=3a10 val=28 OV5640****: write reg=3a1b val=30 ov5640_write_reg:write reg error:reg=3a1b,val=30 OV5640****: read reg=3a1b val=30 OV5640****: write reg=3a1e val=26 ov5640_write_reg:write reg error:reg=3a1e,val=26 OV5640****: read reg=3a1e val=26 OV5640****: write reg=3a11 val=60 ov5640_write_reg:write reg error:reg=3a11,val=60 OV5640****: read reg=3a11 val=60 OV5640****: write reg=3a1f val=14 ov5640_write_reg:write reg error:reg=3a1f,val=14 OV5640****: read reg=3a1f val=14 OV5640****: write reg=3008 val=2 ov5640_write_reg:write reg error:reg=3008,val=2 OV5640****: read reg=3008 val=2 OV5640****: write reg=3035 val=21 ov5640_write_reg:write reg error:reg=3035,val=21 OV5640****: read reg=3035 val=21 OV5640****: write reg=4741 val=1 ov5640_write_reg:write reg error:reg=4741,val=1 OV5640****: read reg=4741 val=1 OV5640****: read reg=3000 val=0 OV5640****: read reg=3001 val=8 OV5640****: read reg=3002 val=1c OV5640****: read reg=3003 val=0 OV5640****: read reg=3004 val=ff OV5640****: read reg=3005 val=f7 OV5640****: read reg=3006 val=c3 OV5640****: read reg=3007 val=ff OV5640****: read reg=3008 val=2 OV5640****: read reg=3009 val=1 OV5640****: read reg=300a val=56 OV5640****: read reg=300b val=40 OV5640****: read reg=300c val=22 OV5640****: read reg=300d val=0 OV5640****: read reg=300e val=58 OV5640****: read reg=300f val=0 OV5640****: read reg=3010 val=0 OV5640****: read reg=3011 val=0 OV5640****: read reg=3012 val=0 OV5640****: read reg=3013 val=0 OV5640****: read reg=3014 val=0 OV5640****: read reg=3015 val=7 OV5640****: read reg=3016 val=0 OV5640****: read reg=3017 val=7f OV5640****: read reg=3018 val=fc OV5640****: read reg=3019 val=f0 OV5640****: read reg=301a val=0 OV5640****: read reg=301b val=0 OV5640****: read reg=301c val=0 OV5640****: read reg=301d val=0 OV5640****: read reg=301e val=0 OV5640****: read reg=301f val=0 OV5640****: read reg=3020 val=0 OV5640****: read reg=3021 val=0 OV5640****: read reg=3022 val=0 OV5640****: read reg=3023 val=0 OV5640****: read reg=3024 val=0 OV5640****: read reg=3025 val=0 OV5640****: read reg=3026 val=0 OV5640****: read reg=3027 val=0 OV5640****: read reg=3028 val=0 OV5640****: read reg=3029 val=0 OV5640****: read reg=302a val=b0 OV5640****: read reg=302b val=0 OV5640****: read reg=302c val=2 OV5640****: read reg=302d val=60 OV5640****: read reg=302e val=0 OV5640****: read reg=302f val=2 OV5640****: read reg=3030 val=b OV5640****: read reg=3031 val=0 OV5640****: read reg=3032 val=0 OV5640****: read reg=3033 val=3 OV5640****: read reg=3034 val=18 OV5640****: read reg=3035 val=21 OV5640****: read reg=3036 val=48 OV5640****: read reg=3037 val=13 OV5640****: read reg=3038 val=0 OV5640****: read reg=3039 val=0 OV5640****: read reg=303a val=0 OV5640****: read reg=303b val=19 OV5640****: read reg=303c val=11 OV5640****: read reg=303d val=32 OV5640****: read reg=303e val=0 OV5640****: read reg=303f val=0 OV5640****: read reg=3040 val=10 OV5640****: read reg=3041 val=ff OV5640****: read reg=3042 val=0 OV5640****: read reg=3043 val=ff OV5640****: read reg=3044 val=9 OV5640****: read reg=3045 val=0 OV5640****: read reg=3046 val=0 OV5640****: read reg=3047 val=0 OV5640****: read reg=3048 val=0 OV5640****: read reg=3049 val=0 OV5640****: read reg=304a val=0 OV5640****: read reg=304b val=0 OV5640****: read reg=304c val=0 OV5640****: read reg=304d val=0 OV5640****: read reg=304e val=0 OV5640****: read reg=304f val=0 OV5640****: read reg=3050 val=7 OV5640****: read reg=3051 val=1 OV5640****: read reg=3052 val=b2 mxc_v4l2_output mxc_v4l2_output.0: Registered device video1 usbcore: registered new interface driver uvcvideo USB Video Class driver (v0.1.0) APM Battery Driver   oviya check mma8450 chip ID ovi MMA8450 ACCELEROMETER and RESUL:0xf 0xc6 mma8450 0-001c: build time Sep  6 2012 13:18:44 input: mma8450 as /devices/virtual/input/input3 add mma8450 i2c driver OVIYA MMA8452 INIT OK 0x0 MXC WatchDog Driver 2.0 MXC Watchdog # 0 Timer: initial timeout 60 sec Bluetooth: Virtual HCI driver ver 1.3 Bluetooth: HCI UART driver ver 2.2 Bluetooth: HCIATH3K protocol initialized Bluetooth: Generic Bluetooth USB driver ver 0.6 usbcore: registered new interface driver btusb VPU initialized mxc_asrc registered gpu mmu disabled mxsdhci: MXC Secure Digital Host Controller Interface driver mxsdhci: MXC SDHCI Controller Driver. mmc0: SDHCI detect irq 0 irq 1 INTERNAL DMA mxsdhci: MXC SDHCI Controller Driver. mmc1: SDHCI detect irq 203 irq 3 INTERNAL DMA usbcore: registered new interface driver usbhid usbhid: USB HID core driver Cirrus Logic CS42888 ALSA SoC Codec Driver mxc_spdif mxc_spdif.0: MXC SPDIF Audio Transmitter No device for codec mxc spdif No device for DAI mxc spdif No device for DAI imx-ssi-1-0 No device for DAI imx-ssi-1-1 No device for DAI imx-ssi-2-0 No device for DAI imx-ssi-2-1 No device for DAI imx-spdif-dai DMA Sound Buffer Allocated: Playback UseIram=1 ext_ram=1 buf->addr=73268000 buf- >area=fabfa000 size=24576 asoc: mxc spdif <-> imx-spdif-dai mapping ok ALSA device list:   #0: imx-3stack-spdif (mxc spdif) TCP cubic registered NET: Registered protocol family 17 can: controller area network core (rev 20090105 abi 😎 NET: Registered protocol family 29 can: raw protocol (rev 20090105) can: broadcast manager protocol (rev 20090105 t) Bluetooth: L2CAP ver 2.14 Bluetooth: L2CAP socket layer initialized Bluetooth: SCO (Voice Link) ver 0.6 Bluetooth: SCO socket layer initialized Bluetooth: RFCOMM TTY layer initialized Bluetooth: RFCOMM socket layer initialized Bluetooth: RFCOMM ver 1.11 Bluetooth: BNEP (Ethernet Emulation) ver 1.3 Bluetooth: BNEP filters: protocol multicast Bluetooth: HIDP (Human Interface Emulation) ver 1.2 VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 2 regulator_init_complete: incomplete constraints, leaving DA9052_BUCK_PERI on regulator_init_complete: incomplete constraints, leaving DA9052_BUCK_MEM on regulator_init_complete: incomplete constraints, leaving DA9052_BUCK_PRO on regulator_init_complete: incomplete constraints, leaving DA9052_BUCK_CORE on regulator_init_complete: incomplete constraints, leaving DA9052_LDO10 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO9 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO8 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO6 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO5 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO3 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO2 on regulator_init_complete: incomplete constraints, leaving DA9052_LDO1 on mxc_rtc mxc_rtc.0: setting system clock to 1970-01-01 00:00:04 UTC (4) mmc0: new SDHC card at address e624 mmcblk0: mmc0:e624 SU16G 14.8 GiB mmcblk0: p1 eth0: Freescale FEC PHY driver [Generic PHY] (mii_bus:phy_addr=0:00, irq=-1) IP-Config: Complete:      device=eth0, addr=192.168.0.150, mask=255.255.255.0, gw=192.168.0.1,      host=192.168.0.150, domain=, nis-domain=(none),      bootserver=192.168.0.50, rootserver=192.168.0.50, rootpath= Looking up port of RPC 100003/2 on 192.168.0.50 PHY: 0:00 - Link is Up - 100/Full Looking up port of RPC 100005/1 on 192.168.0.50 VFS: Mounted root (nfs filesystem) on device 0:11. Freeing init memory: 172K starting pid 1188, tty '': '/etc/rc.d/rcS' Mounting /proc and /sys Starting the hotplug events dispatcher udevd Synthesizing initial hotplug events Setting the hostname to freescale Mounting filesystems mount: mounting usbfs on /proc/bus/usb failed: No such file or directory Starting the dropbear ssh server: Failed to start message bus: Failed to close "/usr/var/run/dbus/pid": No space l eft on device D-Bus per-session daemon address is: unix:abstract=/tmp/dbus-lOokyNGFL0,guid=fd2 236101ed5855d5d79f7b20000000c gtk: creating gdk-pixbuf.loaders pango: creating module list chown: /home/user/.rhosts: Operation not permitted chown: /home/user: Operation not permitted chown: /home/user: Operation not permitted starting pid 2227, tty '': '/sbin/getty -L ttymxc0 115200 vt100' _XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6 _XSERVTransOpen: transport open failed for inet6/freescale:0 _XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6 _XSERVTransmkdir: Owner of /tmp/.X11-unix should be set to root (EE) XKB: Couldn't open rules file /usr/share/X11/xkb/rules/base (EE) XKB: No components provided for device Virtual core keyboard arm-none-linux-gnueabi-gcc (4.4.4_09.06.2010) 4.4.4 root filesystem built on Thu, 29 Sep 2011 15:54:39 +0800 Freescale Semiconductor, Inc. freescale login: root login[2227]: root login on 'ttymxc0' BusyBox v1.18.5 () built-in shell (ash) Enter 'help' for a list of built-in commands. root@freescale ~$ root@freescale ~$ root@freescale ~$ matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>n=next matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>p=prev matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>c=close matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>d=desktop matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <Alt>m=!matchbox-remote -mbmenu matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <ctrl><alt>x=!xterm matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <ctrl><alt>r=!rxvt matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <ctrl><alt>e=!!gpe-calender matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt>Tab=next matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt><shift>Tab=prev matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt>space=taskmenu matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt>escape=!matchbox-remote -mbmenu matchbox: keyboard does not appear to have a <alt> key. matchbox: ignoring key shortcut <alt>f4=close matchbox: Cant find a keycode for keysym 65480 matchbox: ignoring key shortcut f11=fullscreen matchbox-desktop: loading /usr/lib/matchbox/desktop/tasks.so with args ( None ) matchbox-desktop: loading /usr/lib/matchbox/desktop/dotdesktop.so with args ( No ne ) user_overides is (nil) mb-desktop-dotdesktop: failed to open /usr/local/share/applications mb-desktop-dotdesktop: failed to open //.applications root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ root@freescale ~$ gst-launch rtspsrc location=rtsp://192.168.0.50:1935/media/vid eo0 ! decodebin ! mfw_mpeg4aspdecoder ! filesink location=file MPEG4_ASP_D_01.02.01  build on Apr 19 2011 19:13:51. MFW_GST_MPEG4ASP_DECODER_PLUGIN 2.0.3 build on Sep 29 2011 15:41:19. Setting pipeline to PAUSED ... ERROR: Pipeline doesn't want to pause. ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Resource not fou nd. Additional debug info: gstrtspsrc.c(3832): gst_rtspsrc_send (): /GstPipeline:pipeline0/GstRTSPSrc:rtsps rc0: Not Found Setting pipeline to NULL ... (gst-launch-0.10:2233): GStreamer-CRITICAL **: gst_mini_object_unref: assertion `mini_object != NULL' failed Freeing pipeline ... root@freescale ~$ root@freescale ~$
View full article
In this article, some experiments are done to verify the capability of i.MX6DQ on video playback under different VPU clocks. 1. Preparation Board: i.MX6DQ SD Bitstream: 1080p sunflower with 40Mbps, it is considered as the toughest H264 clip. The original clip is copied 20 times to generate a new raw video (repeat 20 times of sun-flower clip) and then encapsulate into a mp4 container. This is to remove and minimize the influence of startup workload of gstreamer compared to vpu unit test. Kernels: Generate different kernel with different VPU clock setting: 270MHz, 298MHz, 329MHz, 352MHz, 382MHz. test setting: 1080p content decoding and display with 1080p device. (no resize) 2. Test command for VPU unit test and Gstreamer The tiled format video playback is faster than NV12 format, so in below experiment, we choose tiled format during video playback. Unit test command: (we set the frame rate -a 70, higher than 1080p 60fps HDMI refresh rate)     /unit_tests/mxc_vpu_test.out -D "-i /media/65a78bbd-1608-4d49-bca8-4e009cafac5e/sunflower_2B_2ref_WP_40Mbps.264 -f 2 -y 1 -a 70" Gstreamer command: (free run to get the highest playback speed)     gst-launch filesrc location=/media/65a78bbd-1608-4d49-bca8-4e009cafac5e/sunflower_2B_2ref_WP_40Mbps.mp4 typefind=true ! aiurdemux ! vpudec framedrop=false ! queue max-size-buffers=3 ! mfw_v4lsink sync=false 3. Video playback framerate measurement During test, we enter command "echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" to make sure the CPU always work at highest frequency, so that it can respond to any interrupt quickly. For each testing point with different VPU clock, we do 5 rounds of tests. The max and min values are removed, and the remaining 3 data are averaged to get the final playback framerate. #1 #2 #3 #4 #5 Min Max Avg Dec Playback Dec Playback Dec Playback Dec Playback Dec Playback Playback Playback Playback 270M unit test 57.8 57.3 57.81 57.04 57.78 57.3 57.87 56.15 57.91 55.4 55.4 57.3 56.83 GST 53.76 54.163 54.136 54.273 53.659 53.659 54.273 54.01967 298M unit test 60.97 58.37 60.98 58.55 60.97 57.8 60.94 58.07 60.98 58.65 57.8 58.65 58.33 GST 56.755 49.144 53.271 56.159 56.665 49.144 56.755 55.365 329M unit test 63.8 59.52 63.92 52.63 63.8 58.1 63.82 58.26 63.78 59.34 52.63 59.52 58.56667 GST 57.815 55.857 56.862 58.637 56.703 55.857 58.637 57.12667 352M unit test 65.79 59.63 65.78 59.68 65.78 59.65 66.16 49.21 65.93 57.67 49.21 59.68 58.98333 GST 58.668 59.103 56.419 58.08 58.312 56.419 59.103 58.35333 382M unit test 64.34 56.58 67.8 58.73 67.75 59.68 67.81 59.36 67.77 59.76 56.58 59.76 59.25667 GST 59.753 58.893 58.972 58.273 59.238 58.273 59.753 59.03433 Note: Dec column means the vpu decoding fps, while Playback column means overall playback fps. Some explanation: Why does the Gstreamer performance data still improve while unit test is more flat? On Gstreamer, there is a vpu wrapper which is used to make the vpu api more intuitive to be called. So at first, the overall GST playback performance is constrained by vpu (vpu dec 57.8 fps). And finally, as vpu decoding performance goes to higher than 60fps when vpu clock increases, the constraint becomes the display refresh rate 60fps. The video display overhead of Gstreamer is only about 1 fps, similar to unit test. Based on the test result, we can see that for 352MHz, the overall 1080p video playback on 1080p display can reach ~60fps. Or if time sharing by two pipelines with two displays, we can do 2 x 1080p @ 30fps video playback. However, this experiment is valid for 1080p video playback on 1080p display. If for interlaced clip and display with size not same as 1080p, the overall playback performance is limited by some postprocessing like de-interlacing and resize.
View full article
When streaming, if you want to play a streaming URL, it can be inconvenient if the browser cannot recognize the URL as a media stream and downloads the content rather than using Gallery to play it. To create this kind of media streaming, you need to write an apk to use VideoView to play the URL/media stream from the console. Here is the command of how to play a media file or network stream from console. Gingerbread am start -n com.cooliris.media/com.cooliris.media.MovieView -d "<URL>"       The URL can be file position or network stream URL, such as: you can play a local file by: am start -n com.cooliris.media/com.cooliris.media.MovieView -d "/mnt/sdcard/test.mp4" You can also play a http stream by: am start -n com.cooliris.media/com.cooliris.media.MovieView -d "http://v.iask.com/v_play_ipad.php?vid=76710932" Or play a rtsp stream by: am start -n com.cooliris.media/com.cooliris.media.MovieView -d "rtsp://10.0.2.1:554/stream" ICS am start -n com.android.gallery3d/com.android.gallery3d.app.MovieActivity -d "<URL>"        The URL has the same definition of Gingerbread.
View full article
Sometimes we need to use proxy to access network with Ethernet. Here are the steps for how to set proxy in Gingerbread and ICS. Gingerbread 1. Enable http proxy >  sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERT INTO secure VALUES (99, 'http_proxy', 'wwwgate0.freescale.net:1080');" With this setting, you can access network for web browsing. If you want to play some http streaming content, you need to set a property for the player, > setprop rw.HTTP_PROXY http://wwwgate0-az.freescale.net:1080 2. Disable http proxy >  sqlite3 /data/data/com.android.providers.settings/databases/settings.db "delete from secure where name='http_proxy'" >  setprop rw.HTTP_PROXY "" ICS 1. Enable http proxy >  setprop net.proxy wwwgate0-az.freescale.net:1080 With this setting, you can access network for web browsing. If you want to play some http streaming content, you need to set a proxy property for the player, >  setprop rw.HTTP_PROXY http://wwwgate0-az.freescale.net:1080 2. Disable http proxy >  setprop net.proxy "" >  setprop rw.HTTP_PROXY ""
View full article
hi daiane       find the attached log of gstreamer
View full article
This section for all Freescale i.MX users ranging from customers to designers to help provide the best solution to the most frequently encountered questions related to Freescale i.MX products. Products Below are links to pages containing links to documentation related to that product. i.MX Family i.MX6 Multimedia Applications Processors i.MX53 Multimedia Applications Processors i.MX51 Multimedia Applications Processors i.MX35 Multimedia Applications Processors i.MX31 Multimedia Applications Processors i.MX28 Multimedia Applications Processors i.MX27 Multimedia Applications Processors i.MX25 Multimedia Applications Processors i.MX21 Multimedia Applications Processors Topics Below are links to pages containing links to documentation related to that topic. 19-iMX_Serial_Download_Protocol.py All Boards 2D/3D Graphics All Boards Accessing Registers All Boards Audio All Boards Bluetooth Dongle All Boards Compiling RedBoot All Boards Configuring RedBoot All Boards Creating App Video All Boards Deploy NFS All Boards DirectFB All Boards FlexCAN All Boards Hardware Software All Boards How To Convert RVICE CP15 To OpenOCD All Boards How To Understand JTAG BSDL All Boards I2C-tools All Boards Java All Boards JTAG All Boards LTIB All Boards LTIB Config Ubuntu All Boards LTIB Creating Uimage Uboot All Boards NFS on Fedora All Boards NFS on Slackware All Boards NFS on Ubuntu All Boards OpenEmbedded All Boards Pdfreader All Boards PMIC Registers All Boards Qtopia All Boards Qtopia on Ubuntu All Boards Qt v2 All Boards RedBoot All Boards Serial Console All Boards TCP All Boards Tethering All Boards TFTP All Boards TFTP Fedora All Boards TFTP on OpenSuse All Boards TFTP on Ubuntu All Boards Theora Encoder All Boards Transfer Serial RedBoot All Boards U-boot All Boards Updating RedBoot Through RedBoot All Boards Video All Boards Video Host All Boards VMWare All Boards Wi-Fi All Boards X11 Android Demonstration Platform Exercising the i.MX Serial Download Protocol with a Python Script Gstreamer GTK How to Enable Second Display Showing Different Things on JB4.2.2 SabreSD How to Measure Signal Frequency by Using the Camera Sensor Interface of an i.MX i.MX as a USB Playback/Capture Device on One OTG Port i.MX Bootlets (i.MX233 EVK) i.MX USB Loader i.MXS Development Kit InternalI2C Linux Kernel Mxuart patch New Release of the i.MX OTP Tools V1.3.3 NFS OpenEmbedded Redboot Running ATK on Linux Script to Flash a Linux System into a SD card U-Boot Yoctoproject
View full article
Script which patches the ltib folder on Ubuntu 12.04. Steps: $ cp patch-ltib-ubuntu12.04.sh <your ltib folder> $ cd <your ltib folder> $ chmod +x patch-ltib-ubuntu12.04.sh $ ./patch-ltib-ubuntu12.04.sh
View full article
Dumping the pipeline elements into a image file # On target, run the pipeline $ export GST_DEBUG_DUMP_DOT_DIR=<folder where dot files are created> $ gst-launch playbin2 uri=file://${avi} $ # Move the .dot files to a host machine (scp, etc) # On Host dot <dot file> -Tpng -o out.png # dot command is part the the graphviz package Querying which elements are being used on a gst-launch command GST_DEBUG=GST_ELEMENT_FACTORY:3 gst-launch playbin2 uri=file://`pwd`/<media file> Interrupting a gst-launch process running in the background kill -INT $PID # where $PID is the process ID Using only SW codecs # Backup and remove $ find /usr/lib/gstreamer-0.10 -name "libmfw*" | grep -v sink | xargs tar cvf /libmfw_gst.tar $ find /usr/lib/gstreamer-0.10 -name "libmfw*" | grep -v sink | xargs rm # Run your pipeline. This time SW codecs are used $ gst-launch playbin2 uri=file://`pwd`/media_file # To 'install' FSL plugins again, just untar the file $ cd / && tar xvf libmfw_gst.tar && cd - # then run your pipeline. This time HW codecs are used $ gst-launch playbin2 uri=file://`pwd`/media_file
View full article