rk3288公板添加gc2145驱动
来源:互联网 发布:sql中in怎么优化 编辑:程序博客网 时间:2024/05/23 15:00
平台:瑞芯的rk3288
SDK:5.0
camera: gc2145
作者:fulinux
笔记用内容,可能不全
*****本文允许转载,不过请注明出处:http://blog.csdn.net/fulinus****
在arch/arm/boot/dts/rk3288-cif-sensor.dtsi文件中添加如下内容:
gc2145{ is_front = <0>; rockchip,power = <&gpio0 GPIO_C1 GPIO_ACTIVE_HIGH>; rockchip,powerdown = <&gpio2 GPIO_B7 GPIO_ACTIVE_HIGH>; pwdn_active = <gc2145_PWRDN_ACTIVE>; pwr_active = <PWR_ACTIVE_HIGH>; mir = <0>; flash_attach = <0>; resolution = <gc2145_FULL_RESOLUTION>; powerup_sequence = <gc2145_PWRSEQ>; orientation = <0>; i2c_add = <gc2145_I2C_ADDR>; i2c_rata = <100000>; i2c_chl = <3>; cif_chl = <0>; mclk_rate = <24>; };同时在arch/arm/mach-rockchip/rk_camera_sensor_info.h文件中添加如下内容(patch内容,“+”对应的内容):
#define RK29_CAM_SENSOR_GC0328 gc0328 #define RK29_CAM_SENSOR_GC0329 gc0329 #define RK29_CAM_SENSOR_GC2035 gc2035+#define RK29_CAM_SENSOR_GC2145 gc2145 #define RK29_CAM_SENSOR_SIV120B siv120b #define RK29_CAM_SENSOR_SIV121D siv121d #define RK29_CAM_SENSOR_SID130B sid130B@@ -70,6 +71,7 @@ #define RK29_CAM_SENSOR_NAME_GC2015 "gc2015" #define RK29_CAM_SENSOR_NAME_GC0328 "gc0328" #define RK29_CAM_SENSOR_NAME_GC2035 "gc2035"+#define RK29_CAM_SENSOR_NAME_GC2145 "gc2145" #define RK29_CAM_SENSOR_NAME_GC0329 "gc0329" #define RK29_CAM_SENSOR_NAME_SIV120B "siv120b" #define RK29_CAM_SENSOR_NAME_SIV121D "siv121d"@@ -147,6 +149,7 @@ #define s5k5ca_FULL_RESOLUTION 0x300000 // 3 megapixel #define mtk9335isp_FULL_RESOLUTION 0x500000 //5 megapixel #define gc2035_FULL_RESOLUTION 0x200000 // 2 megapixel+#define gc2145_FULL_RESOLUTION 0x200000 // 2 megapixel #define hm2057_FULL_RESOLUTION 0x200000 // 2 megapixel #define hm5065_FULL_RESOLUTION 0x500000 // 5 megapixel #define nt99160_FULL_RESOLUTION 0x100000 // oyyf@rock-chips.com: 1 megapixel 1280*720 @@ -187,6 +190,7 @@ #define gc0329_I2C_ADDR 0x62 #define gc2015_I2C_ADDR 0x60 #define gc2035_I2C_ADDR 0x78 +#define gc2145_I2C_ADDR 0x78 #define siv120b_I2C_ADDR INVALID_VALUE #define siv121d_I2C_ADDR INVALID_VALUE @@ -247,6 +251,7 @@ #define gc0329_PWRDN_ACTIVE 0x01 #define gc2015_PWRDN_ACTIVE 0x01 #define gc2035_PWRDN_ACTIVE 0x01 +#define gc2145_PWRDN_ACTIVE 0x01 #define siv120b_PWRDN_ACTIVE INVALID_VALUE #define siv121d_PWRDN_ACTIVE INVALID_VALUE @@ -319,6 +324,7 @@ #define gc0329_PWRSEQ sensor_PWRSEQ_DEFAULT #define gc2015_PWRSEQ sensor_PWRSEQ_DEFAULT #define gc2035_PWRSEQ sensor_PWRSEQ_DEFAULT +#define gc2145_PWRSEQ sensor_PWRSEQ_DEFAULT #define siv120b_PWRSEQ sensor_PWRSEQ_DEFAULT #define siv121d_PWRSEQ sensor_PWRSEQ_DEFAULT
添加驱动文件drivers/media/video/gc2035.c:
#include "generic_sensor.h"/** Driver Version Note*v0.0.1: this driver is compatible with generic_sensor*v0.0.3:* add sensor_focus_af_const_pause_usr_cb;*/static int version = KERNEL_VERSION(0,0,3);module_param(version, int, S_IRUGO);static int debug;module_param(debug, int, S_IRUGO|S_IWUSR);#define dprintk(level, fmt, arg...) do { \ if (debug >= level) \ printk(KERN_WARNING fmt , ## arg); } while (0)/* Sensor Driver Configuration Begin */#define SENSOR_NAME RK29_CAM_SENSOR_GC2145#define SENSOR_V4L2_IDENT V4L2_IDENT_GC2145#define SENSOR_BUS_PARAM (V4L2_MBUS_MASTER | V4L2_MBUS_PCLK_SAMPLE_RISING | \ V4L2_MBUS_HSYNC_ACTIVE_HIGH | V4L2_MBUS_VSYNC_ACTIVE_HIGH | \ V4L2_MBUS_DATA_ACTIVE_HIGH |SOCAM_MCLK_24MHZ)#define SENSOR_ID 0x2145#define SENSOR_PREVIEW_W 800#define SENSOR_PREVIEW_H 600#define SENSOR_PREVIEW_FPS 15000 // 15fps #define SENSOR_FULLRES_L_FPS 7500 // 7.5fps#define SENSOR_FULLRES_H_FPS 7500 // 7.5fps#define SENSOR_720P_FPS 15000#define SENSOR_1080P_FPS 0#define SENSOR_REGISTER_LEN 1 // sensor register address bytes#define SENSOR_VALUE_LEN 1 // sensor register value bytesstatic unsigned int SensorConfiguration = (CFG_WhiteBalance|CFG_Effect|CFG_Scene);static unsigned int SensorChipID[] = {SENSOR_ID};/* Sensor Driver Configuration End */#define SENSOR_NAME_STRING(a) STR(CONS(SENSOR_NAME, a))#define SENSOR_NAME_VARFUN(a) CONS(SENSOR_NAME, a)#define SensorRegVal(a,b) CONS4(SensorReg,SENSOR_REGISTER_LEN,Val,SENSOR_VALUE_LEN)(a,b)#define sensor_write(client,reg,v) CONS4(sensor_write_reg,SENSOR_REGISTER_LEN,val,SENSOR_VALUE_LEN)(client,(reg),(v))#define sensor_read(client,reg,v) CONS4(sensor_read_reg,SENSOR_REGISTER_LEN,val,SENSOR_VALUE_LEN)(client,(reg),(v))#define sensor_write_array generic_sensor_write_arraystruct sensor_parameter{ unsigned int PreviewDummyPixels; unsigned int CaptureDummyPixels; unsigned int preview_exposure; unsigned short int preview_line_width; unsigned short int preview_gain; unsigned short int PreviewPclk; unsigned short int CapturePclk; char awb[6];};struct specific_sensor{ struct generic_sensor common_sensor; //define user data below struct sensor_parameter parameter; u16 shutter;};/** The follow setting need been filled.* * Must Filled:* sensor_init_data : Sensor initial setting;* sensor_fullres_lowfps_data : Sensor full resolution setting with best auality, recommand for video;* sensor_preview_data : Sensor preview resolution setting, recommand it is vga or svga;* sensor_softreset_data : Sensor software reset register;* sensor_check_id_data : Sensir chip id register;** Optional filled:* sensor_fullres_highfps_data: Sensor full resolution setting with high framerate, recommand for video;* sensor_720p: Sensor 720p setting, it is for video;* sensor_1080p: Sensor 1080p setting, it is for video;** :::::WARNING:::::* The SensorEnd which is the setting end flag must be filled int the last of each setting;*//* Sensor initial setting */static struct rk_sensor_reg sensor_init_data[] ={ //SENSORDB("GC2145_Sensor_Init"}, {0xfe , 0xf0}, {0xfe , 0xf0}, {0xfe , 0xf0}, {0xfc , 0x06}, {0xf6 , 0x00}, {0xf7 , 0x1d}, {0xf8 , 0x84}, {0xfa , 0x00}, {0xf9 , 0xfe}, {0xf2 , 0x00}, ///////////////////////////////////////////////// //////////////////ISP reg////////////////////// //////////////////////////////////////////////////// {0xfe , 0x00}, {0x03 , 0x04}, {0x04 , 0xe2}, {0x09 , 0x00}, {0x0a , 0x00}, {0x0b , 0x00}, {0x0c , 0x00}, {0x0d , 0x04}, {0x0e , 0xc0}, {0x0f , 0x06}, {0x10 , 0x52}, {0x12 , 0x2e}, {0x17 , 0x14}, //mirror {0x18 , 0x22}, {0x19 , 0x0e}, {0x1a , 0x01}, {0x1b , 0x4b}, {0x1c , 0x07}, {0x1d , 0x10}, {0x1e , 0x88}, {0x1f , 0x78}, {0x20 , 0x03}, {0x21 , 0x40}, {0x22 , 0xa0}, {0x24 , 0x16}, {0x25 , 0x01}, {0x26 , 0x10}, {0x2d , 0x60}, {0x30 , 0x01}, {0x31 , 0x90}, {0x33 , 0x06}, {0x34 , 0x01}, ///////////////////////////////////////////////// //////////////////ISP reg//////////////////// ///////////////////////////////////////////////// {0xfe , 0x00}, {0x80 , 0x7f}, {0x81 , 0x26}, {0x82 , 0xfa}, {0x83 , 0x00}, {0x84 , 0x00}, {0x86 , 0x02}, {0x88 , 0x03}, {0x89 , 0x03}, {0x85 , 0x08}, {0x8a , 0x00}, {0x8b , 0x00}, {0xb0 , 0x55}, {0xc3 , 0x00}, {0xc4 , 0x80}, {0xc5 , 0x90}, {0xc6 , 0x3b}, {0xc7 , 0x46}, {0xec , 0x06}, {0xed , 0x04}, {0xee , 0x60}, {0xef , 0x90}, {0xb6 , 0x01}, {0x90 , 0x01}, {0x91 , 0x00}, {0x92 , 0x00}, {0x93 , 0x00}, {0x94 , 0x00}, {0x95 , 0x04}, {0x96 , 0xb0}, {0x97 , 0x06}, {0x98 , 0x40}, ///////////////////////////////////////// /////////// BLK //////////////////////// ///////////////////////////////////////// {0xfe , 0x00}, {0x40 , 0x42}, {0x41 , 0x00}, {0x43 , 0x5b}, {0x5e , 0x00}, {0x5f , 0x00}, {0x60 , 0x00}, {0x61 , 0x00}, {0x62 , 0x00}, {0x63 , 0x00}, {0x64 , 0x00}, {0x65 , 0x00}, {0x66 , 0x20}, {0x67 , 0x20}, {0x68 , 0x20}, {0x69 , 0x20}, {0x76 , 0x00}, {0x6a , 0x08}, {0x6b , 0x08}, {0x6c , 0x08}, {0x6d , 0x08}, {0x6e , 0x08}, {0x6f , 0x08}, {0x70 , 0x08}, {0x71 , 0x08}, {0x76 , 0x00}, {0x72 , 0xf0}, {0x7e , 0x3c}, {0x7f , 0x00}, {0xfe , 0x02}, {0x48 , 0x15}, {0x49 , 0x00}, {0x4b , 0x0b}, {0xfe , 0x00}, //////////////////////////////////////// /////////// AEC //////////////////////// //////////////////////////////////////// {0xfe , 0x01}, {0x01 , 0x04}, {0x02 , 0xc0}, {0x03 , 0x04}, {0x04 , 0x90}, {0x05 , 0x30}, {0x06 , 0x90}, {0x07 , 0x30}, {0x08 , 0x80}, {0x09 , 0x00}, {0x0a , 0x82}, {0x0b , 0x11}, {0x0c , 0x10}, {0x11 , 0x10}, {0x13 , 0x7b}, {0x17 , 0x00}, {0x1c , 0x11}, {0x1e , 0x61}, {0x1f , 0x35}, {0x20 , 0x40}, {0x22 , 0x40}, {0x23 , 0x20}, {0xfe , 0x02}, {0x0f , 0x04}, {0xfe , 0x01}, {0x12 , 0x35}, {0x15 , 0xb0}, {0x10 , 0x31}, {0x3e , 0x28}, {0x3f , 0xb0}, {0x40 , 0x90}, {0x41 , 0x0f}, ///////////////////////////// //////// INTPEE ///////////// ///////////////////////////// {0xfe , 0x02}, {0x90 , 0x6c}, {0x91 , 0x03}, {0x92 , 0xcb}, {0x94 , 0x33}, {0x95 , 0x84}, {0x97 , 0x65}, {0xa2 , 0x11}, {0xfe , 0x00}, ///////////////////////////// //////// DNDD/////////////// ///////////////////////////// {0xfe , 0x02}, {0x80 , 0xc1}, {0x81 , 0x08}, {0x82 , 0x05}, {0x83 , 0x08}, {0x84 , 0x0a}, {0x86 , 0xf0}, {0x87 , 0x50}, {0x88 , 0x15}, {0x89 , 0xb0}, {0x8a , 0x30}, {0x8b , 0x10}, ///////////////////////////////////////// /////////// ASDE //////////////////////// ///////////////////////////////////////// {0xfe , 0x01}, {0x21 , 0x04}, {0xfe , 0x02}, {0xa3 , 0x50}, {0xa4 , 0x20}, {0xa5 , 0x40}, {0xa6 , 0x80}, {0xab , 0x40}, {0xae , 0x0c}, {0xb3 , 0x46}, {0xb4 , 0x64}, {0xb6 , 0x38}, {0xb7 , 0x01}, {0xb9 , 0x2b}, {0x3c , 0x04}, {0x3d , 0x15}, {0x4b , 0x06}, {0x4c , 0x20}, {0xfe , 0x00}, ///////////////////////////////////////// /////////// GAMMA //////////////////////// ///////////////////////////////////////// ///////////////////gamma1////////////////////#if 1 {0xfe , 0x02}, {0x10 , 0x09}, {0x11 , 0x0d}, {0x12 , 0x13}, {0x13 , 0x19}, {0x14 , 0x27}, {0x15 , 0x37}, {0x16 , 0x45}, {0x17 , 0x53}, {0x18 , 0x69}, {0x19 , 0x7d}, {0x1a , 0x8f}, {0x1b , 0x9d}, {0x1c , 0xa9}, {0x1d , 0xbd}, {0x1e , 0xcd}, {0x1f , 0xd9}, {0x20 , 0xe3}, {0x21 , 0xea}, {0x22 , 0xef}, {0x23 , 0xf5}, {0x24 , 0xf9}, {0x25 , 0xff},#else {0xfe , 0x02}, {0x10 , 0x0a}, {0x11 , 0x12}, {0x12 , 0x19}, {0x13 , 0x1f}, {0x14 , 0x2c}, {0x15 , 0x38}, {0x16 , 0x42}, {0x17 , 0x4e}, {0x18 , 0x63}, {0x19 , 0x76}, {0x1a , 0x87}, {0x1b , 0x96}, {0x1c , 0xa2}, {0x1d , 0xb8}, {0x1e , 0xcb}, {0x1f , 0xd8}, {0x20 , 0xe2}, {0x21 , 0xe9}, {0x22 , 0xf0}, {0x23 , 0xf8}, {0x24 , 0xfd}, {0x25 , 0xff}, {0xfe , 0x00}, #endif {0xfe , 0x00}, {0xc6 , 0x20}, {0xc7 , 0x2b}, ///////////////////gamma2////////////////////#if 1 {0xfe , 0x02}, {0x26 , 0x0f}, {0x27 , 0x14}, {0x28 , 0x19}, {0x29 , 0x1e}, {0x2a , 0x27}, {0x2b , 0x33}, {0x2c , 0x3b}, {0x2d , 0x45}, {0x2e , 0x59}, {0x2f , 0x69}, {0x30 , 0x7c}, {0x31 , 0x89}, {0x32 , 0x98}, {0x33 , 0xae}, {0x34 , 0xc0}, {0x35 , 0xcf}, {0x36 , 0xda}, {0x37 , 0xe2}, {0x38 , 0xe9}, {0x39 , 0xf3}, {0x3a , 0xf9}, {0x3b , 0xff},#else ////Gamma outdoor {0xfe , 0x02}, {0x26 , 0x17}, {0x27 , 0x18}, {0x28 , 0x1c}, {0x29 , 0x20}, {0x2a , 0x28}, {0x2b , 0x34}, {0x2c , 0x40}, {0x2d , 0x49}, {0x2e , 0x5b}, {0x2f , 0x6d}, {0x30 , 0x7d}, {0x31 , 0x89}, {0x32 , 0x97}, {0x33 , 0xac}, {0x34 , 0xc0}, {0x35 , 0xcf}, {0x36 , 0xda}, {0x37 , 0xe5}, {0x38 , 0xec}, {0x39 , 0xf8}, {0x3a , 0xfd}, {0x3b , 0xff},#endif /////////////////////////////////////////////// ///////////YCP /////////////////////// /////////////////////////////////////////////// {0xfe , 0x02}, {0xd1 , 0x32}, {0xd2 , 0x32}, {0xd3 , 0x40}, {0xd6 , 0xf0}, {0xd7 , 0x10}, {0xd8 , 0xda}, {0xdd , 0x14}, {0xde , 0x86}, {0xed , 0x80}, {0xee , 0x00}, {0xef , 0x3f}, {0xd8 , 0xd8}, ///////////////////abs///////////////// {0xfe , 0x01}, {0x9f , 0x40}, ///////////////////////////////////////////// //////////////////////// LSC /////////////// ////////////////////////////////////////// {0xfe , 0x01}, {0xc2 , 0x14}, {0xc3 , 0x0d}, {0xc4 , 0x0c}, {0xc8 , 0x15}, {0xc9 , 0x0d}, {0xca , 0x0a}, {0xbc , 0x24}, {0xbd , 0x10}, {0xbe , 0x0b}, {0xb6 , 0x25}, {0xb7 , 0x16}, {0xb8 , 0x15}, {0xc5 , 0x00}, {0xc6 , 0x00}, {0xc7 , 0x00}, {0xcb , 0x00}, {0xcc , 0x00}, {0xcd , 0x00}, {0xbf , 0x07}, {0xc0 , 0x00}, {0xc1 , 0x00}, {0xb9 , 0x00}, {0xba , 0x00}, {0xbb , 0x00}, {0xaa , 0x01}, {0xab , 0x01}, {0xac , 0x00}, {0xad , 0x05}, {0xae , 0x06}, {0xaf , 0x0e}, {0xb0 , 0x0b}, {0xb1 , 0x07}, {0xb2 , 0x06}, {0xb3 , 0x17}, {0xb4 , 0x0e}, {0xb5 , 0x0e}, {0xd0 , 0x09}, {0xd1 , 0x00}, {0xd2 , 0x00}, {0xd6 , 0x08}, {0xd7 , 0x00}, {0xd8 , 0x00}, {0xd9 , 0x00}, {0xda , 0x00}, {0xdb , 0x00}, {0xd3 , 0x0a}, {0xd4 , 0x00}, {0xd5 , 0x00}, {0xa4 , 0x00}, {0xa5 , 0x00}, {0xa6 , 0x77}, {0xa7 , 0x77}, {0xa8 , 0x77}, {0xa9 , 0x77}, {0xa1 , 0x80}, {0xa2 , 0x80}, {0xfe , 0x01}, {0xdf , 0x0d}, {0xdc , 0x25}, {0xdd , 0x30}, {0xe0 , 0x77}, {0xe1 , 0x80}, {0xe2 , 0x77}, {0xe3 , 0x90}, {0xe6 , 0x90}, {0xe7 , 0xa0}, {0xe8 , 0x90}, {0xe9 , 0xa0}, {0xfe , 0x00}, /////////////////////////////////////////////// /////////// AWB//////////////////////// /////////////////////////////////////////////// {0xfe , 0x01}, {0x4f , 0x00}, {0x4f , 0x00}, {0x4b , 0x01}, {0x4f , 0x00}, {0x4c , 0x01}, // D75 {0x4d , 0x71}, {0x4e , 0x01}, {0x4c , 0x01}, {0x4d , 0x91}, {0x4e , 0x01}, {0x4c , 0x01}, {0x4d , 0x70}, {0x4e , 0x01}, {0x4c , 0x01}, // D65 {0x4d , 0x90}, {0x4e , 0x02}, {0x4c , 0x01}, {0x4d , 0xb0}, {0x4e , 0x02}, {0x4c , 0x01}, {0x4d , 0x8f}, {0x4e , 0x02}, {0x4c , 0x01}, {0x4d , 0x6f}, {0x4e , 0x02}, {0x4c , 0x01}, {0x4d , 0xaf}, {0x4e , 0x02}, {0x4c , 0x01}, {0x4d , 0xd0}, {0x4e , 0x02}, {0x4c , 0x01}, {0x4d , 0xf0}, {0x4e , 0x02}, {0x4c , 0x01}, {0x4d , 0xcf}, {0x4e , 0x02}, {0x4c , 0x01}, {0x4d , 0xef}, {0x4e , 0x02}, {0x4c , 0x01},//D50 {0x4d , 0x6e}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x8e}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0xae}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0xce}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x4d}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x6d}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x8d}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0xad}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0xcd}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x4c}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x6c}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x8c}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0xac}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0xcc}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0xcb}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x4b}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x6b}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0x8b}, {0x4e , 0x03}, {0x4c , 0x01}, {0x4d , 0xab}, {0x4e , 0x03}, {0x4c , 0x01},//CWF {0x4d , 0x8a}, {0x4e , 0x04}, {0x4c , 0x01}, {0x4d , 0xaa}, {0x4e , 0x04}, {0x4c , 0x01}, {0x4d , 0xca}, {0x4e , 0x04}, {0x4c , 0x01}, {0x4d , 0xca}, {0x4e , 0x04}, {0x4c , 0x01}, {0x4d , 0xc9}, {0x4e , 0x04}, {0x4c , 0x01}, {0x4d , 0x8a}, {0x4e , 0x04}, {0x4c , 0x01}, {0x4d , 0x89}, {0x4e , 0x04}, {0x4c , 0x01}, {0x4d , 0xa9}, {0x4e , 0x04}, {0x4c , 0x02},//tl84 {0x4d , 0x0b}, {0x4e , 0x05}, {0x4c , 0x02}, {0x4d , 0x0a}, {0x4e , 0x05}, {0x4c , 0x01}, {0x4d , 0xeb}, {0x4e , 0x05}, {0x4c , 0x01}, {0x4d , 0xea}, {0x4e , 0x05}, {0x4c , 0x02}, {0x4d , 0x09}, {0x4e , 0x05}, {0x4c , 0x02}, {0x4d , 0x29}, {0x4e , 0x05}, {0x4c , 0x02}, {0x4d , 0x2a}, {0x4e , 0x05}, {0x4c , 0x02}, {0x4d , 0x4a}, {0x4e , 0x05}, //{0x4c , 0x02}, //A //{0x4d , 0x6a}, //{0x4e , 0x06}, {0x4c , 0x02}, {0x4d , 0x8a}, {0x4e , 0x06}, {0x4c , 0x02}, {0x4d , 0x49}, {0x4e , 0x06}, {0x4c , 0x02}, {0x4d , 0x69}, {0x4e , 0x06}, {0x4c , 0x02}, {0x4d , 0x89}, {0x4e , 0x06}, {0x4c , 0x02}, {0x4d , 0xa9}, {0x4e , 0x06}, {0x4c , 0x02}, {0x4d , 0x48}, {0x4e , 0x06}, {0x4c , 0x02}, {0x4d , 0x68}, {0x4e , 0x06}, {0x4c , 0x02}, {0x4d , 0x69}, {0x4e , 0x06}, {0x4c , 0x02},//H {0x4d , 0xca}, {0x4e , 0x07}, {0x4c , 0x02}, {0x4d , 0xc9}, {0x4e , 0x07}, {0x4c , 0x02}, {0x4d , 0xe9}, {0x4e , 0x07}, {0x4c , 0x03}, {0x4d , 0x09}, {0x4e , 0x07}, {0x4c , 0x02}, {0x4d , 0xc8}, {0x4e , 0x07}, {0x4c , 0x02}, {0x4d , 0xe8}, {0x4e , 0x07}, {0x4c , 0x02}, {0x4d , 0xa7}, {0x4e , 0x07}, {0x4c , 0x02}, {0x4d , 0xc7}, {0x4e , 0x07}, {0x4c , 0x02}, {0x4d , 0xe7}, {0x4e , 0x07}, {0x4c , 0x03}, {0x4d , 0x07}, {0x4e , 0x07}, {0x4f , 0x01}, {0x50 , 0x80}, {0x51 , 0xa8}, {0x52 , 0x47}, {0x53 , 0x38}, {0x54 , 0xc7}, {0x56 , 0x0e}, {0x58 , 0x08}, {0x5b , 0x00}, {0x5c , 0x74}, {0x5d , 0x8b}, {0x61 , 0xdb}, {0x62 , 0xb8}, {0x63 , 0x86}, {0x64 , 0xc0}, {0x65 , 0x04}, {0x67 , 0xa8}, {0x68 , 0xb0}, {0x69 , 0x00}, {0x6a , 0xa8}, {0x6b , 0xb0}, {0x6c , 0xaf}, {0x6d , 0x8b}, {0x6e , 0x50}, {0x6f , 0x18}, {0x73 , 0xf0}, {0x70 , 0x0d}, {0x71 , 0x60}, {0x72 , 0x80}, {0x74 , 0x01}, {0x75 , 0x01}, {0x7f , 0x0c}, {0x76 , 0x70}, {0x77 , 0x58}, {0x78 , 0xa0}, {0x79 , 0x5e}, {0x7a , 0x54}, {0x7b , 0x58}, {0xfe , 0x00}, ////////////////////////////////////////// ///////////CC//////////////////////// ////////////////////////////////////////// {0xfe , 0x02}, {0xc0 , 0x01}, {0xc1 , 0x44}, {0xc2 , 0xfd}, {0xc3 , 0x04}, {0xc4 , 0xF0}, {0xc5 , 0x48}, {0xc6 , 0xfd}, {0xc7 , 0x46}, {0xc8 , 0xfd}, {0xc9 , 0x02}, {0xca , 0xe0}, {0xcb , 0x45}, {0xcc , 0xec}, {0xcd , 0x48}, {0xce , 0xf0}, {0xcf , 0xf0}, {0xe3 , 0x0c}, {0xe4 , 0x4b}, {0xe5 , 0xe0}, ////////////////////////////////////////// ///////////ABS //////////////////// ////////////////////////////////////////// {0xfe , 0x01}, {0x9f , 0x40}, {0xfe , 0x00}, ////////////////////////////////////// /////////// OUTPUT //////////////// ////////////////////////////////////// {0xfe, 0x00}, {0xf2, 0x0f}, ///////////////dark sun//////////////////// {0xfe , 0x02}, {0x40 , 0xbf}, {0x46 , 0xcf}, {0xfe , 0x00}, //////////////frame rate 50Hz///////// {0xfe , 0x00}, {0x05 , 0x01}, {0x06 , 0x56}, {0x07 , 0x00}, {0x08 , 0x32}, {0xfe , 0x01}, {0x25 , 0x00}, {0x26 , 0xfa}, {0x27 , 0x04}, {0x28 , 0xe2}, //20fps {0x29 , 0x06}, {0x2a , 0xd6}, //14fps {0x2b , 0x07}, {0x2c , 0xd0}, //12fps {0x2d , 0x0b}, {0x2e , 0xb8}, //8fps {0xfe , 0x00}, //SENSORDB("GC2145_Sensor_SVGA"}, {0xfe, 0x00}, {0xfd, 0x01}, {0xfa, 0x00}, //// crop window {0xfe, 0x00}, {0x90, 0x01}, {0x91, 0x00}, {0x92, 0x00}, {0x93, 0x00}, {0x94, 0x00}, {0x95, 0x02}, {0x96, 0x58}, {0x97, 0x03}, {0x98, 0x20}, {0x99, 0x11}, {0x9a, 0x06}, //// AWB {0xfe, 0x00}, {0xec, 0x02}, {0xed, 0x02}, {0xee, 0x30}, {0xef, 0x48}, {0xfe, 0x02}, {0x9d, 0x08}, {0xfe, 0x01}, {0x74, 0x00}, //// AEC {0xfe, 0x01}, {0x01, 0x04}, {0x02, 0x60}, {0x03, 0x02}, {0x04, 0x48}, {0x05, 0x18}, {0x06, 0x50}, {0x07, 0x10}, {0x08, 0x38}, {0x0a, 0x80}, {0x21, 0x04}, {0xfe, 0x00}, {0x20, 0x03}, {0xfe, 0x00}, SensorEnd };/* Senor full resolution setting: recommand for capture */static struct rk_sensor_reg sensor_fullres_lowfps_data[] ={ //SENSORDB("GC2145_Sensor_2M"}, {0xfe , 0x00}, {0xfd , 0x00}, {0xfa , 0x11}, //// crop window {0xfe , 0x00}, {0x90 , 0x01}, {0x91 , 0x00}, {0x92 , 0x00}, {0x93 , 0x00}, {0x94 , 0x00}, {0x95 , 0x04}, {0x96 , 0xb0}, {0x97 , 0x06}, {0x98 , 0x40}, {0x99 , 0x11}, {0x9a , 0x06}, //// AWB {0xfe , 0x00}, {0xec , 0x06}, {0xed , 0x04}, {0xee , 0x60}, {0xef , 0x90}, {0xfe , 0x01}, {0x74 , 0x01}, //// AEC {0xfe , 0x01}, {0x01 , 0x04}, {0x02 , 0xc0}, {0x03 , 0x04}, {0x04 , 0x90}, {0x05 , 0x30}, {0x06 , 0x90}, {0x07 , 0x30}, {0x08 , 0x80}, {0x0a , 0x82}, {0xfe , 0x01}, {0x21 , 0x15}, {0xfe , 0x00}, {0x20 , 0x15},//if 0xfa=11,then 0x21=15;else if 0xfa=00,then 0x21=04 {0xfe , 0x00}, SensorEnd };/* Senor full resolution setting: recommand for video */static struct rk_sensor_reg sensor_fullres_highfps_data[] ={ SensorEnd};/* Preview resolution setting*/static struct rk_sensor_reg sensor_preview_data[] ={ //SENSORDB("GC2145_Sensor_SVGA"}, {0xfe, 0x00}, {0xb6, 0x01}, {0xfd, 0x01}, {0xfa, 0x00}, //// crop window {0xfe, 0x00}, {0x90, 0x01}, {0x91, 0x00}, {0x92, 0x00}, {0x93, 0x00}, {0x94, 0x00}, {0x95, 0x02}, {0x96, 0x58}, {0x97, 0x03}, {0x98, 0x20}, {0x99, 0x11}, {0x9a, 0x06}, //// AWB {0xfe, 0x00}, {0xec, 0x02}, {0xed, 0x02}, {0xee, 0x30}, {0xef, 0x48}, {0xfe, 0x02}, {0x9d, 0x08}, {0xfe, 0x01}, {0x74, 0x00}, //// AEC {0xfe, 0x01}, {0x01, 0x04}, {0x02, 0x60}, {0x03, 0x02}, {0x04, 0x48}, {0x05, 0x18}, {0x06, 0x50}, {0x07, 0x10}, {0x08, 0x38}, {0x0a, 0x80}, {0x21, 0x04}, {0xfe, 0x00}, {0x20, 0x03}, {0xfe, 0x00}, SensorEnd };/* 1280x720 */static struct rk_sensor_reg sensor_720p[]={ #if 0 {0xfe , 0x00}, //{0xfa , 0x11}, {0xb6 , 0x01}, {0xfd , 0x00}, //// crop window {0xfe , 0x00}, {0x99 , 0x55}, {0x9a , 0x06}, {0x9b , 0x00}, {0x9c , 0x00}, {0x9d , 0x01}, {0x9e , 0x23}, {0x9f , 0x00}, {0xa0 , 0x00}, {0xa1 , 0x01}, {0xa2 ,0x23}, {0x90 , 0x01}, {0x91 , 0x00}, {0x92 , 0x78}, {0x93 , 0x00}, {0x94 , 0x00}, {0x95 , 0x02}, {0x96 , 0xd0}, {0x97 , 0x05}, {0x98 , 0x00}, //// AWB {0xfe , 0x00}, {0xec , 0x06}, {0xed , 0x04}, {0xee , 0x60}, {0xef , 0x90}, {0xfe , 0x01}, {0x74 , 0x01}, //// AEC {0xfe , 0x01}, {0x01 , 0x04}, {0x02 , 0xc0}, {0x03 , 0x04}, {0x04 , 0x90}, {0x05 , 0x30}, {0x06 , 0x90}, {0x07 , 0x30}, {0x08 , 0x80}, {0x0a , 0x82}, {0xfe , 0x01}, {0x21 , 0x15}, {0xfe , 0x00}, {0x20 , 0x15},//if 0xfa=11,then 0x21=15;else if 0xfa=00,then 0x21=04 {0xfe , 0x00}, #endif SensorEnd };/* 1920x1080 */static struct rk_sensor_reg sensor_1080p[]={ SensorEnd};static struct rk_sensor_reg sensor_softreset_data[]={ SensorRegVal(0xfe,80), SensorWaitMs(5), SensorEnd};static struct rk_sensor_reg sensor_check_id_data[]={ SensorRegVal(0xf0,0), SensorRegVal(0xf1,0), SensorEnd};/** The following setting must been filled, if the function is turn on by CONFIG_SENSOR_xxxx*/static struct rk_sensor_reg sensor_WhiteB_Auto[]={ {0xfe, 0x00}, {0xb3, 0x61}, {0xb4, 0x40}, {0xb5, 0x61}, {0x82, 0xfe}, SensorEnd};/* Cloudy Colour Temperature : 6500K - 8000K */static struct rk_sensor_reg sensor_WhiteB_Cloudy[]={ {0xfe, 0x00}, {0x82, 0xfc}, {0xb3, 0x58}, {0xb4, 0x40}, {0xb5, 0x50}, SensorEnd};/* ClearDay Colour Temperature : 5000K - 6500K */static struct rk_sensor_reg sensor_WhiteB_ClearDay[]={ //Sunny {0xfe, 0x00}, {0x82, 0xfc}, {0xb3, 0x70}, {0xb4, 0x40}, {0xb5, 0x50}, SensorEnd};/* Office Colour Temperature : 3500K - 5000K */static struct rk_sensor_reg sensor_WhiteB_TungstenLamp1[]={ //Office {0xfe, 0x00}, {0x82, 0xfc}, {0xb3, 0x50}, {0xb4, 0x40}, {0xb5, 0xa8}, SensorEnd};/* Home Colour Temperature : 2500K - 3500K */static struct rk_sensor_reg sensor_WhiteB_TungstenLamp2[]={ //Home {0xfe, 0x00}, {0x82, 0xfc}, {0xb3, 0xa0}, {0xb4, 0x45}, {0xb5, 0x40}, SensorEnd};static struct rk_sensor_reg *sensor_WhiteBalanceSeqe[] = {sensor_WhiteB_Auto, sensor_WhiteB_Cloudy,sensor_WhiteB_ClearDay, sensor_WhiteB_TungstenLamp1,sensor_WhiteB_TungstenLamp2,NULL,};static struct rk_sensor_reg sensor_Brightness0[]={ // Brightness -2 {0xfe,0x01}, {0x13,0x10}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Brightness1[]={ // Brightness -1 {0xfe,0x01}, {0x13,0x20}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Brightness2[]={ // Brightness 0 {0xfe,0x01}, {0x13,0x30}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Brightness3[]={ // Brightness +1 {0xfe,0x01}, {0x13,0x40}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Brightness4[]={ // Brightness +2 {0xfe,0x01}, {0x13,0x45}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Brightness5[]={ // Brightness +3 {0xfe,0x01}, {0x13,0x50}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg *sensor_BrightnessSeqe[] = {sensor_Brightness0, sensor_Brightness1, sensor_Brightness2, sensor_Brightness3, sensor_Brightness4, sensor_Brightness5,NULL,};static struct rk_sensor_reg sensor_Effect_Normal[] ={ {0xfe, 0x00}, {0x83, 0xe0}, SensorEnd};static struct rk_sensor_reg sensor_Effect_WandB[] ={ {0xfe, 0x00}, {0x83, 0x12}, SensorEnd};static struct rk_sensor_reg sensor_Effect_Sepia[] ={ {0xfe, 0x00}, {0x83, 0x82}, SensorEnd};static struct rk_sensor_reg sensor_Effect_Negative[] ={ //Negative {0xfe, 0x00}, {0x83, 0x01}, SensorEnd};static struct rk_sensor_reg sensor_Effect_Bluish[] ={ // Bluish {0xfe, 0x00}, {0x83, 0x62}, SensorEnd};static struct rk_sensor_reg sensor_Effect_Green[] ={ // Greenish {0xfe, 0x00}, {0x83, 0x52}, SensorEnd};static struct rk_sensor_reg *sensor_EffectSeqe[] = {sensor_Effect_Normal, sensor_Effect_WandB, sensor_Effect_Negative,sensor_Effect_Sepia, sensor_Effect_Bluish, sensor_Effect_Green,NULL,};static struct rk_sensor_reg sensor_Exposure0[]={ {0xfe,0x01}, {0x13,0x60}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Exposure1[]={ {0xfe,0x01}, {0x13,0x65}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Exposure2[]={ {0xfe,0x01}, {0x13,0x70}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Exposure3[]={ {0xfe,0x01}, {0x13,0x7b}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Exposure4[]={ {0xfe,0x01}, {0x13,0x85}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Exposure5[]={ {0xfe,0x01}, {0x13,0x90}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_Exposure6[]={ {0xfe,0x01}, {0x13,0x95}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg *sensor_ExposureSeqe[] = {sensor_Exposure0, sensor_Exposure1, sensor_Exposure2, sensor_Exposure3, sensor_Exposure4, sensor_Exposure5,sensor_Exposure6,NULL,};static struct rk_sensor_reg sensor_Saturation0[]={ SensorEnd};static struct rk_sensor_reg sensor_Saturation1[]={ SensorEnd};static struct rk_sensor_reg sensor_Saturation2[]={ SensorEnd};static struct rk_sensor_reg *sensor_SaturationSeqe[] = {sensor_Saturation0, sensor_Saturation1, sensor_Saturation2, NULL,};static struct rk_sensor_reg sensor_Contrast0[]={ //Contrast -3 SensorEnd};static struct rk_sensor_reg sensor_Contrast1[]={ //Contrast -2 SensorEnd};static struct rk_sensor_reg sensor_Contrast2[]={ // Contrast -1 SensorEnd};static struct rk_sensor_reg sensor_Contrast3[]={ //Contrast 0 SensorEnd};static struct rk_sensor_reg sensor_Contrast4[]={ //Contrast +1 SensorEnd};static struct rk_sensor_reg sensor_Contrast5[]={ //Contrast +2 SensorEnd};static struct rk_sensor_reg sensor_Contrast6[]={ //Contrast +3 SensorEnd};static struct rk_sensor_reg *sensor_ContrastSeqe[] = {sensor_Contrast0, sensor_Contrast1, sensor_Contrast2, sensor_Contrast3, sensor_Contrast4, sensor_Contrast5, sensor_Contrast6, NULL,};static struct rk_sensor_reg sensor_SceneAuto[] ={ {0xfe,0x01}, {0x3c,0x40}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg sensor_SceneNight[] ={ {0xfe,0x01}, {0x3c,0x60}, {0xfe,0x00}, SensorEnd};static struct rk_sensor_reg *sensor_SceneSeqe[] = {sensor_SceneAuto, sensor_SceneNight,NULL,};static struct rk_sensor_reg sensor_Zoom0[] ={ SensorEnd};static struct rk_sensor_reg sensor_Zoom1[] ={ SensorEnd};static struct rk_sensor_reg sensor_Zoom2[] ={ SensorEnd};static struct rk_sensor_reg sensor_Zoom3[] ={ SensorEnd};static struct rk_sensor_reg *sensor_ZoomSeqe[] = {sensor_Zoom0, sensor_Zoom1, sensor_Zoom2, sensor_Zoom3, NULL,};/** User could be add v4l2_querymenu in sensor_controls by new_usr_v4l2menu*/static struct v4l2_querymenu sensor_menus[] ={};/** User could be add v4l2_queryctrl in sensor_controls by new_user_v4l2ctrl*/static struct sensor_v4l2ctrl_usr_s sensor_controls[] ={};//MUST define the current used format as the first item static struct rk_sensor_datafmt sensor_colour_fmts[] = { {V4L2_MBUS_FMT_UYVY8_2X8, V4L2_COLORSPACE_JPEG} };static struct soc_camera_ops sensor_ops;/************************************************************ Following is local code:* * Please codeing your program here ***********************************************************//************************************************************ Following is callback* If necessary, you could coding these callback***********************************************************//** the function is called in open sensor */static int sensor_activate_cb(struct i2c_client *client){ return 0;}/** the function is called in close sensor*/static int sensor_deactivate_cb(struct i2c_client *client){ //sensor_write(client, 0xfe, 0xf0); //sensor_write(client, 0xfe, 0xf0); //sensor_write(client, 0xfe, 0xf0); //sensor_write(client, 0xfa, 0x73); //sensor_write(client, 0x24, 0x00); return 0;}/** the function is called before sensor register setting in VIDIOC_S_FMT */static unsigned int shutter_h=0,shutter_l=0,cap=0;static int sensor_s_fmt_cb_th(struct i2c_client *client,struct v4l2_mbus_framefmt *mf, bool capture){ char value; unsigned int pid=0,shutter,temp_reg; if ((mf->width == 800 && mf->height == 600)&&(cap==1)) { cap=0; sensor_write(client, 0xb6, 0x00); // AEC off sensor_write(client, 0x03, shutter_h); sensor_write(client, 0x04, shutter_l); msleep(50); printk("set preview for rewrite 0x03"); } if(mf->width == 1600 && mf->height == 1200){ cap=1; sensor_write(client, 0xfe, 0x00); sensor_write(client, 0xb6, 0x00); sensor_read(client, 0x03, &value); shutter_h=value; pid |= (value << 8); sensor_read(client, 0x04, &value); shutter_l=value; pid |= (value & 0xff); shutter=pid; temp_reg= shutter/2; if(temp_reg < 1) temp_reg = 1; sensor_write(client, 0x03, ((temp_reg>>8)&0x1f)); sensor_write(client, 0x04, (temp_reg&0xff)); msleep(350); } return 0;}/** the function is called after sensor register setting finished in VIDIOC_S_FMT */static int sensor_s_fmt_cb_bh (struct i2c_client *client,struct v4l2_mbus_framefmt *mf, bool capture){ return 0;}static int sensor_softrest_usr_cb(struct i2c_client *client,struct rk_sensor_reg *series){ return 0;}static int sensor_check_id_usr_cb(struct i2c_client *client,struct rk_sensor_reg *series){ return 0;}static int sensor_try_fmt_cb_th(struct i2c_client *client,struct v4l2_mbus_framefmt *mf){ return 0;}static int sensor_suspend(struct soc_camera_device *icd, pm_message_t pm_msg){ //struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd)); if (pm_msg.event == PM_EVENT_SUSPEND) { SENSOR_DG("Suspend"); } else { SENSOR_TR("pm_msg.event(0x%x) != PM_EVENT_SUSPEND\n",pm_msg.event); return -EINVAL; } return 0;}static int sensor_resume(struct soc_camera_device *icd){ SENSOR_DG("Resume"); return 0;}static int sensor_mirror_cb (struct i2c_client *client, int mirror){ char val; int err = 0; SENSOR_DG("mirror: %d",mirror); if (mirror) { sensor_write(client, 0xfe, 0); err = sensor_read(client, 0x17, &val); val-=4; if (err == 0) { if((val & 0x1) == 0){ err = sensor_write(client, 0x17, ((val |0x1)+4)); } else err = sensor_write(client, 0x17, ((val & 0xfe)+4)); } } else { //do nothing } return err; }/** the function is v4l2 control V4L2_CID_HFLIP callback*/static int sensor_v4l2ctrl_mirror_cb(struct soc_camera_device *icd, struct sensor_v4l2ctrl_info_s *ctrl_info, struct v4l2_ext_control *ext_ctrl){ struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd)); if (sensor_mirror_cb(client,ext_ctrl->value) != 0) SENSOR_TR("sensor_mirror failed, value:0x%x",ext_ctrl->value); SENSOR_DG("sensor_mirror success, value:0x%x",ext_ctrl->value); return 0;}static int sensor_flip_cb(struct i2c_client *client, int flip){ char val; int err = 0; SENSOR_DG("flip: %d",flip); if (flip) { sensor_write(client, 0xfe, 0); err = sensor_read(client, 0x17, &val); val-=4; if (err == 0) { if((val & 0x2) == 0){ err = sensor_write(client, 0x17, ((val |0x2)+4)); } else { err = sensor_write(client, 0x17, ((val & 0xfc)+4)); } } } else { //do nothing } return err; }/** the function is v4l2 control V4L2_CID_VFLIP callback*/static int sensor_v4l2ctrl_flip_cb(struct soc_camera_device *icd, struct sensor_v4l2ctrl_info_s *ctrl_info, struct v4l2_ext_control *ext_ctrl){ struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd)); if (sensor_flip_cb(client,ext_ctrl->value) != 0) SENSOR_TR("sensor_flip failed, value:0x%x",ext_ctrl->value); SENSOR_DG("sensor_flip success, value:0x%x",ext_ctrl->value); return 0;}/** the functions are focus callbacks*/static int sensor_focus_init_usr_cb(struct i2c_client *client){ return 0;}static int sensor_focus_af_single_usr_cb(struct i2c_client *client){ return 0;}static int sensor_focus_af_near_usr_cb(struct i2c_client *client){ return 0;}static int sensor_focus_af_far_usr_cb(struct i2c_client *client){ return 0;}static int sensor_focus_af_specialpos_usr_cb(struct i2c_client *client,int pos){ return 0;}static int sensor_focus_af_const_usr_cb(struct i2c_client *client){ return 0;}static int sensor_focus_af_const_pause_usr_cb(struct i2c_client *client){ return 0;}static int sensor_focus_af_close_usr_cb(struct i2c_client *client){ return 0;}static int sensor_focus_af_zoneupdate_usr_cb(struct i2c_client *client, int *zone_tm_pos){ return 0;}/*face defect call back*/static int sensor_face_detect_usr_cb(struct i2c_client *client,int on){ return 0;}/** The function can been run in sensor_init_parametres which run in sensor_probe, so user can do some* initialization in the function. */static void sensor_init_parameters_user(struct specific_sensor* spsensor,struct soc_camera_device *icd){ return;}/** :::::WARNING:::::* It is not allowed to modify the following code*/sensor_init_parameters_default_code();sensor_v4l2_struct_initialization();sensor_probe_default_code();sensor_remove_default_code();sensor_driver_default_module_code();
再在include/media/v4l2-chip-ident.h文件中添加如下内容:
V4L2_IDENT_GC2035= 64116, /* ddl@rock-chips.com : GC0329 support */ V4L2_IDENT_GC0328 = 64117, 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驱动
- [RK3288][Android6.0] 调试笔记 --- 伪电池驱动添加
- [RK3288][Android6.0] RTC模块RX8010SJ驱动添加及改动
- RK3288开发板PopMetal上的GPIO驱动实例
- RK3288开发板PopMetal上的GPIO驱动实例
- RK3288开发板PopMetal上的GPIO驱动实例
- 基于全志a31s的camrea驱动调试(gc2145型号)
- [RK3288][Android6.0] Camera驱动初始化流程
- [RK3288][Android6.0] USB UVC 驱动小结
- [RK3288][Android6.0] 串口驱动流程小结
- [RK3288][Android6.0] USB ECHI 驱动小结
- [RK3288][Android6.0] ION 驱动流程小结
- [RK3288][Android6.0] 有线耳机驱动小结
- RK3288核心板
- RK3288核心板
- Rockchip RK3288方案设计,RK3288广告机主板方案设计,RK3288主板,RK3288方案定制。
- rk3288
- RK3288
- fb驱动学习笔记
- Perl 监控 web展示
- XCOPY 拷贝文件 用于文件备份
- C语言动态分配二维数组
- 第36课第五题
- rk3288公板添加gc2145驱动
- ioctl()函数详解
- sql关键字顺序
- 学hibernate的时候落下了,邱在宿舍里整理笔记,整理到了某段代码,瞬间感慨:程序猿的世界俺不懂。。。
- ExtJS5.1学习笔记5——创建复杂的表单
- 甘特图控件XGANTT的用途
- Intent与IntentFilter
- Makefile 中:= ?= += =的区别
- highcharts:如何让highcharts图表自适应浏览器窗体