{0x0000, 0x00,0,0}
};
#endif
+#if CONFIG_SENSOR_IIC_ADDR_01
+static struct reginfo_t rk_init_data_sensor_reg_01[] =
+{
+ {0x0000, 0x00,0,0}
+};
+static struct reginfo_t rk_init_data_sensor_winseqreg_01[] =
+{
+ {0x0000, 0x00,0,0}
+};
+#endif
+#if CONFIG_SENSOR_IIC_ADDR_02
+static struct reginfo_t rk_init_data_sensor_reg_02[] =
+{
+ {0x0000, 0x00,0,0}
+};
+static struct reginfo_t rk_init_data_sensor_winseqreg_02[] =
+{
+ {0x0000, 0x00,0,0}
+};
+#endif
+#if CONFIG_SENSOR_IIC_ADDR_11
+static struct reginfo_t rk_init_data_sensor_reg_11[] =
+{
+ {0x0000, 0x00,0,0}
+};
+static struct reginfo_t rk_init_data_sensor_winseqreg_11[] =
+{
+ {0x0000, 0x00,0,0}
+};
+#endif
+#if CONFIG_SENSOR_IIC_ADDR_12
+static struct reginfo_t rk_init_data_sensor_reg_12[] =
+{
+ {0x0000, 0x00,0,0}
+};
+static struct reginfo_t rk_init_data_sensor_winseqreg_12[] =
+{
+ {0x0000, 0x00,0,0}
+};
+#endif
static rk_sensor_user_init_data_s rk_init_data_sensor[RK_CAM_NUM] =
{
+ #if CONFIG_SENSOR_IIC_ADDR_0
{
.rk_sensor_init_width = INVALID_VALUE,
.rk_sensor_init_height = INVALID_VALUE,
.rk_sensor_init_bus_param = INVALID_VALUE,
.rk_sensor_init_pixelcode = INVALID_VALUE,
- .rk_sensor_init_data = NULL,//rk_init_data_sensor_reg_0,
- .rk_sensor_init_winseq = NULL,//rk_init_data_sensor_winseqreg_0,
- .rk_sensor_winseq_size = 0,//sizeof(rk_init_data_sensor_winseqreg_0) / sizeof(struct reginfo_t),
- },{
- .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_data = rk_init_data_sensor_reg_0,
+ .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_0,
+ .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_0) / sizeof(struct reginfo_t),
+ .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_0) / sizeof(struct reginfo_t),
+ },
+ #else
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
.rk_sensor_init_height = INVALID_VALUE,
.rk_sensor_init_bus_param = INVALID_VALUE,
.rk_sensor_init_pixelcode = INVALID_VALUE,
- .rk_sensor_init_data = NULL,//rk_init_data_sensor_reg_1,
- .rk_sensor_init_winseq = NULL,//rk_init_data_sensor_winseqreg_1,
- .rk_sensor_winseq_size = 0,//sizeof(rk_init_data_sensor_winseqreg_1) / sizeof(struct reginfo_t),
- },{
- .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_data = NULL,
+ .rk_sensor_init_winseq = NULL,
+ .rk_sensor_winseq_size = 0,
+ .rk_sensor_init_data_size = 0,
+ },
+ #endif
+ #if CONFIG_SENSOR_IIC_ADDR_1
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
.rk_sensor_init_height = INVALID_VALUE,
.rk_sensor_init_bus_param = INVALID_VALUE,
.rk_sensor_init_pixelcode = INVALID_VALUE,
- .rk_sensor_init_data = NULL,//rk_init_data_sensor_reg_1,
- .rk_sensor_init_winseq = NULL,//rk_init_data_sensor_winseqreg_1,
- .rk_sensor_winseq_size = 0,//sizeof(rk_init_data_sensor_winseqreg_1) / sizeof(struct reginfo_t),
- },{
- .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_data = rk_init_data_sensor_reg_1,
+ .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_1,
+ .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_1) / sizeof(struct reginfo_t),
+ .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_1) / sizeof(struct reginfo_t),
+ },
+ #else
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
.rk_sensor_init_height = INVALID_VALUE,
.rk_sensor_init_bus_param = INVALID_VALUE,
.rk_sensor_init_pixelcode = INVALID_VALUE,
- .rk_sensor_init_data = NULL,//rk_init_data_sensor_reg_1,
- .rk_sensor_init_winseq = NULL,//rk_init_data_sensor_winseqreg_1,
- .rk_sensor_winseq_size = 0,//sizeof(rk_init_data_sensor_winseqreg_1) / sizeof(struct reginfo_t),
- },{
- .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_data = NULL,
+ .rk_sensor_init_winseq = NULL,
+ .rk_sensor_winseq_size = 0,
+ .rk_sensor_init_data_size = 0,
+ },
+ #endif
+ #if CONFIG_SENSOR_IIC_ADDR_01
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
.rk_sensor_init_height = INVALID_VALUE,
.rk_sensor_init_bus_param = INVALID_VALUE,
.rk_sensor_init_pixelcode = INVALID_VALUE,
- .rk_sensor_init_data = NULL,//rk_init_data_sensor_reg_1,
- .rk_sensor_init_winseq = NULL,//rk_init_data_sensor_winseqreg_1,
- .rk_sensor_winseq_size = 0,//sizeof(rk_init_data_sensor_winseqreg_1) / sizeof(struct reginfo_t),
- },{
- .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_data = rk_init_data_sensor_reg_01,
+ .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_01,
+ .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_01) / sizeof(struct reginfo_t),
+ .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_01) / sizeof(struct reginfo_t),
+ },
+ #else
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_height = INVALID_VALUE,
+ .rk_sensor_init_bus_param = INVALID_VALUE,
+ .rk_sensor_init_pixelcode = INVALID_VALUE,
+ .rk_sensor_init_data = NULL,
+ .rk_sensor_init_winseq = NULL,
+ .rk_sensor_winseq_size = 0,
+ .rk_sensor_init_data_size = 0,
+ },
+ #endif
+ #if CONFIG_SENSOR_IIC_ADDR_02
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_height = INVALID_VALUE,
+ .rk_sensor_init_bus_param = INVALID_VALUE,
+ .rk_sensor_init_pixelcode = INVALID_VALUE,
+ .rk_sensor_init_data = rk_init_data_sensor_reg_02,
+ .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_02,
+ .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_02) / sizeof(struct reginfo_t),
+ .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_02) / sizeof(struct reginfo_t),
+ },
+ #else
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_height = INVALID_VALUE,
+ .rk_sensor_init_bus_param = INVALID_VALUE,
+ .rk_sensor_init_pixelcode = INVALID_VALUE,
+ .rk_sensor_init_data = NULL,
+ .rk_sensor_init_winseq = NULL,
+ .rk_sensor_winseq_size = 0,
+ .rk_sensor_init_data_size = 0,
+ },
+ #endif
+ #if CONFIG_SENSOR_IIC_ADDR_11
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_height = INVALID_VALUE,
+ .rk_sensor_init_bus_param = INVALID_VALUE,
+ .rk_sensor_init_pixelcode = INVALID_VALUE,
+ .rk_sensor_init_data = rk_init_data_sensor_reg_11,
+ .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_11,
+ .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_11) / sizeof(struct reginfo_t),
+ .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_11) / sizeof(struct reginfo_t),
+ },
+ #else
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_height = INVALID_VALUE,
+ .rk_sensor_init_bus_param = INVALID_VALUE,
+ .rk_sensor_init_pixelcode = INVALID_VALUE,
+ .rk_sensor_init_data = NULL,
+ .rk_sensor_init_winseq = NULL,
+ .rk_sensor_winseq_size = 0,
+ .rk_sensor_init_data_size = 0,
+ },
+ #endif
+ #if CONFIG_SENSOR_IIC_ADDR_12
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
+ .rk_sensor_init_height = INVALID_VALUE,
+ .rk_sensor_init_bus_param = INVALID_VALUE,
+ .rk_sensor_init_pixelcode = INVALID_VALUE,
+ .rk_sensor_init_data = rk_init_data_sensor_reg_12,
+ .rk_sensor_init_winseq = rk_init_data_sensor_winseqreg_12,
+ .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_12) / sizeof(struct reginfo_t),
+ .rk_sensor_init_data_size = sizeof(rk_init_data_sensor_reg_12) / sizeof(struct reginfo_t),
+ },
+ #else
+ {
+ .rk_sensor_init_width = INVALID_VALUE,
.rk_sensor_init_height = INVALID_VALUE,
.rk_sensor_init_bus_param = INVALID_VALUE,
.rk_sensor_init_pixelcode = INVALID_VALUE,
- .rk_sensor_init_data = NULL,//rk_init_data_sensor_reg_1,
- .rk_sensor_init_winseq = NULL,//rk_init_data_sensor_winseqreg_1,
- .rk_sensor_winseq_size = 0,//sizeof(rk_init_data_sensor_winseqreg_1) / sizeof(struct reginfo_t),
+ .rk_sensor_init_data = NULL,
+ .rk_sensor_init_winseq = NULL,
+ .rk_sensor_winseq_size = 0,
+ .rk_sensor_init_data_size = 0,
},
+ #endif
};
#include "../../../drivers/media/video/rk30_camera.c"
struct reginfo_t * rk_sensor_init_data;
int rk_sensor_winseq_size;
struct reginfo_t * rk_sensor_init_winseq;
+ int rk_sensor_init_data_size;
}rk_sensor_user_init_data_s;
typedef struct rk_camera_device_register_info {
}\r
break;\r
}\r
- #ifdef CONFIG_SENSOR_01\r
case 1:\r
+ {\r
+ if ((w==176) && (h==144)) {\r
+ *val = CONFIG_SENSOR_QCIF_FPS_FIXED_1;\r
+ #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_1\r
+ } else if ((w==240) && (h==160)) {\r
+ *val = CONFIG_SENSOR_240X160_FPS_FIXED_1;\r
+ #endif\r
+ } else if ((w==320) && (h==240)) {\r
+ *val = CONFIG_SENSOR_QVGA_FPS_FIXED_1;\r
+ } else if ((w==352) && (h==288)) {\r
+ *val = CONFIG_SENSOR_CIF_FPS_FIXED_1;\r
+ } else if ((w==640) && (h==480)) {\r
+ *val = CONFIG_SENSOR_VGA_FPS_FIXED_1;\r
+ } else if ((w==720) && (h==480)) {\r
+ *val = CONFIG_SENSOR_480P_FPS_FIXED_1;\r
+ } else if ((w==1280) && (h==720)) {\r
+ *val = CONFIG_SENSOR_720P_FPS_FIXED_1;\r
+ }\r
+ break;\r
+ }\r
+\r
+ #ifdef CONFIG_SENSOR_01\r
+ case 2:\r
{\r
if ((w==176) && (h==144)) {\r
*val = CONFIG_SENSOR_QCIF_FPS_FIXED_01;\r
}\r
#endif\r
#ifdef CONFIG_SENSOR_02\r
- case 2:\r
+ case 3:\r
{\r
if ((w==176) && (h==144)) {\r
*val = CONFIG_SENSOR_QCIF_FPS_FIXED_02;\r
}\r
#endif\r
\r
- case 3:\r
- {\r
- if ((w==176) && (h==144)) {\r
- *val = CONFIG_SENSOR_QCIF_FPS_FIXED_1;\r
- #ifdef CONFIG_SENSOR_240X160_FPS_FIXED_1\r
- } else if ((w==240) && (h==160)) {\r
- *val = CONFIG_SENSOR_240X160_FPS_FIXED_1;\r
- #endif\r
- } else if ((w==320) && (h==240)) {\r
- *val = CONFIG_SENSOR_QVGA_FPS_FIXED_1;\r
- } else if ((w==352) && (h==288)) {\r
- *val = CONFIG_SENSOR_CIF_FPS_FIXED_1;\r
- } else if ((w==640) && (h==480)) {\r
- *val = CONFIG_SENSOR_VGA_FPS_FIXED_1;\r
- } else if ((w==720) && (h==480)) {\r
- *val = CONFIG_SENSOR_480P_FPS_FIXED_1;\r
- } else if ((w==1280) && (h==720)) {\r
- *val = CONFIG_SENSOR_720P_FPS_FIXED_1;\r
- }\r
- break;\r
- }\r
#ifdef CONFIG_SENSOR_11\r
case 4:\r
{\r
static struct reginfo* sensor_init_data_p = sensor_init_data;
static struct reginfo* sensor_init_winseq_p = sensor_vga;
static struct reginfo* sensor_init_winseq_board = NULL;
-
+static struct reginfo* sensor_init_data_board = NULL;
static int sensor_init(struct v4l2_subdev *sd, u32 val)
{
struct i2c_client *client = v4l2_get_subdevdata(sd);
if(tmp_plat_data &&(i < RK_CAM_NUM) && tmp_plat_data->sensor_init_data[i]){
//user has defined the init data
//init reg
- if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data && (sizeof(struct reginfo) != sizeof(struct reginfo_t))){
- for(j = 0;j< sizeof(sensor_init_data)/sizeof(struct reginfo);j++) {
- sensor_init_data[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].reg;
- sensor_init_data[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].val;
- }
- sensor_init_data_p = sensor_init_data;
- } else if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data) {
- sensor_init_data_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data);
- }
+ int tmp_init_data_size = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data_size;
+ if(tmp_init_data_size > 2){//init data is valid
+ if((sizeof(struct reginfo) != sizeof(struct reginfo_t))){
+ if(sensor_init_data_board) {
+ vfree(sensor_init_data_board);
+ sensor_init_data_board = NULL;
+ }
+ sensor_init_data_board = (struct reginfo*)vmalloc(tmp_init_data_size);
+ if(!sensor_init_data_board)
+ SENSOR_TR("%s :vmalloc init data erro !",__FUNCTION__);
+ for(j = 0;j< tmp_init_data_size;j++) {
+ sensor_init_data_board[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].reg;
+ sensor_init_data_board[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].val;
+ }
+ sensor_init_data_p = sensor_init_data_board;
+ } else{
+ sensor_init_data_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data);
+ }
+ }
//init winseq
- if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq && (sizeof(struct reginfo) != sizeof(struct reginfo_t))){
- int tmp_winseq_size = tmp_plat_data->sensor_init_data[i]->rk_sensor_winseq_size;
- if(sensor_init_winseq_board) {
- vfree(sensor_init_winseq_board);
- sensor_init_winseq_board = NULL;
- }
- sensor_init_winseq_board = (struct reginfo*)vmalloc(tmp_winseq_size);
- if(!sensor_init_winseq_board)
- SENSOR_TR("%s :vmalloc erro !",__FUNCTION__);
- for(j = 0;j< tmp_winseq_size;j++){
- sensor_init_winseq_board[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].reg;
- sensor_init_winseq_board[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].val;
- }
- sensor_init_winseq_p = sensor_init_winseq_board;
- } else if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq){
- sensor_init_winseq_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq);
- }
+ int tmp_winseq_size = tmp_plat_data->sensor_init_data[i]->rk_sensor_winseq_size;
+ if(tmp_winseq_size > 2){
+ if(sizeof(struct reginfo) != sizeof(struct reginfo_t)){
+ if(sensor_init_winseq_board) {
+ vfree(sensor_init_winseq_board);
+ sensor_init_winseq_board = NULL;
+ }
+ sensor_init_winseq_board = (struct reginfo*)vmalloc(tmp_winseq_size);
+ if(!sensor_init_winseq_board)
+ SENSOR_TR("%s :vmalloc erro !",__FUNCTION__);
+ for(j = 0;j< tmp_winseq_size;j++){
+ sensor_init_winseq_board[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].reg;
+ sensor_init_winseq_board[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].val;
+ }
+ sensor_init_winseq_p = sensor_init_winseq_board;
+ } else{
+ sensor_init_winseq_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq);
+ }
+ }
//init width,height,bus,pixelcode
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width != INVALID_VALUE)
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width != INVALID_VALUE)
sensor_init_width = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width;
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height != INVALID_VALUE)
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height != INVALID_VALUE)
sensor_init_height = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height;
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param != INVALID_VALUE)
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param != INVALID_VALUE)
sensor_init_busparam = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param;
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode != INVALID_VALUE)
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode != INVALID_VALUE)
sensor_init_pixelcode = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode;
}
SENSOR_DG("\n%s..%s.. \n",SENSOR_NAME_STRING(),__FUNCTION__);
static struct reginfo* sensor_init_data_p = sensor_init_data;
static struct reginfo* sensor_init_winseq_p = sensor_svga;
static struct reginfo* sensor_init_winseq_board = NULL;
+static struct reginfo* sensor_init_data_board = NULL;
static int sensor_init(struct v4l2_subdev *sd, u32 val)
{
struct i2c_client *client = v4l2_get_subdevdata(sd);
if(tmp_plat_data &&(i < RK_CAM_NUM) && tmp_plat_data->sensor_init_data[i]){
//user has defined the init data
//init reg
- if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data && (sizeof(struct reginfo) != sizeof(struct reginfo_t))){
- for(j = 0;j< sizeof(sensor_init_data)/sizeof(struct reginfo);j++) {
- sensor_init_data[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].reg;
- sensor_init_data[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].val;
- }
- sensor_init_data_p = sensor_init_data;
- } else if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data) {
- sensor_init_data_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data);
- }
+ int tmp_init_data_size = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data_size;
+ if(tmp_init_data_size > 2){//init data is valid
+ if((sizeof(struct reginfo) != sizeof(struct reginfo_t))){
+ if(sensor_init_data_board) {
+ vfree(sensor_init_data_board);
+ sensor_init_data_board = NULL;
+ }
+ sensor_init_data_board = (struct reginfo*)vmalloc(tmp_init_data_size);
+ if(!sensor_init_data_board)
+ SENSOR_TR("%s :vmalloc init data erro !",__FUNCTION__);
+ for(j = 0;j< tmp_init_data_size;j++) {
+ sensor_init_data_board[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].reg;
+ sensor_init_data_board[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].val;
+ }
+ sensor_init_data_p = sensor_init_data_board;
+ } else{
+ sensor_init_data_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data);
+ }
+ }
//init winseq
- if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq && (sizeof(struct reginfo) != sizeof(struct reginfo_t))){
- int tmp_winseq_size = tmp_plat_data->sensor_init_data[i]->rk_sensor_winseq_size;
- if(sensor_init_winseq_board) {
- vfree(sensor_init_winseq_board);
- sensor_init_winseq_board = NULL;
- }
- sensor_init_winseq_board = (struct reginfo*)vmalloc(tmp_winseq_size);
- if(!sensor_init_winseq_board)
- SENSOR_TR("%s :vmalloc erro !",__FUNCTION__);
- for(j = 0;j< tmp_winseq_size;j++){
- sensor_init_winseq_board[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].reg;
- sensor_init_winseq_board[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].val;
- }
- sensor_init_winseq_p = sensor_init_winseq_board;
- } else if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq){
- sensor_init_winseq_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq);
- }
+ int tmp_winseq_size = tmp_plat_data->sensor_init_data[i]->rk_sensor_winseq_size;
+ if(tmp_winseq_size > 2){
+ if(sizeof(struct reginfo) != sizeof(struct reginfo_t)){
+ if(sensor_init_winseq_board) {
+ vfree(sensor_init_winseq_board);
+ sensor_init_winseq_board = NULL;
+ }
+ sensor_init_winseq_board = (struct reginfo*)vmalloc(tmp_winseq_size);
+ if(!sensor_init_winseq_board)
+ SENSOR_TR("%s :vmalloc erro !",__FUNCTION__);
+ for(j = 0;j< tmp_winseq_size;j++){
+ sensor_init_winseq_board[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].reg;
+ sensor_init_winseq_board[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].val;
+ }
+ sensor_init_winseq_p = sensor_init_winseq_board;
+ } else{
+ sensor_init_winseq_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq);
+ }
+ }
//init width,height,bus,pixelcode
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width != INVALID_VALUE)
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width != INVALID_VALUE)
sensor_init_width = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width;
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height != INVALID_VALUE)
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height != INVALID_VALUE)
sensor_init_height = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height;
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param != INVALID_VALUE)
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param != INVALID_VALUE)
sensor_init_busparam = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param;
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode != INVALID_VALUE)
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode != INVALID_VALUE)
sensor_init_pixelcode = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode;
}
SENSOR_DG("\n%s..%s.. \n",SENSOR_NAME_STRING(),__FUNCTION__);
static struct reginfo* sensor_init_data_p = NULL;
static struct reginfo* sensor_init_winseq_p = NULL;
static struct reginfo* sensor_init_winseq_board = NULL;
+static struct reginfo* sensor_init_data_board = NULL;
static int sensor_init(struct v4l2_subdev *sd, u32 val)
{
struct i2c_client *client = v4l2_get_subdevdata(sd);
}
}
}
- if(tmp_plat_data && (i < RK_CAM_NUM) && tmp_plat_data->sensor_init_data[i]) {
- //user has defined the init data
- //init reg
- if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data && (sizeof(struct reginfo) != sizeof(struct reginfo_t))){
- for(j = 0;j< sizeof(sensor_init_data)/sizeof(struct reginfo);j++){
- sensor_init_data[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].reg;
- sensor_init_data[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].val;
- }
- sensor_init_data_p = sensor_init_data;
- } else if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data) {
- sensor_init_data_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data);
- }
- //init winseq
- if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq && (sizeof(struct reginfo) != sizeof(struct reginfo_t))){
- int tmp_winseq_size = tmp_plat_data->sensor_init_data[i]->rk_sensor_winseq_size;
- if(sensor_init_winseq_board) {
- vfree(sensor_init_winseq_board);
- sensor_init_winseq_board = NULL;
- }
- sensor_init_winseq_board = (struct reginfo*)vmalloc(tmp_winseq_size);
- if(!sensor_init_winseq_board)
- SENSOR_TR("%s :vmalloc erro !",__FUNCTION__);
- for(j = 0;j< tmp_winseq_size;j++) {
- sensor_init_winseq_board[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].reg;
- sensor_init_winseq_board[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].val;
+ if(tmp_plat_data &&(i < RK_CAM_NUM) && tmp_plat_data->sensor_init_data[i]){
+ //user has defined the init data
+ //init reg
+ int tmp_init_data_size = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data_size;
+ if(tmp_init_data_size > 2){//init data is valid
+ if((sizeof(struct reginfo) != sizeof(struct reginfo_t))){
+ if(sensor_init_data_board) {
+ vfree(sensor_init_data_board);
+ sensor_init_data_board = NULL;
+ }
+ sensor_init_data_board = (struct reginfo*)vmalloc(tmp_init_data_size);
+ if(!sensor_init_data_board)
+ SENSOR_TR("%s :vmalloc init data erro !",__FUNCTION__);
+ for(j = 0;j< tmp_init_data_size;j++) {
+ sensor_init_data_board[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].reg;
+ sensor_init_data_board[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data[j].val;
+ }
+ sensor_init_data_p = sensor_init_data_board;
+ } else{
+ sensor_init_data_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_data);
}
- sensor_init_winseq_p = sensor_init_winseq_board;
- } else if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq) {
- sensor_init_winseq_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq);
- }
- //init width,height,bus,pixelcode
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width != INVALID_VALUE)
- sensor_init_width = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width;
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height != INVALID_VALUE)
- sensor_init_height = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height;
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param != INVALID_VALUE)
- sensor_init_busparam = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param;
- if(tmp_plat_data->sensor_init_data[i] && tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode != INVALID_VALUE)
- sensor_init_pixelcode = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode;
+ }
+ //init winseq
+ int tmp_winseq_size = tmp_plat_data->sensor_init_data[i]->rk_sensor_winseq_size;
+ if(tmp_winseq_size > 2){
+ if(sizeof(struct reginfo) != sizeof(struct reginfo_t)){
+ if(sensor_init_winseq_board) {
+ vfree(sensor_init_winseq_board);
+ sensor_init_winseq_board = NULL;
+ }
+ sensor_init_winseq_board = (struct reginfo*)vmalloc(tmp_winseq_size);
+ if(!sensor_init_winseq_board)
+ SENSOR_TR("%s :vmalloc erro !",__FUNCTION__);
+ for(j = 0;j< tmp_winseq_size;j++){
+ sensor_init_winseq_board[j].reg = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].reg;
+ sensor_init_winseq_board[j].val = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq[j].val;
+ }
+ sensor_init_winseq_p = sensor_init_winseq_board;
+ } else{
+ sensor_init_winseq_p = (struct reginfo*)(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_winseq);
+ }
+ }
+ //init width,height,bus,pixelcode
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width != INVALID_VALUE)
+ sensor_init_width = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_width;
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height != INVALID_VALUE)
+ sensor_init_height = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_height;
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param != INVALID_VALUE)
+ sensor_init_busparam = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_bus_param;
+ if(tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode != INVALID_VALUE)
+ sensor_init_pixelcode = tmp_plat_data->sensor_init_data[i]->rk_sensor_init_pixelcode;
}
SENSOR_DG("\n%s..%s.. \n",SENSOR_NAME_STRING(),__FUNCTION__);
pcdev->camera_work_count = *count;
}
}
- //must be reinit,or will be somthing wrong in irq process.
- pcdev->active = NULL;
- INIT_LIST_HEAD(&pcdev->capture);
RKCAMERA_DG("%s..%d.. videobuf size:%d, vipmem_buf size:%d, count:%d \n",__FUNCTION__,__LINE__, *size,pcdev->vipmem_size, *count);
return 0;
RKCAMERA_DG("STREAM_OFF cancel timer and flush work:0x%x \n", ret);
}
write_cif_reg(pcdev->base,CIF_CIF_CTRL, cif_ctrl_val);
-
+ //must be reinit,or will be somthing wrong in irq process.
+ if(enable == false){
+ pcdev->active = NULL;
+ INIT_LIST_HEAD(&pcdev->capture);\r
+ }
RKCAMERA_DG("%s.. enable : 0x%x , CIF_CIF_CTRL = 0x%x\n", __FUNCTION__, enable,read_cif_reg(pcdev->base,CIF_CIF_CTRL));
return 0;
}