rk3288公板添加gc2145驱动

平台:瑞芯的rk3288

SDK:5.0

camera: gc2145

作者:fulinux

笔记用内容,可能不全

*****本文允许转载,不过请注明出处:http://blog.csdn.net/fulinus****


在arch/arm/boot/dts/rk3288-cif-sensor.dtsi文件中添加如下内容:

  1. gc2145{   
  2.     is_front = <0>;  
  3.     rockchip,power = <&gpio0 GPIO_C1 GPIO_ACTIVE_HIGH>;  
  4.     rockchip,powerdown = <&gpio2 GPIO_B7 GPIO_ACTIVE_HIGH>;  
  5.     pwdn_active = <gc2145_PWRDN_ACTIVE>;  
  6.     pwr_active = <PWR_ACTIVE_HIGH>;  
  7.     mir = <0>;  
  8.     flash_attach = <0>;  
  9.     resolution = <gc2145_FULL_RESOLUTION>;  
  10.     powerup_sequence = <gc2145_PWRSEQ>;  
  11.     orientation = <0>;  
  12.     i2c_add = <gc2145_I2C_ADDR>;  
  13.     i2c_rata = <100000>;  
  14.     i2c_chl = <3>;  
  15.     cif_chl = <0>;  
  16.     mclk_rate = <24>;  
  17. };   
同时在arch/arm/mach-rockchip/rk_camera_sensor_info.h文件中添加如下内容(patch内容,“+”对应的内容):

  1.  #define RK29_CAM_SENSOR_GC0328  gc0328  
  2.  #define RK29_CAM_SENSOR_GC0329  gc0329  
  3.  #define RK29_CAM_SENSOR_GC2035 gc2035  
  4. +#define RK29_CAM_SENSOR_GC2145 gc2145  
  5.  #define RK29_CAM_SENSOR_SIV120B  siv120b  
  6.  #define RK29_CAM_SENSOR_SIV121D  siv121d  
  7.  #define RK29_CAM_SENSOR_SID130B  sid130B  
  8. @@ -70,6 +71,7 @@  
  9.  #define RK29_CAM_SENSOR_NAME_GC2015  "gc2015"  
  10.  #define RK29_CAM_SENSOR_NAME_GC0328  "gc0328"  
  11.  #define RK29_CAM_SENSOR_NAME_GC2035  "gc2035"  
  12. +#define RK29_CAM_SENSOR_NAME_GC2145  "gc2145"  
  13.  #define RK29_CAM_SENSOR_NAME_GC0329  "gc0329"  
  14.  #define RK29_CAM_SENSOR_NAME_SIV120B "siv120b"  
  15.  #define RK29_CAM_SENSOR_NAME_SIV121D "siv121d"  
  16. @@ -147,6 +149,7 @@  
  17.  #define s5k5ca_FULL_RESOLUTION      0x300000            // 3 megapixel  
  18.  #define mtk9335isp_FULL_RESOLUTION  0x500000                   //5 megapixel  
  19.  #define gc2035_FULL_RESOLUTION      0x200000            // 2 megapixel  
  20. +#define gc2145_FULL_RESOLUTION      0x200000            // 2 megapixel  
  21.  #define hm2057_FULL_RESOLUTION      0x200000            // 2 megapixel  
  22.  #define hm5065_FULL_RESOLUTION      0x500000            // 5 megapixel  
  23.  #define nt99160_FULL_RESOLUTION     0x100000           // oyyf@rock-chips.com:  1 megapixel 1280*720      
  24. @@ -187,6 +190,7 @@  
  25.  #define gc0329_I2C_ADDR             0x62             
  26.  #define gc2015_I2C_ADDR             0x60  
  27.  #define gc2035_I2C_ADDR             0x78              
  28. +#define gc2145_I2C_ADDR             0x78              
  29.    
  30.  #define siv120b_I2C_ADDR             INVALID_VALUE             
  31.  #define siv121d_I2C_ADDR             INVALID_VALUE             
  32. @@ -247,6 +251,7 @@  
  33.  #define gc0329_PWRDN_ACTIVE             0x01             
  34.  #define gc2015_PWRDN_ACTIVE             0x01  
  35.  #define gc2035_PWRDN_ACTIVE             0x01              
  36. +#define gc2145_PWRDN_ACTIVE             0x01             
  37.    
  38.  #define siv120b_PWRDN_ACTIVE             INVALID_VALUE             
  39.  #define siv121d_PWRDN_ACTIVE             INVALID_VALUE             
  40. @@ -319,6 +324,7 @@  
  41.  #define gc0329_PWRSEQ                   sensor_PWRSEQ_DEFAULT            
  42.  #define gc2015_PWRSEQ                   sensor_PWRSEQ_DEFAULT  
  43.  #define gc2035_PWRSEQ                   sensor_PWRSEQ_DEFAULT              
  44. +#define gc2145_PWRSEQ                   sensor_PWRSEQ_DEFAULT              
  45.    
  46.  #define siv120b_PWRSEQ                   sensor_PWRSEQ_DEFAULT           
  47.  #define siv121d_PWRSEQ                   sensor_PWRSEQ_DEFAULT         


添加驱动文件drivers/media/video/gc2035.c:

  1. #include "generic_sensor.h"  
  2.   
  3. /* 
  4. *      Driver Version Note 
  5. *v0.0.1: this driver is compatible with generic_sensor 
  6. *v0.0.3: 
  7. *        add sensor_focus_af_const_pause_usr_cb; 
  8. */  
  9. static int version = KERNEL_VERSION(0,0,3);  
  10. module_param(version, int, S_IRUGO);  
  11.   
  12.   
  13. static int debug;  
  14. module_param(debug, int, S_IRUGO|S_IWUSR);  
  15.   
  16. #define dprintk(level, fmt, arg...) do {                        \  
  17.         if (debug >= level)                                     \  
  18.         printk(KERN_WARNING fmt , ## arg); } while (0)  
  19.   
  20. /* Sensor Driver Configuration Begin */  
  21. #define SENSOR_NAME                          RK29_CAM_SENSOR_GC2145  
  22. #define SENSOR_V4L2_IDENT                    V4L2_IDENT_GC2145  
  23. #define SENSOR_BUS_PARAM                     (V4L2_MBUS_MASTER | V4L2_MBUS_PCLK_SAMPLE_RISING | \  
  24.                                              V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_HIGH | \  
  25.                                                                                          V4L2_MBUS_DATA_ACTIVE_HIGH  |SOCAM_MCLK_24MHZ)  
  26. #define SENSOR_ID 0x2145  
  27. #define SENSOR_PREVIEW_W                                         800  
  28. #define SENSOR_PREVIEW_H                                         600  
  29. #define SENSOR_PREVIEW_FPS                                       15000     // 15fps   
  30. #define SENSOR_FULLRES_L_FPS                             7500      // 7.5fps  
  31. #define SENSOR_FULLRES_H_FPS                             7500      // 7.5fps  
  32. #define SENSOR_720P_FPS                                          15000  
  33. #define SENSOR_1080P_FPS                                         0  
  34.   
  35. #define SENSOR_REGISTER_LEN                              1                 // sensor register address bytes  
  36. #define SENSOR_VALUE_LEN                                         1                 // sensor register value bytes  
  37. static unsigned int SensorConfiguration = (CFG_WhiteBalance|CFG_Effect|CFG_Scene);  
  38. static unsigned int SensorChipID[] = {SENSOR_ID};  
  39. /* Sensor Driver Configuration End */  
  40.   
  41.   
  42. #define SENSOR_NAME_STRING(a) STR(CONS(SENSOR_NAME, a))  
  43. #define SENSOR_NAME_VARFUN(a) CONS(SENSOR_NAME, a)  
  44.   
  45. #define SensorRegVal(a,b) CONS4(SensorReg,SENSOR_REGISTER_LEN,Val,SENSOR_VALUE_LEN)(a,b)  
  46. #define sensor_write(client,reg,v) CONS4(sensor_write_reg,SENSOR_REGISTER_LEN,val,SENSOR_VALUE_LEN)(client,(reg),(v))  
  47. #define sensor_read(client,reg,v) CONS4(sensor_read_reg,SENSOR_REGISTER_LEN,val,SENSOR_VALUE_LEN)(client,(reg),(v))  
  48. #define sensor_write_array generic_sensor_write_array  
  49.   
  50. struct sensor_parameter  
  51. {  
  52.         unsigned int PreviewDummyPixels;  
  53.         unsigned int CaptureDummyPixels;  
  54.         unsigned int preview_exposure;  
  55.         unsigned short int preview_line_width;  
  56.         unsigned short int preview_gain;  
  57.   
  58.         unsigned short int PreviewPclk;  
  59.         unsigned short int CapturePclk;  
  60.         char awb[6];  
  61. };  
  62.   
  63. struct specific_sensor{  
  64.         struct generic_sensor common_sensor;  
  65.         //define user data below  
  66.         struct sensor_parameter parameter;  
  67.         u16 shutter;  
  68.   
  69. };  
  70.   
  71. /* 
  72. *  The follow setting need been filled. 
  73. *   
  74. *  Must Filled: 
  75. *  sensor_init_data :                           Sensor initial setting; 
  76. *  sensor_fullres_lowfps_data :         Sensor full resolution setting with best auality, recommand for video; 
  77. *  sensor_preview_data :                        Sensor preview resolution setting, recommand it is vga or svga; 
  78. *  sensor_softreset_data :                      Sensor software reset register; 
  79. *  sensor_check_id_data :                       Sensir chip id register; 
  80. * 
  81. *  Optional filled: 
  82. *  sensor_fullres_highfps_data:         Sensor full resolution setting with high framerate, recommand for video; 
  83. *  sensor_720p:                                         Sensor 720p setting, it is for video; 
  84. *  sensor_1080p:                                        Sensor 1080p setting, it is for video; 
  85. * 
  86. *  :::::WARNING::::: 
  87. *  The SensorEnd which is the setting end flag must be filled int the last of each setting; 
  88. */  
  89.   
  90. /* Sensor initial setting */  
  91. static struct rk_sensor_reg sensor_init_data[] =  
  92. {  
  93.         //SENSORDB("GC2145_Sensor_Init"},  
  94.          {0xfe , 0xf0},  
  95.          {0xfe , 0xf0},  
  96.          {0xfe , 0xf0},  
  97.          {0xfc , 0x06},  
  98.          {0xf6 , 0x00},  
  99.          {0xf7 , 0x1d},  
  100.          {0xf8 , 0x84},  
  101.          {0xfa , 0x00},  
  102.          {0xf9 , 0xfe},  
  103.          {0xf2 , 0x00},  
  104.                 /  
  105.                 //ISP reg//  
  106.   
  107.   
  108.           
  109.         {0xfe , 0x00},  
  110.         {0x03 , 0x04},  
  111.         {0x04 , 0xe2},  
  112.         {0x09 , 0x00},  
  113.         {0x0a , 0x00},  
  114.         {0x0b , 0x00},  
  115.         {0x0c , 0x00},  
  116.         {0x0d , 0x04},  
  117.         {0x0e , 0xc0},  
  118.         {0x0f , 0x06},  
  119.         {0x10 , 0x52},  
  120.         {0x12 , 0x2e},  
  121.         {0x17 , 0x14}, //mirror  
  122.         {0x18 , 0x22},  
  123.         {0x19 , 0x0e},  
  124.         {0x1a , 0x01},  
  125.         {0x1b , 0x4b},  
  126.         {0x1c , 0x07},  
  127.         {0x1d , 0x10},  
  128.         {0x1e , 0x88},  
  129.         {0x1f , 0x78},  
  130.         {0x20 , 0x03},  
  131.         {0x21 , 0x40},  
  132.         {0x22 , 0xa0},   
  133.         {0x24 , 0x16},  
  134.         {0x25 , 0x01},  
  135.         {0x26 , 0x10},  
  136.         {0x2d , 0x60},  
  137.         {0x30 , 0x01},  
  138.         {0x31 , 0x90},  
  139.         {0x33 , 0x06},  
  140.         {0x34 , 0x01},  
  141.                 /  
  142.                 //ISP reg  
  143.                 /  
  144.         {0xfe , 0x00},  
  145.         {0x80 , 0x7f},  
  146.         {0x81 , 0x26},  
  147.         {0x82 , 0xfa},  
  148.         {0x83 , 0x00},  
  149.         {0x84 , 0x00},   
  150.         {0x86 , 0x02},  
  151.         {0x88 , 0x03},  
  152.         {0x89 , 0x03},  
  153.         {0x85 , 0x08},   
  154.         {0x8a , 0x00},  
  155.         {0x8b , 0x00},  
  156.         {0xb0 , 0x55},  
  157.         {0xc3 , 0x00},  
  158.         {0xc4 , 0x80},  
  159.         {0xc5 , 0x90},  
  160.         {0xc6 , 0x3b},  
  161.         {0xc7 , 0x46},  
  162.         {0xec , 0x06},  
  163.         {0xed , 0x04},  
  164.         {0xee , 0x60},  
  165.         {0xef , 0x90},  
  166.         {0xb6 , 0x01},  
  167.         {0x90 , 0x01},  
  168.         {0x91 , 0x00},  
  169.         {0x92 , 0x00},  
  170.         {0x93 , 0x00},  
  171.         {0x94 , 0x00},  
  172.         {0x95 , 0x04},  
  173.         {0x96 , 0xb0},  
  174.         {0x97 , 0x06},  
  175.         {0x98 , 0x40},  
  176.                 /  
  177.                 /// BLK   
  178.                 /  
  179.         {0xfe , 0x00},  
  180.         {0x40 , 0x42},  
  181.         {0x41 , 0x00},  
  182.         {0x43 , 0x5b},   
  183.         {0x5e , 0x00},   
  184.         {0x5f , 0x00},  
  185.         {0x60 , 0x00},   
  186.         {0x61 , 0x00},   
  187.         {0x62 , 0x00},  
  188.         {0x63 , 0x00},   
  189.         {0x64 , 0x00},   
  190.         {0x65 , 0x00},   
  191.         {0x66 , 0x20},  
  192.         {0x67 , 0x20},   
  193.         {0x68 , 0x20},   
  194.         {0x69 , 0x20},   
  195.         {0x76 , 0x00},  
  196.         {0x6a , 0x08},   
  197.         {0x6b , 0x08},   
  198.         {0x6c , 0x08},   
  199.         {0x6d , 0x08},   
  200.         {0x6e , 0x08},   
  201.         {0x6f , 0x08},   
  202.         {0x70 , 0x08},   
  203.         {0x71 , 0x08},     
  204.         {0x76 , 0x00},  
  205.         {0x72 , 0xf0},  
  206.         {0x7e , 0x3c},  
  207.         {0x7f , 0x00},  
  208.         {0xfe , 0x02},  
  209.         {0x48 , 0x15},  
  210.         {0x49 , 0x00},  
  211.         {0x4b , 0x0b},  
  212.         {0xfe , 0x00},  
  213.                   
  214.                 /// AEC   
  215.                   
  216.         {0xfe , 0x01},  
  217.         {0x01 , 0x04},  
  218.         {0x02 , 0xc0},  
  219.         {0x03 , 0x04},  
  220.         {0x04 , 0x90},  
  221.         {0x05 , 0x30},  
  222.         {0x06 , 0x90},  
  223.         {0x07 , 0x30},  
  224.         {0x08 , 0x80},  
  225.         {0x09 , 0x00},  
  226.         {0x0a , 0x82},  
  227.         {0x0b , 0x11},  
  228.         {0x0c , 0x10},  
  229.         {0x11 , 0x10},  
  230.         {0x13 , 0x7b},  
  231.         {0x17 , 0x00},  
  232.         {0x1c , 0x11},  
  233.         {0x1e , 0x61},  
  234.         {0x1f , 0x35},  
  235.         {0x20 , 0x40},  
  236.         {0x22 , 0x40},  
  237.         {0x23 , 0x20},  
  238.         {0xfe , 0x02},  
  239.         {0x0f , 0x04},  
  240.         {0xfe , 0x01},  
  241.         {0x12 , 0x35},  
  242.         {0x15 , 0xb0},  
  243.         {0x10 , 0x31},  
  244.         {0x3e , 0x28},  
  245.         {0x3f , 0xb0},  
  246.         {0x40 , 0x90},  
  247.         {0x41 , 0x0f},  
  248.   
  249.                 /  
  250.                  INTPEE /  
  251.                 /  
  252.         {0xfe , 0x02},  
  253.         {0x90 , 0x6c},  
  254.         {0x91 , 0x03},  
  255.         {0x92 , 0xcb},  
  256.         {0x94 , 0x33},  
  257.         {0x95 , 0x84},  
  258.         {0x97 , 0x65},  
  259.         {0xa2 , 0x11},  
  260.         {0xfe , 0x00},  
  261.                 /  
  262.                  DNDD///  
  263.                 /  
  264.         {0xfe , 0x02},  
  265.         {0x80 , 0xc1},  
  266.         {0x81 , 0x08},  
  267.         {0x82 , 0x05},  
  268.         {0x83 , 0x08},  
  269.         {0x84 , 0x0a},  
  270.         {0x86 , 0xf0},  
  271.         {0x87 , 0x50},  
  272.         {0x88 , 0x15},  
  273.         {0x89 , 0xb0},  
  274.         {0x8a , 0x30},  
  275.         {0x8b , 0x10},  
  276.                 /  
  277.                 /// ASDE   
  278.                 /  
  279.         {0xfe , 0x01},  
  280.         {0x21 , 0x04},  
  281.         {0xfe , 0x02},  
  282.         {0xa3 , 0x50},  
  283.         {0xa4 , 0x20},  
  284.         {0xa5 , 0x40},  
  285.         {0xa6 , 0x80},  
  286.         {0xab , 0x40},  
  287.         {0xae , 0x0c},  
  288.         {0xb3 , 0x46},  
  289.         {0xb4 , 0x64},  
  290.         {0xb6 , 0x38},  
  291.         {0xb7 , 0x01},  
  292.         {0xb9 , 0x2b},  
  293.         {0x3c , 0x04},  
  294.         {0x3d , 0x15},  
  295.         {0x4b , 0x06},  
  296.         {0x4c , 0x20},  
  297.         {0xfe , 0x00},  
  298.                 /  
  299.                 /// GAMMA         
  300.                 /  
  301.   
  302.                 ///gamma1  
  303. #if 1  
  304.         {0xfe , 0x02},  
  305.         {0x10 , 0x09},  
  306.         {0x11 , 0x0d},  
  307.         {0x12 , 0x13},  
  308.         {0x13 , 0x19},  
  309.         {0x14 , 0x27},  
  310.         {0x15 , 0x37},  
  311.         {0x16 , 0x45},  
  312.         {0x17 , 0x53},  
  313.         {0x18 , 0x69},  
  314.         {0x19 , 0x7d},  
  315.         {0x1a , 0x8f},  
  316.         {0x1b , 0x9d},  
  317.         {0x1c , 0xa9},  
  318.         {0x1d , 0xbd},  
  319.         {0x1e , 0xcd},  
  320.         {0x1f , 0xd9},  
  321.         {0x20 , 0xe3},  
  322.         {0x21 , 0xea},  
  323.         {0x22 , 0xef},  
  324.         {0x23 , 0xf5},  
  325.         {0x24 , 0xf9},  
  326.         {0x25 , 0xff},  
  327. #else                                 
  328.         {0xfe , 0x02},  
  329.         {0x10 , 0x0a},  
  330.         {0x11 , 0x12},  
  331.         {0x12 , 0x19},  
  332.         {0x13 , 0x1f},  
  333.         {0x14 , 0x2c},  
  334.         {0x15 , 0x38},  
  335.         {0x16 , 0x42},  
  336.         {0x17 , 0x4e},  
  337.         {0x18 , 0x63},  
  338.         {0x19 , 0x76},  
  339.         {0x1a , 0x87},  
  340.         {0x1b , 0x96},  
  341.         {0x1c , 0xa2},  
  342.         {0x1d , 0xb8},  
  343.         {0x1e , 0xcb},  
  344.         {0x1f , 0xd8},  
  345.         {0x20 , 0xe2},  
  346.         {0x21 , 0xe9},  
  347.         {0x22 , 0xf0},  
  348.         {0x23 , 0xf8},  
  349.         {0x24 , 0xfd},  
  350.         {0x25 , 0xff},  
  351.         {0xfe , 0x00},       
  352. #endif   
  353.         {0xfe , 0x00},       
  354.         {0xc6 , 0x20},  
  355.         {0xc7 , 0x2b},  
  356.                 ///gamma2  
  357. #if 1  
  358.         {0xfe , 0x02},  
  359.         {0x26 , 0x0f},  
  360.         {0x27 , 0x14},  
  361.         {0x28 , 0x19},  
  362.         {0x29 , 0x1e},  
  363.         {0x2a , 0x27},  
  364.         {0x2b , 0x33},  
  365.         {0x2c , 0x3b},  
  366.         {0x2d , 0x45},  
  367.         {0x2e , 0x59},  
  368.         {0x2f , 0x69},  
  369.         {0x30 , 0x7c},  
  370.         {0x31 , 0x89},  
  371.         {0x32 , 0x98},  
  372.         {0x33 , 0xae},  
  373.         {0x34 , 0xc0},  
  374.         {0x35 , 0xcf},  
  375.         {0x36 , 0xda},  
  376.         {0x37 , 0xe2},  
  377.         {0x38 , 0xe9},  
  378.         {0x39 , 0xf3},  
  379.         {0x3a , 0xf9},  
  380.         {0x3b , 0xff},  
  381. #else  
  382.                 Gamma outdoor  
  383.         {0xfe , 0x02},  
  384.         {0x26 , 0x17},  
  385.         {0x27 , 0x18},  
  386.         {0x28 , 0x1c},  
  387.         {0x29 , 0x20},  
  388.         {0x2a , 0x28},  
  389.         {0x2b , 0x34},  
  390.         {0x2c , 0x40},  
  391.         {0x2d , 0x49},  
  392.         {0x2e , 0x5b},  
  393.         {0x2f , 0x6d},  
  394.         {0x30 , 0x7d},  
  395.         {0x31 , 0x89},  
  396.         {0x32 , 0x97},  
  397.         {0x33 , 0xac},  
  398.         {0x34 , 0xc0},  
  399.         {0x35 , 0xcf},  
  400.         {0x36 , 0xda},  
  401.         {0x37 , 0xe5},  
  402.         {0x38 , 0xec},  
  403.         {0x39 , 0xf8},  
  404.         {0x3a , 0xfd},  
  405.         {0x3b , 0xff},  
  406. #endif  
  407.                 ///   
  408.                 ///YCP ///   
  409.                 ///   
  410.         {0xfe , 0x02},  
  411.         {0xd1 , 0x32},  
  412.         {0xd2 , 0x32},  
  413.         {0xd3 , 0x40},  
  414.         {0xd6 , 0xf0},  
  415.         {0xd7 , 0x10},  
  416.         {0xd8 , 0xda},  
  417.         {0xdd , 0x14},  
  418.         {0xde , 0x86},  
  419.         {0xed , 0x80},  
  420.         {0xee , 0x00},  
  421.         {0xef , 0x3f},  
  422.         {0xd8 , 0xd8},  
  423.                 ///abs/  
  424.         {0xfe , 0x01},  
  425.         {0x9f , 0x40},  
  426.                 /  
  427.                  LSC ///  
  428.                 //  
  429.         {0xfe , 0x01},  
  430.         {0xc2 , 0x14},  
  431.         {0xc3 , 0x0d},  
  432.         {0xc4 , 0x0c},  
  433.         {0xc8 , 0x15},  
  434.         {0xc9 , 0x0d},  
  435.         {0xca , 0x0a},  
  436.         {0xbc , 0x24},  
  437.         {0xbd , 0x10},  
  438.         {0xbe , 0x0b},  
  439.         {0xb6 , 0x25},  
  440.         {0xb7 , 0x16},  
  441.         {0xb8 , 0x15},  
  442.         {0xc5 , 0x00},  
  443.         {0xc6 , 0x00},  
  444.         {0xc7 , 0x00},  
  445.         {0xcb , 0x00},  
  446.         {0xcc , 0x00},  
  447.         {0xcd , 0x00},  
  448.         {0xbf , 0x07},  
  449.         {0xc0 , 0x00},  
  450.         {0xc1 , 0x00},  
  451.         {0xb9 , 0x00},  
  452.         {0xba , 0x00},  
  453.         {0xbb , 0x00},  
  454.         {0xaa , 0x01},  
  455.         {0xab , 0x01},  
  456.         {0xac , 0x00},  
  457.         {0xad , 0x05},  
  458.         {0xae , 0x06},  
  459.         {0xaf , 0x0e},  
  460.         {0xb0 , 0x0b},  
  461.         {0xb1 , 0x07},  
  462.         {0xb2 , 0x06},  
  463.         {0xb3 , 0x17},  
  464.         {0xb4 , 0x0e},  
  465.         {0xb5 , 0x0e},  
  466.         {0xd0 , 0x09},  
  467.         {0xd1 , 0x00},  
  468.         {0xd2 , 0x00},  
  469.         {0xd6 , 0x08},  
  470.         {0xd7 , 0x00},  
  471.         {0xd8 , 0x00},  
  472.         {0xd9 , 0x00},  
  473.         {0xda , 0x00},  
  474.         {0xdb , 0x00},  
  475.         {0xd3 , 0x0a},  
  476.         {0xd4 , 0x00},  
  477.         {0xd5 , 0x00},  
  478.         {0xa4 , 0x00},  
  479.         {0xa5 , 0x00},  
  480.         {0xa6 , 0x77},  
  481.         {0xa7 , 0x77},  
  482.         {0xa8 , 0x77},  
  483.         {0xa9 , 0x77},  
  484.         {0xa1 , 0x80},  
  485.         {0xa2 , 0x80},  
  486.                                                                            
  487.         {0xfe , 0x01},  
  488.         {0xdf , 0x0d},  
  489.         {0xdc , 0x25},  
  490.         {0xdd , 0x30},  
  491.         {0xe0 , 0x77},  
  492.         {0xe1 , 0x80},  
  493.         {0xe2 , 0x77},  
  494.         {0xe3 , 0x90},  
  495.         {0xe6 , 0x90},  
  496.         {0xe7 , 0xa0},  
  497.         {0xe8 , 0x90},  
  498.         {0xe9 , 0xa0},                                                       
  499.         {0xfe , 0x00},  
  500.                 ///  
  501.                 /// AWB  
  502.                 ///  
  503.         {0xfe , 0x01},   
  504.         {0x4f , 0x00},  
  505.         {0x4f , 0x00},  
  506.         {0x4b , 0x01},  
  507.         {0x4f , 0x00},  
  508.   
  509.         {0x4c , 0x01}, // D75  
  510.         {0x4d , 0x71},  
  511.         {0x4e , 0x01},  
  512.         {0x4c , 0x01},  
  513.         {0x4d , 0x91},  
  514.         {0x4e , 0x01},  
  515.         {0x4c , 0x01},  
  516.         {0x4d , 0x70},  
  517.         {0x4e , 0x01},  
  518.         {0x4c , 0x01}, // D65  
  519.         {0x4d , 0x90},  
  520.         {0x4e , 0x02},   
  521.         {0x4c , 0x01},  
  522.         {0x4d , 0xb0},  
  523.         {0x4e , 0x02},  
  524.         {0x4c , 0x01},  
  525.         {0x4d , 0x8f},  
  526.         {0x4e , 0x02},  
  527.         {0x4c , 0x01},  
  528.         {0x4d , 0x6f},  
  529.         {0x4e , 0x02},  
  530.         {0x4c , 0x01},  
  531.         {0x4d , 0xaf},  
  532.         {0x4e , 0x02},  
  533.         {0x4c , 0x01},  
  534.         {0x4d , 0xd0},  
  535.         {0x4e , 0x02},  
  536.         {0x4c , 0x01},  
  537.         {0x4d , 0xf0},  
  538.         {0x4e , 0x02},  
  539.         {0x4c , 0x01},  
  540.         {0x4d , 0xcf},  
  541.         {0x4e , 0x02},  
  542.         {0x4c , 0x01},  
  543.         {0x4d , 0xef},  
  544.         {0x4e , 0x02},                                                       
  545.         {0x4c , 0x01},//D50  
  546.         {0x4d , 0x6e},  
  547.         {0x4e , 0x03},  
  548.         {0x4c , 0x01},   
  549.         {0x4d , 0x8e},  
  550.         {0x4e , 0x03},  
  551.         {0x4c , 0x01},  
  552.         {0x4d , 0xae},  
  553.         {0x4e , 0x03},  
  554.         {0x4c , 0x01},  
  555.         {0x4d , 0xce},  
  556.         {0x4e , 0x03},  
  557.         {0x4c , 0x01},  
  558.         {0x4d , 0x4d},  
  559.         {0x4e , 0x03},  
  560.         {0x4c , 0x01},  
  561.         {0x4d , 0x6d},  
  562.         {0x4e , 0x03},  
  563.         {0x4c , 0x01},  
  564.         {0x4d , 0x8d},  
  565.         {0x4e , 0x03},  
  566.         {0x4c , 0x01},  
  567.         {0x4d , 0xad},  
  568.         {0x4e , 0x03},  
  569.         {0x4c , 0x01},  
  570.         {0x4d , 0xcd},  
  571.         {0x4e , 0x03},  
  572.         {0x4c , 0x01},  
  573.         {0x4d , 0x4c},  
  574.         {0x4e , 0x03},  
  575.         {0x4c , 0x01},  
  576.         {0x4d , 0x6c},  
  577.         {0x4e , 0x03},  
  578.         {0x4c , 0x01},  
  579.         {0x4d , 0x8c},  
  580.         {0x4e , 0x03},  
  581.         {0x4c , 0x01},  
  582.         {0x4d , 0xac},  
  583.         {0x4e , 0x03},  
  584.         {0x4c , 0x01},  
  585.         {0x4d , 0xcc},  
  586.         {0x4e , 0x03},                                                     
  587.         {0x4c , 0x01},  
  588.         {0x4d , 0xcb},  
  589.         {0x4e , 0x03},                                                     
  590.         {0x4c , 0x01},  
  591.         {0x4d , 0x4b},  
  592.         {0x4e , 0x03},  
  593.         {0x4c , 0x01},  
  594.         {0x4d , 0x6b},  
  595.         {0x4e , 0x03},  
  596.         {0x4c , 0x01},  
  597.         {0x4d , 0x8b},  
  598.         {0x4e , 0x03},  
  599.         {0x4c , 0x01},  
  600.         {0x4d , 0xab},  
  601.         {0x4e , 0x03},                                                      
  602.         {0x4c , 0x01},//CWF  
  603.         {0x4d , 0x8a},  
  604.         {0x4e , 0x04},  
  605.         {0x4c , 0x01},  
  606.         {0x4d , 0xaa},  
  607.         {0x4e , 0x04},  
  608.         {0x4c , 0x01},  
  609.         {0x4d , 0xca},  
  610.         {0x4e , 0x04},  
  611.         {0x4c , 0x01},  
  612.         {0x4d , 0xca},  
  613.         {0x4e , 0x04},  
  614.         {0x4c , 0x01},  
  615.         {0x4d , 0xc9},  
  616.         {0x4e , 0x04},  
  617.         {0x4c , 0x01},  
  618.         {0x4d , 0x8a},  
  619.         {0x4e , 0x04},  
  620.         {0x4c , 0x01},  
  621.         {0x4d , 0x89},  
  622.         {0x4e , 0x04},  
  623.         {0x4c , 0x01},  
  624.         {0x4d , 0xa9},  
  625.         {0x4e , 0x04},                                                      
  626.         {0x4c , 0x02},//tl84  
  627.         {0x4d , 0x0b},  
  628.         {0x4e , 0x05},  
  629.         {0x4c , 0x02},  
  630.         {0x4d , 0x0a},  
  631.         {0x4e , 0x05},                                                     
  632.         {0x4c , 0x01},  
  633.         {0x4d , 0xeb},  
  634.         {0x4e , 0x05},                                                     
  635.         {0x4c , 0x01},  
  636.         {0x4d , 0xea},  
  637.         {0x4e , 0x05},                                                       
  638.         {0x4c , 0x02},  
  639.         {0x4d , 0x09},  
  640.         {0x4e , 0x05},  
  641.         {0x4c , 0x02},  
  642.         {0x4d , 0x29},  
  643.         {0x4e , 0x05},                                                     
  644.         {0x4c , 0x02},  
  645.         {0x4d , 0x2a},  
  646.         {0x4e , 0x05},                                                      
  647.         {0x4c , 0x02},  
  648.         {0x4d , 0x4a},  
  649.         {0x4e , 0x05},  
  650.                 //{0x4c , 0x02}, //A  
  651.                 //{0x4d , 0x6a},  
  652.                 //{0x4e , 0x06},  
  653.         {0x4c , 0x02},   
  654.         {0x4d , 0x8a},  
  655.         {0x4e , 0x06},   
  656.         {0x4c , 0x02},  
  657.         {0x4d , 0x49},  
  658.         {0x4e , 0x06},  
  659.         {0x4c , 0x02},  
  660.         {0x4d , 0x69},  
  661.         {0x4e , 0x06},  
  662.         {0x4c , 0x02},  
  663.         {0x4d , 0x89},  
  664.         {0x4e , 0x06},  
  665.         {0x4c , 0x02},  
  666.         {0x4d , 0xa9},  
  667.         {0x4e , 0x06},   
  668.         {0x4c , 0x02},  
  669.         {0x4d , 0x48},  
  670.         {0x4e , 0x06},  
  671.         {0x4c , 0x02},  
  672.         {0x4d , 0x68},  
  673.         {0x4e , 0x06},  
  674.         {0x4c , 0x02},  
  675.         {0x4d , 0x69},  
  676.         {0x4e , 0x06},   
  677.         {0x4c , 0x02},//H  
  678.         {0x4d , 0xca},  
  679.         {0x4e , 0x07},  
  680.         {0x4c , 0x02},  
  681.         {0x4d , 0xc9},  
  682.         {0x4e , 0x07},  
  683.         {0x4c , 0x02},  
  684.         {0x4d , 0xe9},  
  685.         {0x4e , 0x07},  
  686.         {0x4c , 0x03},  
  687.         {0x4d , 0x09},  
  688.         {0x4e , 0x07},  
  689.         {0x4c , 0x02},  
  690.         {0x4d , 0xc8},  
  691.         {0x4e , 0x07},  
  692.         {0x4c , 0x02},  
  693.         {0x4d , 0xe8},  
  694.         {0x4e , 0x07},  
  695.         {0x4c , 0x02},  
  696.         {0x4d , 0xa7},  
  697.         {0x4e , 0x07},  
  698.         {0x4c , 0x02},  
  699.         {0x4d , 0xc7},  
  700.         {0x4e , 0x07},  
  701.         {0x4c , 0x02},  
  702.         {0x4d , 0xe7},  
  703.         {0x4e , 0x07},  
  704.         {0x4c , 0x03},  
  705.         {0x4d , 0x07},  
  706.         {0x4e , 0x07},  
  707.                                                                            
  708.         {0x4f , 0x01},  
  709.         {0x50 , 0x80},  
  710.         {0x51 , 0xa8},  
  711.         {0x52 , 0x47},  
  712.         {0x53 , 0x38},  
  713.         {0x54 , 0xc7},  
  714.         {0x56 , 0x0e},  
  715.         {0x58 , 0x08},  
  716.         {0x5b , 0x00},  
  717.         {0x5c , 0x74},  
  718.         {0x5d , 0x8b},  
  719.         {0x61 , 0xdb},  
  720.         {0x62 , 0xb8},  
  721.         {0x63 , 0x86},  
  722.         {0x64 , 0xc0},  
  723.         {0x65 , 0x04},  
  724.         {0x67 , 0xa8},  
  725.         {0x68 , 0xb0},  
  726.         {0x69 , 0x00},  
  727.         {0x6a , 0xa8},  
  728.         {0x6b , 0xb0},  
  729.         {0x6c , 0xaf},  
  730.         {0x6d , 0x8b},  
  731.         {0x6e , 0x50},  
  732.         {0x6f , 0x18},  
  733.         {0x73 , 0xf0},  
  734.         {0x70 , 0x0d},  
  735.         {0x71 , 0x60},  
  736.         {0x72 , 0x80},  
  737.         {0x74 , 0x01},  
  738.         {0x75 , 0x01},  
  739.         {0x7f , 0x0c},  
  740.         {0x76 , 0x70},  
  741.         {0x77 , 0x58},  
  742.         {0x78 , 0xa0},  
  743.         {0x79 , 0x5e},  
  744.         {0x7a , 0x54},  
  745.         {0x7b , 0x58},  
  746.         {0xfe , 0x00},  
  747.                 //  
  748.                 ///CC  
  749.                 //  
  750.         {0xfe , 0x02},  
  751.         {0xc0 , 0x01},                                                                     
  752.         {0xc1 , 0x44},  
  753.         {0xc2 , 0xfd},  
  754.         {0xc3 , 0x04},  
  755.         {0xc4 , 0xF0},  
  756.         {0xc5 , 0x48},  
  757.         {0xc6 , 0xfd},  
  758.         {0xc7 , 0x46},  
  759.         {0xc8 , 0xfd},  
  760.         {0xc9 , 0x02},  
  761.         {0xca , 0xe0},  
  762.         {0xcb , 0x45},  
  763.         {0xcc , 0xec},                                               
  764.         {0xcd , 0x48},  
  765.         {0xce , 0xf0},  
  766.         {0xcf , 0xf0},  
  767.         {0xe3 , 0x0c},  
  768.         {0xe4 , 0x4b},  
  769.         {0xe5 , 0xe0},  
  770.                 //  
  771.                 ///ABS   
  772.                 //  
  773.         {0xfe , 0x01},  
  774.         {0x9f , 0x40},  
  775.         {0xfe , 0x00},   
  776.                 //  
  777.                 ///  OUTPUT     
  778.                 //  
  779.         {0xfe, 0x00},  
  780.         {0xf20x0f},  
  781.                 ///dark sun  
  782.         {0xfe , 0x02},  
  783.         {0x40 , 0xbf},  
  784.         {0x46 , 0xcf},  
  785.         {0xfe , 0x00},  
  786.   
  787.                 //frame rate 50Hz/  
  788.         {0xfe , 0x00},  
  789.         {0x05 , 0x01},  
  790.         {0x06 , 0x56},  
  791.         {0x07 , 0x00},  
  792.         {0x08 , 0x32},  
  793.         {0xfe , 0x01},  
  794.         {0x25 , 0x00},  
  795.         {0x26 , 0xfa},   
  796.         {0x27 , 0x04},   
  797.         {0x28 , 0xe2}, //20fps   
  798.         {0x29 , 0x06},   
  799.         {0x2a , 0xd6}, //14fps   
  800.         {0x2b , 0x07},   
  801.         {0x2c , 0xd0}, //12fps  
  802.         {0x2d , 0x0b},   
  803.         {0x2e , 0xb8}, //8fps  
  804.         {0xfe , 0x00},  
  805.   
  806.   
  807.         //SENSORDB("GC2145_Sensor_SVGA"},  
  808.             
  809.         {0xfe, 0x00},  
  810.         {0xfd, 0x01},  
  811.         {0xfa, 0x00},  
  812.          crop window                           
  813.         {0xfe, 0x00},  
  814.         {0x900x01},  
  815.         {0x910x00},  
  816.         {0x920x00},  
  817.         {0x930x00},  
  818.         {0x940x00},  
  819.         {0x950x02},  
  820.         {0x960x58},  
  821.         {0x970x03},  
  822.         {0x980x20},  
  823.         {0x990x11},  
  824.         {0x9a, 0x06},  
  825.                  AWB                                           
  826.         {0xfe, 0x00},  
  827.         {0xec, 0x02},  
  828.         {0xed, 0x02},  
  829.         {0xee, 0x30},  
  830.         {0xef, 0x48},  
  831.         {0xfe, 0x02},  
  832.         {0x9d, 0x08},  
  833.         {0xfe, 0x01},  
  834.         {0x740x00},  
  835.                  AEC                                           
  836.         {0xfe, 0x01},  
  837.         {0x010x04},  
  838.         {0x020x60},  
  839.         {0x030x02},  
  840.         {0x040x48},  
  841.         {0x050x18},  
  842.         {0x060x50},  
  843.         {0x070x10},  
  844.         {0x080x38},  
  845.         {0x0a, 0x80},  
  846.         {0x210x04},  
  847.         {0xfe, 0x00},  
  848.         {0x200x03},  
  849.         {0xfe, 0x00},  
  850.         SensorEnd   
  851.   
  852. };  
  853. /* Senor full resolution setting: recommand for capture */  
  854. static struct rk_sensor_reg sensor_fullres_lowfps_data[] ={  
  855.   
  856.         //SENSORDB("GC2145_Sensor_2M"},  
  857.         {0xfe , 0x00},  
  858.         {0xfd , 0x00},   
  859.         {0xfa , 0x11},   
  860.                  crop window                     
  861.         {0xfe , 0x00},  
  862.         {0x90 , 0x01},   
  863.         {0x91 , 0x00},  
  864.         {0x92 , 0x00},  
  865.         {0x93 , 0x00},  
  866.         {0x94 , 0x00},  
  867.         {0x95 , 0x04},  
  868.         {0x96 , 0xb0},  
  869.         {0x97 , 0x06},  
  870.         {0x98 , 0x40},  
  871.         {0x99 , 0x11},   
  872.         {0x9a , 0x06},  
  873.                  AWB                                     
  874.         {0xfe , 0x00},  
  875.         {0xec , 0x06},   
  876.         {0xed , 0x04},  
  877.         {0xee , 0x60},  
  878.         {0xef , 0x90},  
  879.         {0xfe , 0x01},  
  880.         {0x74 , 0x01},   
  881.                  AEC  
  882.         {0xfe , 0x01},  
  883.         {0x01 , 0x04},  
  884.         {0x02 , 0xc0},  
  885.         {0x03 , 0x04},  
  886.         {0x04 , 0x90},  
  887.         {0x05 , 0x30},  
  888.         {0x06 , 0x90},  
  889.         {0x07 , 0x30},  
  890.         {0x08 , 0x80},  
  891.         {0x0a , 0x82},  
  892.         {0xfe , 0x01},  
  893.         {0x21 , 0x15},   
  894.         {0xfe , 0x00},  
  895.         {0x20 , 0x15},//if 0xfa=11,then 0x21=15;else if 0xfa=00,then 0x21=04  
  896.         {0xfe , 0x00},  
  897.       SensorEnd   
  898.   
  899. };  
  900.   
  901. /* Senor full resolution setting: recommand for video */  
  902. static struct rk_sensor_reg sensor_fullres_highfps_data[] ={  
  903.         SensorEnd  
  904. };  
  905. /* Preview resolution setting*/  
  906. static struct rk_sensor_reg sensor_preview_data[] =  
  907. {  
  908.   
  909.   
  910.         //SENSORDB("GC2145_Sensor_SVGA"},  
  911.             
  912.         {0xfe, 0x00},  
  913.         {0xb60x01},  
  914.         {0xfd, 0x01},  
  915.         {0xfa, 0x00},  
  916.                  crop window                           
  917.         {0xfe, 0x00},  
  918.         {0x900x01},  
  919.         {0x910x00},  
  920.         {0x920x00},  
  921.         {0x930x00},  
  922.         {0x940x00},  
  923.         {0x950x02},  
  924.         {0x960x58},  
  925.         {0x970x03},  
  926.         {0x980x20},  
  927.         {0x990x11},  
  928.         {0x9a, 0x06},  
  929.                  AWB                                           
  930.         {0xfe, 0x00},  
  931.         {0xec, 0x02},  
  932.         {0xed, 0x02},  
  933.         {0xee, 0x30},  
  934.         {0xef, 0x48},  
  935.         {0xfe, 0x02},  
  936.         {0x9d, 0x08},  
  937.         {0xfe, 0x01},  
  938.         {0x740x00},  
  939.                  AEC                                           
  940.         {0xfe, 0x01},  
  941.         {0x010x04},  
  942.         {0x020x60},  
  943.         {0x030x02},  
  944.         {0x040x48},  
  945.         {0x050x18},  
  946.         {0x060x50},  
  947.         {0x070x10},  
  948.         {0x080x38},  
  949.         {0x0a, 0x80},  
  950.         {0x210x04},  
  951.         {0xfe, 0x00},  
  952.         {0x200x03},  
  953.         {0xfe, 0x00},  
  954.      SensorEnd   
  955. };  
  956. /* 1280x720 */  
  957. static struct rk_sensor_reg sensor_720p[]={  
  958.         #if 0  
  959.         {0xfe , 0x00},  
  960.         //{0xfa , 0x11},  
  961.         {0xb6 , 0x01},  
  962.         {0xfd , 0x00},  
  963.          crop window  
  964.         {0xfe , 0x00},  
  965.         {0x99 , 0x55},  
  966.         {0x9a , 0x06},  
  967.         {0x9b , 0x00},  
  968.         {0x9c , 0x00},  
  969.         {0x9d , 0x01},  
  970.         {0x9e , 0x23},  
  971.         {0x9f , 0x00},  
  972.         {0xa0 , 0x00},  
  973.         {0xa1 , 0x01},  
  974.         {0xa2  ,0x23},  
  975.   
  976.         {0x90 , 0x01},  
  977.         {0x91 , 0x00},  
  978.         {0x92 , 0x78},  
  979.         {0x93 , 0x00},  
  980.         {0x94 , 0x00},  
  981.         {0x95 , 0x02},  
  982.         {0x96 , 0xd0},    
  983.         {0x97 , 0x05},  
  984.         {0x98 , 0x00},  
  985.          AWB                                     
  986.         {0xfe , 0x00},  
  987.         {0xec , 0x06},   
  988.         {0xed , 0x04},  
  989.         {0xee , 0x60},  
  990.         {0xef , 0x90},  
  991.         {0xfe , 0x01},  
  992.         {0x74 , 0x01},   
  993.                  AEC  
  994.         {0xfe , 0x01},  
  995.         {0x01 , 0x04},  
  996.         {0x02 , 0xc0},  
  997.         {0x03 , 0x04},  
  998.         {0x04 , 0x90},  
  999.         {0x05 , 0x30},  
  1000.         {0x06 , 0x90},  
  1001.         {0x07 , 0x30},  
  1002.         {0x08 , 0x80},  
  1003.         {0x0a , 0x82},  
  1004.         {0xfe , 0x01},  
  1005.         {0x21 , 0x15},   
  1006.         {0xfe , 0x00},  
  1007.         {0x20 , 0x15},//if 0xfa=11,then 0x21=15;else if 0xfa=00,then 0x21=04  
  1008.         {0xfe , 0x00},  
  1009.         #endif  
  1010.         SensorEnd   
  1011.         };  
  1012.   
  1013. /* 1920x1080 */  
  1014. static struct rk_sensor_reg sensor_1080p[]={  
  1015.         SensorEnd  
  1016. };  
  1017.   
  1018.   
  1019. static struct rk_sensor_reg sensor_softreset_data[]={  
  1020.     SensorRegVal(0xfe,80),  
  1021.     SensorWaitMs(5),  
  1022.         SensorEnd  
  1023. };  
  1024.   
  1025. static struct rk_sensor_reg sensor_check_id_data[]={  
  1026.         SensorRegVal(0xf0,0),  
  1027.         SensorRegVal(0xf1,0),  
  1028.         SensorEnd  
  1029. };  
  1030. /* 
  1031. *  The following setting must been filled, if the function is turn on by CONFIG_SENSOR_xxxx 
  1032. */  
  1033. static struct rk_sensor_reg sensor_WhiteB_Auto[]=  
  1034. {  
  1035.         {0xfe, 0x00},  
  1036.         {0xb30x61},  
  1037.         {0xb40x40},  
  1038.         {0xb50x61},  
  1039.         {0x820xfe},  
  1040.         SensorEnd  
  1041. };  
  1042. /* Cloudy Colour Temperature : 6500K - 8000K  */  
  1043. static  struct rk_sensor_reg sensor_WhiteB_Cloudy[]=  
  1044. {  
  1045.         {0xfe, 0x00},  
  1046.         {0x820xfc},  
  1047.         {0xb30x58},  
  1048.         {0xb40x40},  
  1049.         {0xb50x50},  
  1050.   
  1051.        SensorEnd  
  1052. };  
  1053. /* ClearDay Colour Temperature : 5000K - 6500K  */  
  1054. static  struct rk_sensor_reg sensor_WhiteB_ClearDay[]=  
  1055. {  
  1056.         //Sunny  
  1057.         {0xfe, 0x00},  
  1058.         {0x820xfc},  
  1059.         {0xb30x70},  
  1060.         {0xb40x40},  
  1061.         {0xb50x50},  
  1062.         SensorEnd  
  1063. };  
  1064. /* Office Colour Temperature : 3500K - 5000K  */  
  1065. static  struct rk_sensor_reg sensor_WhiteB_TungstenLamp1[]=  
  1066. {  
  1067.         //Office  
  1068.         {0xfe, 0x00},  
  1069.         {0x820xfc},  
  1070.         {0xb30x50},  
  1071.         {0xb40x40},  
  1072.         {0xb50xa8},  
  1073.         SensorEnd  
  1074.   
  1075. };  
  1076. /* Home Colour Temperature : 2500K - 3500K      */  
  1077. static  struct rk_sensor_reg sensor_WhiteB_TungstenLamp2[]=  
  1078. {  
  1079.         //Home  
  1080.         {0xfe, 0x00},  
  1081.         {0x820xfc},  
  1082.         {0xb30xa0},  
  1083.         {0xb40x45},  
  1084.         {0xb50x40},  
  1085.         SensorEnd  
  1086. };  
  1087.   
  1088.   
  1089.   
  1090. static struct rk_sensor_reg *sensor_WhiteBalanceSeqe[] = {sensor_WhiteB_Auto,  sensor_WhiteB_Cloudy,sensor_WhiteB_ClearDay,   
  1091.         sensor_WhiteB_TungstenLamp1,sensor_WhiteB_TungstenLamp2,NULL,  
  1092. };  
  1093.   
  1094. static  struct rk_sensor_reg sensor_Brightness0[]=  
  1095. {  
  1096.         // Brightness -2  
  1097.   
  1098.         {0xfe,0x01},  
  1099.         {0x13,0x10},  
  1100.         {0xfe,0x00},  
  1101.         SensorEnd  
  1102. };  
  1103.   
  1104. static  struct rk_sensor_reg sensor_Brightness1[]=  
  1105. {  
  1106.         // Brightness -1  
  1107.   
  1108.         {0xfe,0x01},  
  1109.         {0x13,0x20},  
  1110.         {0xfe,0x00},  
  1111.   
  1112.         SensorEnd  
  1113. };  
  1114.   
  1115. static  struct rk_sensor_reg sensor_Brightness2[]=  
  1116. {  
  1117.         //      Brightness 0  
  1118.   
  1119.         {0xfe,0x01},  
  1120.         {0x13,0x30},  
  1121.         {0xfe,0x00},  
  1122.   
  1123.         SensorEnd  
  1124. };  
  1125.   
  1126. static  struct rk_sensor_reg sensor_Brightness3[]=  
  1127. {  
  1128.         // Brightness +1  
  1129.         {0xfe,0x01},  
  1130.         {0x13,0x40},  
  1131.         {0xfe,0x00},  
  1132.   
  1133.         SensorEnd  
  1134. };  
  1135.   
  1136. static  struct rk_sensor_reg sensor_Brightness4[]=  
  1137. {  
  1138.         //      Brightness +2  
  1139.         {0xfe,0x01},  
  1140.         {0x13,0x45},  
  1141.         {0xfe,0x00},  
  1142.   
  1143.         SensorEnd  
  1144. };  
  1145.   
  1146. static  struct rk_sensor_reg sensor_Brightness5[]=  
  1147. {  
  1148.         //      Brightness +3  
  1149.         {0xfe,0x01},  
  1150.         {0x13,0x50},  
  1151.         {0xfe,0x00},  
  1152.         SensorEnd  
  1153. };  
  1154. static struct rk_sensor_reg *sensor_BrightnessSeqe[] = {sensor_Brightness0, sensor_Brightness1, sensor_Brightness2, sensor_Brightness3,  
  1155.         sensor_Brightness4, sensor_Brightness5,NULL,  
  1156. };  
  1157.   
  1158. static  struct rk_sensor_reg sensor_Effect_Normal[] =  
  1159. {  
  1160.         {0xfe, 0x00},  
  1161.         {0x830xe0},  
  1162.         SensorEnd  
  1163. };  
  1164.   
  1165. static  struct rk_sensor_reg sensor_Effect_WandB[] =  
  1166. {  
  1167.         {0xfe, 0x00},  
  1168.         {0x830x12},  
  1169.         SensorEnd  
  1170. };  
  1171.   
  1172. static  struct rk_sensor_reg sensor_Effect_Sepia[] =  
  1173. {  
  1174.         {0xfe, 0x00},  
  1175.         {0x830x82},  
  1176.         SensorEnd  
  1177. };  
  1178.   
  1179. static  struct rk_sensor_reg sensor_Effect_Negative[] =  
  1180. {  
  1181.         //Negative  
  1182.         {0xfe, 0x00},  
  1183.         {0x830x01},  
  1184.         SensorEnd  
  1185. };  
  1186. static  struct rk_sensor_reg sensor_Effect_Bluish[] =  
  1187. {  
  1188.         // Bluish  
  1189.         {0xfe, 0x00},  
  1190.         {0x830x62},  
  1191.         SensorEnd  
  1192. };  
  1193.   
  1194. static  struct rk_sensor_reg sensor_Effect_Green[] =  
  1195. {  
  1196.         //      Greenish  
  1197.         {0xfe, 0x00},  
  1198.         {0x830x52},  
  1199.         SensorEnd  
  1200. };  
  1201. static struct rk_sensor_reg *sensor_EffectSeqe[] = {sensor_Effect_Normal, sensor_Effect_WandB, sensor_Effect_Negative,sensor_Effect_Sepia,  
  1202.         sensor_Effect_Bluish, sensor_Effect_Green,NULL,  
  1203. };  
  1204.   
  1205. static  struct rk_sensor_reg sensor_Exposure0[]=  
  1206. {  
  1207.         {0xfe,0x01},  
  1208.         {0x13,0x60},  
  1209.         {0xfe,0x00},  
  1210.   
  1211.         SensorEnd  
  1212. };  
  1213.   
  1214. static  struct rk_sensor_reg sensor_Exposure1[]=  
  1215. {  
  1216.         {0xfe,0x01},  
  1217.         {0x13,0x65},  
  1218.         {0xfe,0x00},  
  1219.   
  1220.         SensorEnd  
  1221. };  
  1222.   
  1223. static  struct rk_sensor_reg sensor_Exposure2[]=  
  1224. {  
  1225.         {0xfe,0x01},  
  1226.         {0x13,0x70},  
  1227.         {0xfe,0x00},  
  1228.   
  1229.         SensorEnd  
  1230. };  
  1231.   
  1232. static  struct rk_sensor_reg sensor_Exposure3[]=  
  1233. {  
  1234.         {0xfe,0x01},  
  1235.         {0x13,0x7b},  
  1236.         {0xfe,0x00},  
  1237.         SensorEnd  
  1238. };  
  1239.   
  1240. static  struct rk_sensor_reg sensor_Exposure4[]=  
  1241. {  
  1242.         {0xfe,0x01},  
  1243.         {0x13,0x85},  
  1244.         {0xfe,0x00},  
  1245.   
  1246.         SensorEnd  
  1247. };  
  1248.   
  1249. static  struct rk_sensor_reg sensor_Exposure5[]=  
  1250. {  
  1251.         {0xfe,0x01},  
  1252.         {0x13,0x90},  
  1253.         {0xfe,0x00},  
  1254.   
  1255.         SensorEnd  
  1256. };  
  1257.   
  1258. static  struct rk_sensor_reg sensor_Exposure6[]=  
  1259. {  
  1260.         {0xfe,0x01},  
  1261.         {0x13,0x95},  
  1262.         {0xfe,0x00},  
  1263.   
  1264.         SensorEnd  
  1265. };  
  1266.   
  1267. static struct rk_sensor_reg *sensor_ExposureSeqe[] = {sensor_Exposure0, sensor_Exposure1, sensor_Exposure2, sensor_Exposure3,  
  1268.         sensor_Exposure4, sensor_Exposure5,sensor_Exposure6,NULL,  
  1269. };  
  1270.   
  1271. static  struct rk_sensor_reg sensor_Saturation0[]=  
  1272. {  
  1273.         SensorEnd  
  1274. };  
  1275.   
  1276. static  struct rk_sensor_reg sensor_Saturation1[]=  
  1277. {  
  1278.         SensorEnd  
  1279. };  
  1280.   
  1281. static  struct rk_sensor_reg sensor_Saturation2[]=  
  1282. {  
  1283.         SensorEnd  
  1284. };  
  1285. static struct rk_sensor_reg *sensor_SaturationSeqe[] = {sensor_Saturation0, sensor_Saturation1, sensor_Saturation2NULL,};  
  1286.   
  1287. static  struct rk_sensor_reg sensor_Contrast0[]=  
  1288. {  
  1289.         //Contrast -3  
  1290.   
  1291.         SensorEnd  
  1292. };  
  1293.   
  1294. static  struct rk_sensor_reg sensor_Contrast1[]=  
  1295. {  
  1296.         //Contrast -2  
  1297.   
  1298.         SensorEnd  
  1299. };  
  1300.   
  1301. static  struct rk_sensor_reg sensor_Contrast2[]=  
  1302. {  
  1303.         // Contrast -1  
  1304.   
  1305.         SensorEnd  
  1306. };  
  1307.   
  1308. static  struct rk_sensor_reg sensor_Contrast3[]=  
  1309. {  
  1310.         //Contrast 0  
  1311.   
  1312.         SensorEnd  
  1313. };  
  1314.   
  1315. static  struct rk_sensor_reg sensor_Contrast4[]=  
  1316. {  
  1317.         //Contrast +1  
  1318.   
  1319.         SensorEnd  
  1320. };  
  1321.   
  1322.   
  1323. static  struct rk_sensor_reg sensor_Contrast5[]=  
  1324. {  
  1325.         //Contrast +2  
  1326.   
  1327.         SensorEnd  
  1328. };  
  1329.   
  1330. static  struct rk_sensor_reg sensor_Contrast6[]=  
  1331. {  
  1332.         //Contrast +3  
  1333.   
  1334.         SensorEnd  
  1335. };  
  1336. static struct rk_sensor_reg *sensor_ContrastSeqe[] = {sensor_Contrast0, sensor_Contrast1, sensor_Contrast2, sensor_Contrast3,  
  1337.         sensor_Contrast4, sensor_Contrast5, sensor_Contrast6NULL,  
  1338. };  
  1339. static  struct rk_sensor_reg sensor_SceneAuto[] =  
  1340. {  
  1341.         {0xfe,0x01},  
  1342.   
  1343.         {0x3c,0x40},  
  1344.         {0xfe,0x00},  
  1345.         SensorEnd  
  1346. };  
  1347.   
  1348. static  struct rk_sensor_reg sensor_SceneNight[] =  
  1349. {  
  1350.         {0xfe,0x01},  
  1351.   
  1352.         {0x3c,0x60},  
  1353.         {0xfe,0x00},  
  1354.         SensorEnd  
  1355. };  
  1356. static struct rk_sensor_reg *sensor_SceneSeqe[] = {sensor_SceneAuto, sensor_SceneNight,NULL,};  
  1357.   
  1358. static struct rk_sensor_reg sensor_Zoom0[] =  
  1359. {  
  1360.         SensorEnd  
  1361. };  
  1362.   
  1363. static struct rk_sensor_reg sensor_Zoom1[] =  
  1364. {  
  1365.         SensorEnd  
  1366. };  
  1367.   
  1368. static struct rk_sensor_reg sensor_Zoom2[] =  
  1369. {  
  1370.         SensorEnd  
  1371. };  
  1372.   
  1373.   
  1374. static struct rk_sensor_reg sensor_Zoom3[] =  
  1375. {  
  1376.         SensorEnd  
  1377. };  
  1378. static struct rk_sensor_reg *sensor_ZoomSeqe[] = {sensor_Zoom0, sensor_Zoom1, sensor_Zoom2, sensor_Zoom3NULL,};  
  1379.   
  1380. /* 
  1381. * User could be add v4l2_querymenu in sensor_controls by new_usr_v4l2menu 
  1382. */  
  1383. static struct v4l2_querymenu sensor_menus[] =  
  1384. {  
  1385. };  
  1386. /* 
  1387. * User could be add v4l2_queryctrl in sensor_controls by new_user_v4l2ctrl 
  1388. */  
  1389. static struct sensor_v4l2ctrl_usr_s sensor_controls[] =  
  1390. {  
  1391. };  
  1392.   
  1393. //MUST define the current used format as the first item     
  1394. static struct rk_sensor_datafmt sensor_colour_fmts[] = {  
  1395.         {V4L2_MBUS_FMT_UYVY8_2X8, V4L2_COLORSPACE_JPEG}   
  1396. };  
  1397. static struct soc_camera_ops sensor_ops;  
  1398.   
  1399.   
  1400. /* 
  1401. ********************************************************** 
  1402. * Following is local code: 
  1403.  
  1404. * Please codeing your program here  
  1405. ********************************************************** 
  1406. */  
  1407. /* 
  1408. ********************************************************** 
  1409. * Following is callback 
  1410. * If necessary, you could coding these callback 
  1411. ********************************************************** 
  1412. */  
  1413. /* 
  1414. * the function is called in open sensor   
  1415. */  
  1416. static int sensor_activate_cb(struct i2c_client *client)  
  1417. {  
  1418.   
  1419.         return 0;  
  1420. }  
  1421. /* 
  1422. * the function is called in close sensor 
  1423. */  
  1424. static int sensor_deactivate_cb(struct i2c_client *client)  
  1425. {  
  1426.         //sensor_write(client, 0xfe, 0xf0);  
  1427.         //sensor_write(client, 0xfe, 0xf0);  
  1428.         //sensor_write(client, 0xfe, 0xf0);  
  1429.         //sensor_write(client, 0xfa, 0x73);  
  1430.         //sensor_write(client, 0x24, 0x00);  
  1431.         return 0;  
  1432. }  
  1433. /* 
  1434. * the function is called before sensor register setting in VIDIOC_S_FMT   
  1435. */  
  1436. static  unsigned   int shutter_h=0,shutter_l=0,cap=0;  
  1437. static int sensor_s_fmt_cb_th(struct i2c_client *client,struct v4l2_mbus_framefmt *mf, bool capture)  
  1438. {  
  1439.         char value;  
  1440.         unsigned   int pid=0,shutter,temp_reg;  
  1441.   
  1442.         if ((mf->width == 800 && mf->height == 600)&&(cap==1))  
  1443.         {  
  1444.         cap=0;  
  1445.         sensor_write(client, 0xb60x00);  // AEC off  
  1446.         sensor_write(client, 0x03, shutter_h);  
  1447.         sensor_write(client, 0x04, shutter_l);  
  1448.     msleep(50);  
  1449.         printk("set preview for rewrite 0x03");  
  1450.         }  
  1451.         if(mf->width == 1600 && mf->height == 1200){  
  1452.   
  1453.                  cap=1;  
  1454.                  sensor_write(client, 0xfe, 0x00);  
  1455.                  sensor_write(client, 0xb60x00);  
  1456.                  sensor_read(client, 0x03, &value);  
  1457.                  shutter_h=value;  
  1458.                  pid |= (value << 8);  
  1459.                 sensor_read(client, 0x04, &value);  
  1460.                  shutter_l=value;  
  1461.                  pid |= (value & 0xff);  
  1462.                  shutter=pid;  
  1463.   
  1464.                  temp_reg= shutter/2;  
  1465.   
  1466.                  if(temp_reg < 1) temp_reg = 1;  
  1467.   
  1468.   
  1469.                  sensor_write(client, 0x03, ((temp_reg>>8)&0x1f));  
  1470.                  sensor_write(client, 0x04, (temp_reg&0xff));  
  1471.                   msleep(350);  
  1472.         }  
  1473.   
  1474.         return 0;  
  1475. }  
  1476. /* 
  1477. * the function is called after sensor register setting finished in VIDIOC_S_FMT   
  1478. */  
  1479. static int sensor_s_fmt_cb_bh (struct i2c_client *client,struct v4l2_mbus_framefmt *mf, bool capture)  
  1480. {  
  1481.         return 0;  
  1482. }  
  1483. static int sensor_softrest_usr_cb(struct i2c_client *client,struct rk_sensor_reg *series)  
  1484. {  
  1485.   
  1486.         return 0;  
  1487. }  
  1488. static int sensor_check_id_usr_cb(struct i2c_client *client,struct rk_sensor_reg *series)  
  1489. {  
  1490.         return 0;  
  1491. }  
  1492. static int sensor_try_fmt_cb_th(struct i2c_client *client,struct v4l2_mbus_framefmt *mf)  
  1493. {  
  1494.         return 0;  
  1495. }  
  1496. static int sensor_suspend(struct soc_camera_device *icd, pm_message_t pm_msg)  
  1497. {  
  1498.         //struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));  
  1499.   
  1500.         if (pm_msg.event == PM_EVENT_SUSPEND) {  
  1501.                 SENSOR_DG("Suspend");  
  1502.   
  1503.         } else {  
  1504.                 SENSOR_TR("pm_msg.event(0x%x) != PM_EVENT_SUSPEND\n",pm_msg.event);  
  1505.                 return -EINVAL;  
  1506.         }  
  1507.         return 0;  
  1508. }  
  1509.   
  1510. static int sensor_resume(struct soc_camera_device *icd)  
  1511. {  
  1512.   
  1513.         SENSOR_DG("Resume");  
  1514.   
  1515.         return 0;  
  1516.   
  1517. }  
  1518. static int sensor_mirror_cb (struct i2c_client *client, int mirror)  
  1519. {  
  1520.         char val;  
  1521.         int err = 0;  
  1522.   
  1523.         SENSOR_DG("mirror: %d",mirror);  
  1524.         if (mirror) {  
  1525.                 sensor_write(client, 0xfe, 0);  
  1526.                 err = sensor_read(client, 0x17, &val);  
  1527.                 val-=4;  
  1528.                 if (err == 0) {  
  1529.                         if((val & 0x1) == 0){  
  1530.                                 err = sensor_write(client, 0x17, ((val |0x1)+4));  
  1531.                                 }  
  1532.                         else   
  1533.                                 err = sensor_write(client, 0x17, ((val & 0xfe)+4));  
  1534.                 }  
  1535.         } else {  
  1536.                 //do nothing  
  1537.         }  
  1538.         return err;      
  1539. }  
  1540. /* 
  1541. * the function is v4l2 control V4L2_CID_HFLIP callback 
  1542. */  
  1543. static int sensor_v4l2ctrl_mirror_cb(struct soc_camera_device *icd, struct sensor_v4l2ctrl_info_s *ctrl_info,   
  1544.                                                                                                          struct v4l2_ext_control *ext_ctrl)  
  1545. {  
  1546.         struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));  
  1547.   
  1548.         if (sensor_mirror_cb(client,ext_ctrl->value) != 0)  
  1549.                 SENSOR_TR("sensor_mirror failed, value:0x%x",ext_ctrl->value);  
  1550.   
  1551.         SENSOR_DG("sensor_mirror success, value:0x%x",ext_ctrl->value);  
  1552.         return 0;  
  1553. }  
  1554.   
  1555. static int sensor_flip_cb(struct i2c_client *client, int flip)  
  1556. {  
  1557.         char val;  
  1558.         int err = 0;  
  1559.   
  1560.         SENSOR_DG("flip: %d",flip);  
  1561.         if (flip) {  
  1562.   
  1563.                 sensor_write(client, 0xfe, 0);  
  1564.                 err = sensor_read(client, 0x17, &val);  
  1565.                 val-=4;  
  1566.                 if (err == 0) {  
  1567.                         if((val & 0x2) == 0){  
  1568.                                 err = sensor_write(client, 0x17, ((val |0x2)+4));  
  1569.                                 }  
  1570.                         else {  
  1571.                                 err = sensor_write(client, 0x17, ((val & 0xfc)+4));  
  1572.                                 }  
  1573.                 }  
  1574.         } else {  
  1575.                 //do nothing  
  1576.         }  
  1577.   
  1578.         return err;      
  1579. }  
  1580. /* 
  1581. * the function is v4l2 control V4L2_CID_VFLIP callback 
  1582. */  
  1583. static int sensor_v4l2ctrl_flip_cb(struct soc_camera_device *icd, struct sensor_v4l2ctrl_info_s *ctrl_info,   
  1584.                                                                                                          struct v4l2_ext_control *ext_ctrl)  
  1585. {  
  1586.         struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd));  
  1587.   
  1588.         if (sensor_flip_cb(client,ext_ctrl->value) != 0)  
  1589.                 SENSOR_TR("sensor_flip failed, value:0x%x",ext_ctrl->value);  
  1590.   
  1591.         SENSOR_DG("sensor_flip success, value:0x%x",ext_ctrl->value);  
  1592.         return 0;  
  1593. }  
  1594. /* 
  1595. * the functions are focus callbacks 
  1596. */  
  1597. static int sensor_focus_init_usr_cb(struct i2c_client *client){  
  1598.         return 0;  
  1599. }  
  1600.   
  1601. static int sensor_focus_af_single_usr_cb(struct i2c_client *client){  
  1602.         return 0;  
  1603. }  
  1604.   
  1605. static int sensor_focus_af_near_usr_cb(struct i2c_client *client){  
  1606.         return 0;  
  1607. }  
  1608.   
  1609. static int sensor_focus_af_far_usr_cb(struct i2c_client *client){  
  1610.         return 0;  
  1611. }  
  1612.   
  1613. static int sensor_focus_af_specialpos_usr_cb(struct i2c_client *client,int pos){  
  1614.         return 0;  
  1615. }  
  1616.   
  1617. static int sensor_focus_af_const_usr_cb(struct i2c_client *client){  
  1618.         return 0;  
  1619. }  
  1620. static int sensor_focus_af_const_pause_usr_cb(struct i2c_client *client)  
  1621. {  
  1622.     return 0;  
  1623. }  
  1624. static int sensor_focus_af_close_usr_cb(struct i2c_client *client){  
  1625.         return 0;  
  1626. }  
  1627.   
  1628. static int sensor_focus_af_zoneupdate_usr_cb(struct i2c_client *client, intint *zone_tm_pos)  
  1629. {  
  1630.     return 0;  
  1631. }  
  1632.   
  1633. /* 
  1634. face defect call back 
  1635. */  
  1636. static int      sensor_face_detect_usr_cb(struct i2c_client *client,int on){  
  1637.         return 0;  
  1638. }  
  1639.   
  1640. /* 
  1641. *       The function can been run in sensor_init_parametres which run in sensor_probe, so user can do some 
  1642. * initialization in the function.  
  1643. */  
  1644. static void sensor_init_parameters_user(struct specific_sensor* spsensor,struct soc_camera_device *icd)  
  1645. {  
  1646.         return;  
  1647. }  
  1648.   
  1649. /* 
  1650. * :::::WARNING::::: 
  1651. * It is not allowed to modify the following code 
  1652. */  
  1653.   
  1654. sensor_init_parameters_default_code();  
  1655.   
  1656. sensor_v4l2_struct_initialization();  
  1657.   
  1658. sensor_probe_default_code();  
  1659.   
  1660. sensor_remove_default_code();  
  1661.   
  1662. sensor_driver_default_module_code();  

再在include/media/v4l2-chip-ident.h文件中添加如下内容:

  1. V4L2_IDENT_GC203564116,      /* ddl@rock-chips.com : GC0329 support */  
  2. V4L2_IDENT_GC0328 = 64117,  
  3. V4L2_IDENT_GC2145 = 64118,  

在drivers/media/video/Makefile 文件中加入如下内容:

obj-$(CONFIG_RK30_CAMERA_PINGPONG) += rk30_camera_pingpong.o generic_sensor.o \
gc0307.o \
gc0308.o \
gc0309.o \
gc0328.o \
gc0329.o \
gc2015.o \
gc2035.o \
gc2145.o \
gt2005.o \
hm2057.o \
hm5065.o \
mt9p111.o \
nt99160_2way.o \
nt99240_2way.o \
ov2659.o \
ov5640.o \
sp0838.o \
sp2518.o
obj-$(CONFIG_RK30_CAMERA_ONEFRAME) += rk30_camera_oneframe.o generic_sensor.o \
gc0307.o \
gc0308.o \
gc0309.o \
gc0328.o \
gc0329.o \
gc2015.o \
gc2035.o \
gc2145.o \
gt2005.o \
hm2057.o \
hm5065.o \
mt9p111.o \
nt99160_2way.o \
nt99240_2way.o \
ov2659.o \
ov5640.o \
sp0838.o \
sp2518.o


UNICODE 全志R16平台TINAV2.1下的CSI接口摄像头ov5640的配置v1.2.txt R16_Camera模块开发说明文档_V1.8.pdf 所有步骤请按照这个说明书执行 1、驱动的编译配置: R:\wyb\gc2145_tinav2.1\lichee\linux-3.4\drivers\media\video\sunxi-vfe\device\gc2145.c R:\wyb\gc2145_tinav2.1\lichee\linux-3.4\drivers\media\video\sunxi-vfe\device\Makefile (可选操作,除了gc2145之外,其它的摄像头驱动都关闭,肯定可以减小最终生成的IMG的大小!) obj-m += ov5640.o obj-m += ov2640.o #obj-m += ov7736.o #obj-m += s5k4ec.o #obj-m += s5k4ec_mipi.o #obj-m += gc2035.o #obj-m += gt2005.o #obj-m += gc0307.o obj-m += gc0308.o #obj-m += gc0328.o #obj-m += gc0328c.o #obj-m += gc0329.o #obj-m += gc0311.o #obj-m += hi253.o #obj-m += sp2518.o #obj-m += sp2519.o #obj-m += sp0718.o #obj-m += sp0838.o #obj-m += ov16825.o #obj-m += ov5650.o #obj-m += ov5647.o #obj-m += ov5647_mipi.o #obj-m += t8et5.o #obj-m += s5k4e1.o #obj-m += s5k4e1_mipi.o #obj-m += sp2518.o #obj-m += sp0718.o #obj-m += gc5004.o #obj-m += gc5004_mipi.o #obj-m += ov5648.o #obj-m += ar0330.o #obj-m += ov5648.o #obj-m += sp5408.o #obj-m += ov12830.o #obj-m += ov8825.o #obj-m += ov8850.o #obj-m += gc2155.o obj-m += gc2145.o obj-m += gc2145d.o #obj-m += ov8858.o #obj-m += ov13850.o #obj-m += imx214.o #obj-m += ov8858_4lane.o #obj-m += sp5409.o #obj-m += s5k5e2yx.o #obj-m += ov2710_mipi.o #obj-m += siv121d.o #obj-m += ov2710_mipi.o #obj-m += bg0703.o #obj-m += gc1014_mipi.o #obj-m += imx219.o #obj-m += imx224.o #obj-m += imx322.o #obj-m += ov8858_r2a_4lane.o #obj-m += ov8865_4lane.o #obj-m += ps1210.o #obj-m += imx291.o 2、R:\wyb\gc2145_tinav2.1\lichee\linux-3.4\drivers\media\video\sunxi-vfe\vfe.c 这里修正之后就一切正常了。不然摄像头在系统启动之后就永远休眠了。 static void probe_work_handle(struct work_struct *work) { …… #ifdef CONFIG_ES dev->early_suspend.level = EARLY_SUSPEND_LEVEL_DISABLE_FB + 1; dev->early_suspend.suspend = vfe_early_suspend; dev->early_suspend.resume = vfe_late_resume; // [hawkview_err]xxxxcan't open /dev/video0(Resource temporarily unavailable) // 2016/10/25 14:33 wenyuanbo cloase suspend. // register_early_suspend(&dev->early_suspend); vfe_print("register_early_suspend @ probe handle!\n"); #endif …… } 3、请严重注意:全志原生提供的cameratest有点错误(和tinav1.0对比得知:保存获取图片的文件名有小错误) R:\wyb\gc2145_tinav2.1\package\allwinner\cameratest\src\common\hawkview.c int fetch_sub_cmd(const char* buf,int buf_len,char** cmd,int* cmd_num,int lenght) { int i = 0,j = 0,n = 0; while(buf[i] != '#'){ //the sub cmd end by '#' while(buf[i] != 'x' && buf[i] != ':' && buf[i] != '#') { if((i+1) > buf_len) return 0; *((char*)cmd + n*lenght + j++) = buf[i++]; …… } R:\wyb\gc2145_tinav2.1\package\allwinner\cameratest\src\common\video.c static int capture_frame(void* capture,int (*set_disp_addr)(int,int,unsigned int*),pthread_mutex_t* mutex) { …… //sync capture info perp x second #define M_SECOND 200 if(is_x_msec(M_SECOND,(long long)(buf.timestamp.tv_sec),(long long)(buf.timestamp.tv_usec))){ getExifInfo(&(cap->frame.exif)); (建议关闭这里) // set_cap_info((void*)cap); } …… } R:\wyb\gc2145_tinav2.1\package\allwinner\cameratest\src\common\video_helper.c int set_cap_info(void* capture) { …… (修改这里) //strcpy(file_path, "dev/info"); sprintf(file_path, "%s/%s.info", PATH, cap->picture.path_name); …… } int do_save_sub_image(void* capture,int buf_index) { …… (增加这里) set_cap_info(capture); set_exif_info(capture); hv_dbg("--------set_exif_info end\n"); …… } 4、配置为在系统启动的时候加载gc2145.ko(SDK默认加载的是gc0308.ko) R:\wyb\gc2145_tinav2.1\target\allwinner\astar-common\modules.mk define KernelPackage/sunxi-vfe SUBMENU:=$(VIDEO_MENU) TITLE:=sunxi-vfe support FILES:=$(LINUX_DIR)/drivers/media/video/videobuf-core.ko FILES+=$(LINUX_DIR)/drivers/media/video/videobuf-dma-contig.ko FILES+=$(LINUX_DIR)/drivers/media/video/sunxi-vfe/csi_cci/cci.ko FILES+=$(LINUX_DIR)/drivers/media/video/sunxi-vfe/vfe_os.ko FILES+=$(LINUX_DIR)/drivers/media/video/sunxi-vfe/vfe_subdev.ko (修改这里) FILES+=$(LINUX_DIR)/drivers/media/video/sunxi-vfe/device/gc2145.ko FILES+=$(LINUX_DIR)/drivers/media/video/sunxi-vfe/vfe_v4l2.ko (修改这里) AUTOLOAD:=$(call AutoLoad,90,videobuf-core videobuf-dma-contig cci vfe_os vfe_subdev gc2145 vfe_v4l2) endef 5、直接使用了tinav1.0上调通ov5640后的sys_config.fex (请注意:这里修改的电源部分,其他没有用到的设备都请关闭掉。请参照您的原理图修改摄像头的供电部分!!!!) R:\wyb\gc2145_tinav2.1\target\allwinner\astar-parrot\configs\sys_config.fex [power_sply] dcdc1_vol = 3000 dcdc2_vol = 1100 dcdc3_vol = 1200 dcdc4_vol = 0 dcdc5_vol = 1500 aldo2_vol = 2500 aldo3_vol = 3000 (这里是增加的电源部分:) dldo3_vol = 2800 ;gpio0_vol = 2800 ldoio0_vol = 2800 [csi0] vip_used = 1 vip_mode = 0 vip_dev_qty = 1 vip_define_sensor_list = 0 vip_csi_pck = port:PE00 vip_csi_mck = port:PE01 vip_csi_hsync = port:PE02 vip_csi_vsync = port:PE03 vip_csi_d0 = port:PE04 vip_csi_d1 = port:PE05 vip_csi_d2 = port:PE06 vip_csi_d3 = port:PE07 vip_csi_d4 = port:PE08 vip_csi_d5 = port:PE09 vip_csi_d6 = port:PE10 vip_csi_d7 = port:PE11 ;vip_csi_sck = port:PE12 ;vip_csi_sda = port:PE13 ;vip_dev0_mname = "gc0308" ;vip_dev0_mname = "ov5640" vip_dev0_mname = "gc2145" vip_dev0_pos = "rear" vip_dev0_lane = 1 vip_dev0_twi_id = 2 ;vip_dev0_twi_addr = 0x42 vip_dev0_twi_addr = 0x78 vip_dev0_isp_used = 0 vip_dev0_fmt = 0 (2017/4/6 11:41 wenyuanbo 调试的时候这里设置为0方便测量摄像头的供电部分^_) ;vip_dev0_stby_mode = 1 vip_dev0_stby_mode = 0 vip_dev0_vflip = 0 vip_dev0_hflip = 0 vip_dev0_iovdd = "axp22_dldo3" vip_dev0_iovdd_vol = 2800000 vip_dev0_avdd = "" vip_dev0_avdd_vol = 2800000 vip_dev0_dvdd = "" vip_dev0_dvdd_vol = 1800000 vip_dev0_afvdd = "" vip_dev0_afvdd_vol = 2800000 vip_dev0_power_en = vip_dev0_reset = port:PE14 vip_dev0_pwdn = port:PE15 vip_dev0_flash_en = vip_dev0_flash_mode = vip_dev0_af_pwdn = (这个可以不改。不需要支持OTG功能。) ;usb_port_type: usb mode: 0-device, 1-host, 2-otg …… [usbc0] usb_used = 1 ;usb_port_type = 2 usb_port_type = 0 (!!!!解决重启的问题) [pmu1_para] …… ;power_start = 0 power_start = 3 pmu_temp_enable = 0 6、第一次编译之后,再次配置: 10、在menuconfig中打开sunxi-vfe support rootroot@rootroot-E400:~/wyb/gc2145_tinav2.1$ pwd /home/rootroot/wyb/gc2145_tinav2.1 rootroot@rootroot-E400:~/wyb/gc2145_tinav2.1$ source build/envsetup.sh including target/allwinner/tulip-d1/vendorsetup.sh including target/allwinner/octopus-dev/vendorsetup.sh including target/allwinner/azalea-perf3/vendorsetup.sh including target/allwinner/octopus-sch/vendorsetup.sh including target/allwinner/azalea-evb/vendorsetup.sh including target/allwinner/azalea-perf2/vendorsetup.sh including target/allwinner/astar-parrot/vendorsetup.sh including target/allwinner/generic/vendorsetup.sh including target/allwinner/astar-spk/vendorsetup.sh including target/allwinner/azalea-perf1/vendorsetup.sh including target/allwinner/astar-evb/vendorsetup.sh rootroot@rootroot-E400:~/wyb/gc2145_tinav2.1$ lunch You're building on Linux Lunch menu... pick a combo: 1. tulip_d1-tina 2. tulip_d1-dragonboard 3. octopus_dev-tina 4. octopus_dev-dragonboard 5. azalea_perf3-tina 6. azalea_perf3-dragonboard 7. octopus_sch-tina 8. octopus_sch-dragonboard 9. azalea_evb-tina 10. azalea_evb-dragonboard 11. azalea_perf2-tina 12. azalea_perf2-dragonboard 13. astar_parrot-tina 14. astar_parrot-dragonboard 15. astar_spk-tina 16. astar_spk-dragonboard 17. azalea_perf1-tina 18. azalea_perf1-dragonboard 19. astar_evb-tina Which would you like?13 ============================================ PLATFORM_VERSION_CODENAME=Neptune PLATFORM_VERSION=2.0.0 TARGET_PRODUCT=astar_parrot TARGET_BUILD_VARIANT=tina TARGET_BUILD_TYPE=release TARGET_BUILD_APPS= TARGET_ARCH=arm TARGET_ARCH_VARIANT=armv7-a-neon TARGET_CPU_VARIANT=cortex-a7 TARGET_2ND_ARCH= TARGET_2ND_ARCH_VARIANT= TARGET_2ND_CPU_VARIANT= HOST_ARCH=x86_64 HOST_OS=linux HOST_OS_EXTRA=Linux-3.13.0-24-generic-x86_64-with-Ubuntu-14.04-trusty HOST_BUILD_TYPE=release BUILD_ID=57513AA3 OUT_DIR= ============================================ rootroot@rootroot-E400:~/wyb/gc2145_tinav2.1$ make -j8 rootroot@rootroot-E400:~/wyb/gc2145_tinav2.1$ make menuconfig Kernel modules ---> Video Support ---> kmod-sunxi-vfe......................................... sunxi-vfe support 7、编译打包刷机之后的串口(debug口的)打印信息:: rootroot@cm-System-Product-Name:/home/rediron/r16/gc2145_tinav2.1$ cp .config bak2_vfe.config rootroot@rootroot-virtual-machine:~/wyb/opencv3.1_r16_tinav2.1$ make -j8 rootroot@rootroot-virtual-machine:~/wyb/opencv3.1_r16_tinav2.1$ pack -d 验证gc2145驱动是否正常加载: Xshell 5 (Build 0964) Copyright (c) 2002-2016 NetSarang Computer, Inc. All rights reserved. Type `help' to learn how to use Xshell prompt. [c:\~]$ Connecting to COM3... Connected. BusyBox v1.24.1 () built-in shell (ash) _____ _ __ _ |_ _||_| ___ _ _ | | |_| ___ _ _ _ _ | | _ | || | | |__ | || || | ||_'_| | | | || | || _ | |_____||_||_|_||___||_,_| |_| |_||_|_||_|_| Tina is Based on OpenWrt! ---------------------------------------------- Tina Linux (Neptune, 57513AA3) ---------------------------------------------- root@TinaLinux:/# root@TinaLinux:/# cd /dev root@TinaLinux:/dev# ll v* crw-r--r-- 1 root root 7, 0 Jan 2 08:02 vcs crw-r--r-- 1 root root 7, 1 Jan 2 08:02 vcs1 crw-r--r-- 1 root root 7, 128 Jan 2 08:02 vcsa crw-r--r-- 1 root root 7, 129 Jan 2 08:02 vcsa1 crw-r--r-- 1 root root 10, 54 Jan 2 08:02 vhci crw-r--r-- 1 root root 81, 0 Jan 2 08:02 video0 root@TinaLinux:/# lsmod bcmdhd 534841 0 cci 19880 2 gc2145 gc2145 11234 0 snd_mixer_oss 11252 1 snd_pcm_oss snd_pcm_oss 29795 0 snd_seq_device 3927 0 vfe_os 3065 2 vfe_v4l2 vfe_subdev 3941 2 vfe_v4l2 vfe_v4l2 335707 0 videobuf_core 12030 2 vfe_v4l2 videobuf_dma_contig 2553 1 vfe_v4l2 root@TinaLinux:/# root@TinaLinux:/dev# cd /sys/class/i2c-adapter/i2c- i2c-0/ i2c-1/ i2c-2/ root@TinaLinux:/dev# cd /sys/class/i2c-adapter/i2c-2 root@TinaLinux:/sys/devices/platform/twi.2/i2c-2# ll drwxr-xr-x 4 root root 0 Jan 2 08:02 . drwxr-xr-x 4 root root 0 Jan 2 08:02 .. drwxr-xr-x 3 root root 0 Jan 2 08:04 2-003c --w------- 1 root root 4096 Jan 2 08:04 delete_device lrwxrwxrwx 1 root root 0 Jan 2 08:04 device -> ../../twi.2 -r--r--r-- 1 root root 4096 Jan 2 08:04 name --w------- 1 root root 4096 Jan 2 08:04 new_device drwxr-xr-x 2 root root 0 Jan 2 08:04 power lrwxrwxrwx 1 root root 0 Jan 2 08:04 subsystem -> ../../../../bus/i2c -rw-r--r-- 1 root root 4096 Jan 2 08:04 uevent root@TinaLinux:/sys/devices/platform/twi.2/i2c-2# cd 2-003c root@TinaLinux:/sys/devices/platform/twi.2/i2c-2/2-003c# ll drwxr-xr-x 3 root root 0 Jan 2 08:04 . drwxr-xr-x 4 root root 0 Jan 2 08:02 .. lrwxrwxrwx 1 root root 0 Jan 2 08:04 driver -> ../../../../../bus/i2c/drivers/ov5640 -r--r--r-- 1 root root 4096 Jan 2 08:04 modalias -r--r--r-- 1 root root 4096 Jan 2 08:04 name drwxr-xr-x 2 root root 0 Jan 2 08:04 power lrwxrwxrwx 1 root root 0 Jan 2 08:04 subsystem -> ../../../../../bus/i2c -rw-r--r-- 1 root root 4096 Jan 2 08:04 uevent root@TinaLinux:/sys/devices/platform/twi.2/i2c-2/2-003c# cat name gc2145 root@TinaLinux:/sys/devices/platform/twi.2/i2c-2/2-003c# 获取YUV格式的图片: [ 19.184637] dhd_open: Exit ret=0 [ 22.716117] sndpcm_startup,l:1688,pa_vol:40 BusyBox v1.24.1 () built-in shell (ash) _____ _ __ _ |_ _||_| ___ _ _ | | |_| ___ _ _ _ _ | | _ | || | | |__ | || || | ||_'_| | | | || | || _ | |_____||_||_|_||___||_,_| |_| |_||_|_||_|_| Tina is Based on OpenWrt! ---------------------------------------------- Tina Linux (Neptune, 57513AA3) ---------------------------------------------- root@TinaLinux:/# root@TinaLinux:/# root@TinaLinux:/# pwd / root@TinaLinux:/# root@TinaLinux:/# root@TinaLinux:/# root@TinaLinux:/# cameratest [hawkview_dbg]hawkview_init set_w 1280 [hawkview_msg]----sunxi9iw1p1 capture register sucessfully! [hawkview_dbg]hawkview_init 2 [hawkview_dbg]video pthread_create ret:0 [hawkview_dbg]video thread status 0 --> 101 [hawkview_dbg]command pthread_create ret:0 (等待输入需要获取的YUV图片的分辨率:) [hawkview_dbg]read cmd [ 181.303764] [VFE]vfe_open 146:0:1:1600x1200# [hawkview_[ 181.308582] [VFE]..........................vfe clk open!....................... dbg]cmd 0: 146 [hawkview_dbg]cm[ 181.319592] [VFE]vfe_open ok d 1: 0 [hawkview_dbg]cmd 2: 1 [hawkview_dbg]cmd 3: 1600 [hawkview_dbg]cmd 4: 1200 [hawkview_dbg]send command 146 [hawkview_dbg]video thread cmd: 0 --> 146 [hawkview_dbg]reset video capture [hawkview_msg]----open /dev/video0 [hawkview_msg]----get sensor type: 0 [ 182.325602] [VFE_ERR]set input i(1)>dev_qty(1)-1 error! [hawkview_err]xxxxVIDIOC_S_INPUT[ 182.331594] [VFE]Set vfe core clk = 108000000, after Set vfe core clk = 99000000 failed! s_input: 1 [ 182.366903] [VFE]mclk on [ 182.393862] [CSI][GC2145]enable oe! [ 182.398584] [CSI][GC2145]V4L2_IDENT_SENSOR=2145[hawkview_msg]----the tried size [ 182.875861] [VFE]buffer_setup, buffer count=10, size=2884096 is 1600x1200,the supported size is 1600x1200! [hawkview_dbg]map buffer index: 0, mem: b6bc8000, len: 2c0200, offset: 0 [hawkview_dbg]map buffer index: 1, mem: b6907000, len: 2c0200, offset: 2c1000 [hawkview_dbg]map buffer index: 2, mem: b6646000, len: 2c0200, offset: 582000 [hawkview_dbg]map buffer index: 3, mem: b6385000, len: 2c0200, offset: 843000 [hawkview_dbg]map buffer index: 4, mem: b60c4000, len: 2c0200, offset: b04000 [hawkview_dbg]map buffer index: 5, mem: b5e03000, len: 2c0200, offset: dc5000 [hawkview_dbg]map buffer index: 6, mem: b5b42000, len: 2c0200, offset: 1086000 [hawkview_dbg]map buffer index: 7, mem: b5881000, len: 2c0200, offset: 1347000 [hawkview_dbg]map buffer index: 8, mem: b55c0000, len: 2c0200, offset: 1608000 [hawkview_dbg]map buffer index: 9, mem: b52ff000, len: 2c0200, offset: 18c9000 [hawkview_dbg]video thread status 101 --> 102 [hawkview_dbg]capture frame command -1 --> 161 [hawkview_dbg]capture frame status -1 --> 0 [hawkview_dbg]capture start streaming [hawkview_dbg]capture frame command 161 --> 0 [hawkview_dbg]capture frame status 0 --> 1 [ 183.030025] [VFE]capture video mode! [ 183.132659] [VFE]capture video first frame done! (等待输入希望获取的YUV图片的文件名:) [hawkview_dbg]read cmd 149:color1013.yuv# [hawkview_dbg]cmd 0: 149 [hawkview_dbg]cmd 1: color1013.yuv [hawkview_dbg]send command 149 [hawkview_dbg]index: 3 buffers[buf.index].start = 0xb6385000 [hawkview_dbg]image_name: /tmp/color1013.yuv [hawkview_err]xxxxOpen sync file error[hawkview_dbg]image exif info: image_name = color1013.yuv width = 1600 height = 1200 exp_time_num = 0 exp_time_den = 0 sht_speed_num = 0 sht_speed_den = 0 fnumber = 0 exp_bias = 0 foc_length = 0 iso_speed = 0 flash_fire = 0 brightness = 0 # [hawkview_dbg]--------set_exif_info end (全志没有设置结束按键,只有按ctrl+C组合按键结束程序) ^C[ 270.859423] [VFE]vfe_close [ 270.862589] [CSI][GC2145]disalbe oe! [ 270.878791] [VFE]mclk off [ 270.893865] [VFE]..........................vfe clk close!....................... [ 270.902299] [VFE]vfe_close end root@TinaLinux:/# 8、在电脑的命令行中使用adb shell: Microsoft Windows [版本 6.1.7600] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 C:\Users\Administrator>adb shell BusyBox v1.24.1 () built-in shell (ash) _____ _ __ _ |_ _||_| ___ _ _ | | |_| ___ _ _ _ _ | | _ | || | | |__ | || || | ||_'_| | | | || | || _ | |_____||_||_|_||___||_,_| |_| |_||_|_||_|_| Tina is Based on OpenWrt! ---------------------------------------------- Tina Linux (Neptune, 57513AA3) ---------------------------------------------- root@TinaLinux:/# cd tmp cd tmp root@TinaLinux:/tmp# ll ll drwxrwxrwt 9 root root 300 Jan 2 20:15 . drwxr-xr-x 1 root root 1024 Jan 2 20:15 .. drwx------ 2 root root 40 Jan 2 20:15 .uci -rw-r--r-- 1 root root 6 Jan 2 20:15 TZ -rw-r--r-- 1 root root 5 Jan 2 20:15 booting_state drwxrwxrwx 2 root root 40 Jan 2 20:15 lock drwxr-xr-x 2 root root 80 Jan 2 20:15 log lrwxrwxrwx 1 root root 21 Jan 2 20:15 resolv.conf -> /tmp/res olv.conf.auto -rw-r--r-- 1 root root 0 Jan 2 20:15 resolv.conf.auto drwxrwxrwx 2 root root 100 Jan 2 20:15 run drwxrwxrwt 2 root root 40 Jan 2 20:15 shm drwxrwxrwx 2 root root 60 Jan 2 20:15 state drwxr-xr-x 2 root root 40 Jan 2 20:15 tmp srwxr-xr-x 1 root root 0 Jan 2 20:15 wpa_ctrl_254-32 srwxr-xr-x 1 root root 0 Jan 2 20:15 wpa_ctrl_254-33 root@TinaLinux:/tmp# root@TinaLinux:/tmp# (1600x1200为您所希望获取的图片的分辨率,请根据您的需要来设置) root@TinaLinux:/tmp# echo "146:0:1:1600x1200#" > command echo "146:0:1:1600x1200#" > command (color1013.yuv为您希望保存yuv图像的文件名) root@TinaLinux:/tmp# echo "149:color1013.yuv#" > command echo "149:color1013.yuv#" > command root@TinaLinux:/tmp# ll ll drwxrwxrwt 9 root root 360 Jan 2 20:19 . drwxr-xr-x 1 root root 1024 Jan 2 20:15 .. drwx------ 2 root root 40 Jan 2 20:15 .uci -rw-r--r-- 1 root root 6 Jan 2 20:15 TZ -rw-r--r-- 1 root root 5 Jan 2 20:15 booting_state -rw-r--r-- 1 root root 1000 Jan 2 20:19 color1013.yuv.exif -rw-rw-rw- 1 root root 19 Jan 2 20:19 command drwxrwxrwx 2 root root 40 Jan 2 20:15 lock drwxr-xr-x 2 root root 80 Jan 2 20:15 log lrwxrwxrwx 1 root root 21 Jan 2 20:15 resolv.conf -> /tmp/res olv.conf.auto -rw-r--r-- 1 root root 0 Jan 2 20:15 resolv.conf.auto drwxrwxrwx 2 root root 100 Jan 2 20:15 run drwxrwxrwt 2 root root 40 Jan 2 20:15 shm drwxrwxrwx 2 root root 60 Jan 2 20:15 state drwxr-xr-x 2 root root 40 Jan 2 20:15 tmp srwxr-xr-x 1 root root 0 Jan 2 20:15 wpa_ctrl_254-32 srwxr-xr-x 1 root root 0 Jan 2 20:15 wpa_ctrl_254-33 -rw-r--r-- 1 root root 2880000 Jan 2 20:19 yuvcolor1013.yuv 可以再开一个adb窗口,adb可以开很多个的^_ Microsoft Windows [版本 6.1.7600] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 C:\Users\Administrator>cd C:\tmp_gc2145 C:\tmp_gc2145>dir 驱动器 C 中的卷是 WIN7B64 卷的序列号是 C43E-FFB3 C:\tmp_gc2145 的目录 2017/05/23 17:04 . 2017/05/23 17:04 .. 0 个文件 0 字节 2 个目录 21,963,571,200 可用字节 获取图片:(这里使用了简单粗暴的方法,全部拿出来了。) C:\tmp_gc2145>adb pull /tmp/ . pull: building file list... skipping special file 'wpa_ctrl_254-33' skipping special file 'wpa_ctrl_254-32' skipping special file 'resolv.conf' skipping special file 'ubus.sock' pull: /tmp/log/wtmp -> ./log/wtmp pull: /tmp/log/lastlog -> ./log/lastlog pull: /tmp/state/network -> ./state/network pull: /tmp/run/config.md5 -> ./run/config.md5 pull: /tmp/run/ntpd.pid -> ./run/ntpd.pid pull: /tmp/booting_state -> ./booting_state pull: /tmp/resolv.conf.auto -> ./resolv.conf.auto pull: /tmp/TZ -> ./TZ pull: /tmp/command -> ./command pull: /tmp/color1013.yuv.exif -> ./color1013.yuv.exif pull: /tmp/yuvcolor1013.yuv -> ./yuvcolor1013.yuv 11 files pulled. 0 files skipped. 8820 KB/s (2881342 bytes in 0.319s) C:\tmp_gc2145> (可选操作:) C:\tmp_gc2145>adb pull /tmp/yuvcolor1013.yuv c:\ 现在激动人心的时刻到来了,你可以使用yuv看图工具:yuvplayer.exe 来查看你所获取的YUV格式的图片:yuvtest1013.yuv 请注意需要设置: YUV的格式设置:(NV12) 分辨率设置(1600x1200):请以您的实际分辨率为准。 9、可能会用到的调试命令: dmesg ps -aux ps -e 10、可选的改进(可以不修改的): R:\wyb\gc2145_tinav2.1\target\allwinner\generic\configs\env-3.4.cfg (uboot启动的时候延迟3秒钟) bootdelay=3 (SDK中已经修改了。调低打印等级,以便尽可能多的看到打印信息) loglevel=8
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值