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 = ;  
  6.     pwr_active = ;  
  7.     mir = <0>;  
  8.     flash_attach = <0>;  
  9.     resolution = ;  
  10.     powerup_sequence = ;  
  11.     orientation = <0>;  
  12.     i2c_add = ;  
  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           // [email protected]:  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,      /* [email protected] : 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


你可能感兴趣的:(rk3288公板添加gc2145驱动)