mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 04:48:04 +09:00
camera: fix ov2659 and ov5642 vsync singal havn't output
This commit is contained in:
@@ -68,10 +68,10 @@ module_param(debug, int, S_IRUGO|S_IWUSR);
|
||||
#define CONFIG_SENSOR_Mirror 0
|
||||
#define CONFIG_SENSOR_Flip 0
|
||||
|
||||
#define CONFIG_SENSOR_I2C_SPEED 100000 /* Hz */
|
||||
#define CONFIG_SENSOR_I2C_SPEED 250000 /* Hz */
|
||||
/* Sensor write register continues by preempt_disable/preempt_enable for current process not be scheduled */
|
||||
#define CONFIG_SENSOR_I2C_NOSCHED 1
|
||||
#define CONFIG_SENSOR_I2C_RDWRCHK 1
|
||||
#define CONFIG_SENSOR_I2C_RDWRCHK 0
|
||||
|
||||
#define SENSOR_BUS_PARAM (SOCAM_MASTER | SOCAM_PCLK_SAMPLE_FALLING|\
|
||||
SOCAM_HSYNC_ACTIVE_HIGH | SOCAM_VSYNC_ACTIVE_LOW |\
|
||||
@@ -261,8 +261,6 @@ static struct reginfo sensor_init_data[] =
|
||||
{0x5062, 0x7d},
|
||||
{0x5063, 0x69},
|
||||
{0x3004, 0x20},
|
||||
{0x0100,0x00},
|
||||
{0x0100,0x01},
|
||||
{0x0000, 0x00}
|
||||
};
|
||||
|
||||
@@ -494,6 +492,7 @@ static struct reginfo sensor_sxga[] =
|
||||
/* 800X600 SVGA*/
|
||||
static struct reginfo sensor_svga[] =
|
||||
{
|
||||
{0x0100, 0x00}, //software sleep : Sensor vsync singal may not output if haven't sleep the sensor when transfer the array,
|
||||
{0x3800, 0x00},
|
||||
{0x3801, 0x00},
|
||||
{0x3802, 0x00},
|
||||
@@ -539,6 +538,7 @@ static struct reginfo sensor_svga[] =
|
||||
{0x5002, 0x10},
|
||||
{0x3005, 0x18},
|
||||
{0x3004, 0x20},
|
||||
{0x0100, 0x01}, //software wake
|
||||
{0x0000, 0x00}
|
||||
};
|
||||
|
||||
@@ -1506,8 +1506,8 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val)
|
||||
goto sensor_INIT_ERR;
|
||||
}
|
||||
sensor_task_lock(client,0);
|
||||
icd->user_width = SENSOR_INIT_WIDTH;
|
||||
icd->user_height = SENSOR_INIT_HEIGHT;
|
||||
//icd->user_width = SENSOR_INIT_WIDTH;
|
||||
//icd->user_height = SENSOR_INIT_HEIGHT;
|
||||
sensor->info_priv.winseqe_cur_addr = (int)SENSOR_INIT_WINSEQADR;
|
||||
sensor->info_priv.pixfmt = SENSOR_INIT_PIXFMT;
|
||||
|
||||
@@ -1572,6 +1572,8 @@ static int sensor_deactivate(struct i2c_client *client)
|
||||
struct soc_camera_device *icd = client->dev.platform_data;
|
||||
u8 reg_val;
|
||||
|
||||
SENSOR_DG("\n%s..%s.. Enter\n",SENSOR_NAME_STRING(),__FUNCTION__);
|
||||
|
||||
/* ddl@rock-chips.com : all sensor output pin must change to input for other sensor */
|
||||
sensor_task_lock(client, 1);
|
||||
sensor_read(client,0x3000,®_val);
|
||||
@@ -1580,9 +1582,11 @@ static int sensor_deactivate(struct i2c_client *client)
|
||||
sensor_read(client,0x3002,®_val);
|
||||
sensor_write(client, 0x3002, reg_val&0x1f);
|
||||
sensor_task_lock(client, 0);
|
||||
|
||||
sensor_ioctrl(icd, Sensor_PowerDown, 1);
|
||||
|
||||
/* ddl@rock-chips.com : sensor config init width , because next open sensor quickly(soc_camera_open -> Try to configure with default parameters) */
|
||||
icd->user_width = SENSOR_INIT_WIDTH;
|
||||
icd->user_height = SENSOR_INIT_HEIGHT;
|
||||
msleep(100);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -73,10 +73,10 @@ module_param(debug, int, S_IRUGO|S_IWUSR);
|
||||
#define CONFIG_SENSOR_Focus 0
|
||||
#endif
|
||||
|
||||
#define CONFIG_SENSOR_I2C_SPEED 100000 /* Hz */
|
||||
#define CONFIG_SENSOR_I2C_SPEED 250000 /* Hz */
|
||||
/* Sensor write register continues by preempt_disable/preempt_enable for current process not be scheduled */
|
||||
#define CONFIG_SENSOR_I2C_NOSCHED 0
|
||||
#define CONFIG_SENSOR_I2C_RDWRCHK 1
|
||||
#define CONFIG_SENSOR_I2C_RDWRCHK 0
|
||||
|
||||
|
||||
#define SENSOR_BUS_PARAM (SOCAM_MASTER | SOCAM_PCLK_SAMPLE_RISING |\
|
||||
@@ -789,11 +789,11 @@ static struct reginfo sensor_init_data[] =
|
||||
{0x5504,0x00},
|
||||
{0x5505,0x7f},
|
||||
{0x5025,0x80},
|
||||
{0x3a0f,0x30},
|
||||
{0x3a10,0x28},
|
||||
{0x3a1b,0x30},
|
||||
{0x3a1e,0x28},
|
||||
{0x3a11,0x61},
|
||||
{0x3a0f,0x48},//0x30
|
||||
{0x3a10,0x38},//0x28
|
||||
{0x3a1b,0x50},//0x30
|
||||
{0x3a1e,0x30},//0x28
|
||||
{0x3a11,0x71},//0x61
|
||||
{0x3a1f,0x10},
|
||||
{0x5688,0xfd},
|
||||
{0x5689,0xdf},
|
||||
@@ -841,6 +841,7 @@ static struct reginfo sensor_init_data[] =
|
||||
|
||||
static struct reginfo sensor_720p[]=
|
||||
{
|
||||
#if 0
|
||||
{SEQUENCE_PROPERTY, SEQUENCE_INIT},
|
||||
{0x3103, 0x93 },
|
||||
{0x3008, 0x82 },
|
||||
@@ -1359,7 +1360,90 @@ static struct reginfo sensor_720p[]=
|
||||
{0x3002, 0x1c },
|
||||
{0x3819, 0x80 },
|
||||
{0x5002, 0xe0 },
|
||||
|
||||
#elif 1
|
||||
//{0x3008,0x42}, //software sleep : Sensor vsync singal may not output if haven't sleep the sensor when transfer the array,
|
||||
{0x3819,0x81},
|
||||
{0x3000,0xf8},
|
||||
{0x3001,0x48},
|
||||
{0x3002,0x5c},
|
||||
{0x3003,0x02},
|
||||
{0x3005,0xb7},
|
||||
{0x3006,0x43},
|
||||
{0x3007,0x37},
|
||||
{0x350c,0x02},
|
||||
{0x350d,0xe4},
|
||||
{0x3602,0xfc},
|
||||
{0x3612,0xff},
|
||||
{0x3613,0x00},
|
||||
{0x3621,0xc9},
|
||||
{0x3622,0x00},
|
||||
{0x3623,0x22},
|
||||
{0x3604,0x40},
|
||||
{0x3705,0xdb},
|
||||
{0x370a,0x81},
|
||||
{0x3801,0x50},
|
||||
{0x3803,0x08},
|
||||
{0x3804,0x05},
|
||||
{0x3805,0x00},
|
||||
{0x3806,0x02},
|
||||
{0x3807,0xd0},
|
||||
{0x3808,0x05},
|
||||
{0x3809,0x00},
|
||||
{0x380a,0x02},
|
||||
{0x380b,0xd0},
|
||||
{0x380c,0x08},
|
||||
{0x380d,0x72},
|
||||
{0x380e,0x02},
|
||||
{0x380f,0xe4},
|
||||
{0x3810,0xc0},
|
||||
{0x3818,0xc1},
|
||||
{0x381c,0x10},
|
||||
{0x381d,0xa0},
|
||||
{0x381e,0x05},
|
||||
{0x381f,0xb0},
|
||||
{0x3820,0x00},
|
||||
{0x3821,0x00},
|
||||
{0x3824,0x11},
|
||||
{0x3825,0xb4},
|
||||
{0x3826,0x00},
|
||||
{0x3827,0x08},
|
||||
{0x3011,0x08},
|
||||
{0x3c01,0x80},
|
||||
{0x3c01,0x00},
|
||||
{0x3c00,0x00},
|
||||
{0x3a08,0x0d},
|
||||
{0x3a09,0xe0},
|
||||
{0x3a0a,0x0b},
|
||||
{0x3a0b,0x90},
|
||||
{0x3a0d,0x04},
|
||||
{0x3a0e,0x03},
|
||||
{0x3a11,0x70},
|
||||
{0x3a10,0x30},
|
||||
{0x3a1b,0x3c},
|
||||
{0x3a1e,0x30},
|
||||
{0x3a1f,0x10},
|
||||
{0x401c,0x04},
|
||||
{0x5682,0x05},
|
||||
{0x5683,0x00},
|
||||
{0x5686,0x02},
|
||||
{0x5687,0xcc},
|
||||
{0x5001,0x7f},
|
||||
{0x589b,0x06},
|
||||
{0x589a,0xc5},
|
||||
{0x3503,0x00},
|
||||
{0x3010,0x10},
|
||||
{0x460c,0x22},
|
||||
{0x460b,0x37},
|
||||
{0x471c,0xd0},
|
||||
{0x471d,0x05},
|
||||
{0x3815,0x01},
|
||||
{0x3818,0xc1},
|
||||
{0x501f,0x00},
|
||||
{0x4300,0x32},
|
||||
{0x3002,0x1c},
|
||||
{0x3819,0x80},
|
||||
//{0x3008,0x02}, //software wake
|
||||
#endif
|
||||
{0x0000 ,0x00}
|
||||
|
||||
};
|
||||
@@ -1368,6 +1452,7 @@ static struct reginfo sensor_720p[]=
|
||||
|
||||
static struct reginfo sensor_1080p[]=
|
||||
{
|
||||
#if 0
|
||||
{SEQUENCE_PROPERTY, SEQUENCE_INIT},
|
||||
{ 0x3103, 0x93 },
|
||||
{ 0x3008, 0x82 },
|
||||
@@ -1879,13 +1964,97 @@ static struct reginfo sensor_1080p[]=
|
||||
{ 0x3002, 0x1c },
|
||||
{ 0x3819, 0x80 },
|
||||
{ 0x5002, 0xe0 },
|
||||
#else
|
||||
//{0x3008,0x42}, //software sleep : Sensor vsync singal may not output if haven't sleep the sensor when transfer the array,
|
||||
{0x3819,0x81},
|
||||
{0x3000,0xf8},
|
||||
{0x3001,0x48},
|
||||
{0x3002,0x5c},
|
||||
{0x3003,0x02},
|
||||
{0x3005,0xb7},
|
||||
{0x3006,0x43},
|
||||
{0x3007,0x37},
|
||||
{0x350c,0x04},
|
||||
{0x350d,0x58},
|
||||
{0x3602,0xe4},
|
||||
{0x3612,0xac},
|
||||
{0x3613,0x44},
|
||||
{0x3621,0x09},
|
||||
{0x3622,0x00},//60},
|
||||
{0x3623,0x22},
|
||||
{0x3604,0x40},//48},
|
||||
{0x3705,0xda},
|
||||
{0x370a,0x80},
|
||||
{0x3801,0x8a},
|
||||
{0x3803,0x0a},
|
||||
{0x3804,0x07},
|
||||
{0x3805,0x80},
|
||||
{0x3806,0x04},
|
||||
{0x3807,0x39},
|
||||
{0x3808,0x07},
|
||||
{0x3809,0x80},
|
||||
{0x380a,0x04},
|
||||
{0x380b,0x38},
|
||||
{0x380c,0x09},
|
||||
{0x380d,0xd6},
|
||||
{0x380e,0x04},
|
||||
{0x380f,0x58},
|
||||
{0x3810,0xc2},
|
||||
{0x3818,0xc0},
|
||||
{0x381c,0x11},
|
||||
{0x381d,0xba},
|
||||
{0x381e,0x04},
|
||||
{0x381f,0x48},
|
||||
{0x3820,0x04},
|
||||
{0x3821,0x18},
|
||||
{0x3824,0x11},
|
||||
{0x3825,0xac},
|
||||
{0x3826,0x00},
|
||||
{0x3827,0x0c},
|
||||
{ 0x3011, 0x07 }, //10 fps 0x05 //15fps 0x08
|
||||
{ 0x3c01, 0x80 },
|
||||
{ 0x3c00, 0x04 },
|
||||
{0x3a08,0x14}, //0x05
|
||||
{0x3a09,0xe0}, //0xf5
|
||||
{0x3a0a,0x11}, //0x04
|
||||
{0x3a0b,0x60}, //0xf6
|
||||
{0x3a0d,0x04}, //0x0b
|
||||
{0x3a0e,0x03}, //0x0d
|
||||
{0x3a10,0x30},
|
||||
{0x3a1b,0x3c},
|
||||
{0x3a1e,0x30},
|
||||
{0x3a11,0x70},
|
||||
{0x3a1f,0x10},
|
||||
{0x401c,0x06},
|
||||
{0x5682,0x07},
|
||||
{0x5683,0x60},
|
||||
{0x5686,0x04},
|
||||
{0x5687,0x1c},
|
||||
{0x5001,0x7f},
|
||||
{0x589b,0x00},
|
||||
{0x589a,0xc0},
|
||||
{0x3503,0x00},
|
||||
{0x3010,0x30},
|
||||
{0x460c,0x22},
|
||||
{0x460b,0x37},
|
||||
{0x471c,0xd0},
|
||||
{0x471d,0x05},
|
||||
{0x3815,0x01},
|
||||
{0x3818,0xc0},
|
||||
{0x501f,0x00},
|
||||
{0x4300,0x32},
|
||||
{0x3002,0x1c},
|
||||
{0x3819,0x80},
|
||||
//{0x3008,0x02}, //software wake
|
||||
#endif
|
||||
{ 0x0000, 0x00 }
|
||||
};
|
||||
|
||||
/* 2592X1944 QSXGA */
|
||||
static struct reginfo sensor_qsxga[] =
|
||||
{
|
||||
{0x3503 , 0x7 },
|
||||
{0x3008,0x42}, //software sleep : Sensor vsync singal may not output if haven't sleep the sensor when transfer the array,
|
||||
//{0x3503 , 0x7 },
|
||||
{0x3000 , 0x0 },
|
||||
{0x3001 , 0x0 },
|
||||
{0x3002 , 0x0 },
|
||||
@@ -1952,12 +2121,14 @@ static struct reginfo sensor_qsxga[] =
|
||||
{0x3010 , 0x10},
|
||||
{0x3009 , 0x1 },
|
||||
{0x300a , 0x56},
|
||||
{0x3008,0x02}, //software wake
|
||||
{0x0000 ,0x00}
|
||||
};
|
||||
/* 2048*1536 QXGA */
|
||||
static struct reginfo sensor_qxga[] =
|
||||
{
|
||||
{0x3503 , 0x7 },
|
||||
{0x3008,0x42}, //software sleep : Sensor vsync singal may not output if haven't sleep the sensor when transfer the array,
|
||||
//{0x3503 , 0x7 },
|
||||
{0x3000 , 0x0 },
|
||||
{0x3001 , 0x0 },
|
||||
{0x3002 , 0x0 },
|
||||
@@ -2050,14 +2221,15 @@ static struct reginfo sensor_qxga[] =
|
||||
{0x5685 ,0x0 },
|
||||
{0x5686 ,0x7 },
|
||||
{0x5687 ,0x98},
|
||||
|
||||
{0x3008,0x02}, //software wake
|
||||
{0x0000 ,0x00}
|
||||
};
|
||||
|
||||
/* 1600X1200 UXGA */
|
||||
static struct reginfo sensor_uxga[] =
|
||||
{
|
||||
{0x3503 , 0x7 },
|
||||
{0x3008,0x42}, //software sleep : Sensor vsync singal may not output if haven't sleep the sensor when transfer the array,
|
||||
//{0x3503 , 0x7 },
|
||||
{0x3000 , 0x0 },
|
||||
{0x3001 , 0x0 },
|
||||
{0x3002 , 0x0 },
|
||||
@@ -2150,13 +2322,15 @@ static struct reginfo sensor_uxga[] =
|
||||
{0x5685 ,0x0 },
|
||||
{0x5686 ,0x7 },
|
||||
{0x5687 ,0x98},
|
||||
{0x3008,0x02}, //software wake
|
||||
{0x0000 ,0x00}
|
||||
};
|
||||
|
||||
/* 1280X1024 SXGA */
|
||||
static struct reginfo sensor_sxga[] =
|
||||
{
|
||||
{0x3503 , 0x7 },
|
||||
{0x3008,0x42}, //software sleep : Sensor vsync singal may not output if haven't sleep the sensor when transfer the array,
|
||||
//{0x3503 , 0x7 },
|
||||
{0x3000 , 0x0 },
|
||||
{0x3001 , 0x0 },
|
||||
{0x3002 , 0x0 },
|
||||
@@ -2249,107 +2423,100 @@ static struct reginfo sensor_sxga[] =
|
||||
{0x5685 ,0x0 },
|
||||
{0x5686 ,0x7 },
|
||||
{0x5687 ,0x98},
|
||||
|
||||
{0x3008,0x02}, //software wake
|
||||
{0x0000,0x00}
|
||||
};
|
||||
|
||||
/* 800X600 SVGA*/
|
||||
static struct reginfo sensor_svga[] =
|
||||
{
|
||||
#if 1
|
||||
{0x3000,0xf8},
|
||||
{0x3001,0x48},
|
||||
{0x3002,0x5c},
|
||||
{0x3003,0x2},
|
||||
{0x3005,0xb7},
|
||||
{0x3006,0x43},
|
||||
{0x3007,0x37},
|
||||
{0x350c,0x07},
|
||||
{0x350d,0xd0},
|
||||
{0x3602,0xfc},
|
||||
{0x3612,0xff},
|
||||
{0x3613,0x0},
|
||||
{0x3621,0xc7},
|
||||
{0x3622,0x00},
|
||||
{0x3623,0x22},
|
||||
{0x3604,0x40},
|
||||
{0x3705,0xdb},
|
||||
{0x370a,0x81},
|
||||
{0x3801,0x50},
|
||||
{0x3803,0x08},
|
||||
{0x3804,0x05},
|
||||
{0x3805,0x0},
|
||||
{0x3806,0x03},
|
||||
{0x3807,0xc0},
|
||||
{0x3808,0x3},
|
||||
{0x3809,0x20},
|
||||
{0x380a,0x2},
|
||||
{0x380b,0x58},
|
||||
{0x380c,0x0c},
|
||||
{0x380d,0x80},
|
||||
{0x380e,0x03},
|
||||
{0x380f,0xe8},
|
||||
{0x3810,0xc0},
|
||||
{0x3815,0x02},
|
||||
{0x3818,0xc1},
|
||||
{0x3824,0x11},
|
||||
{0x3827,0x08},
|
||||
{0x3a00,0x78},
|
||||
{0x3a0d,0x8},
|
||||
{0x3a0e,0x06},
|
||||
{0x3a10,0x72},
|
||||
{0x3a1b,0x80},
|
||||
{0x3a1e,0x70},
|
||||
{0x3a11,0xd0},
|
||||
{0x3a1f,0x10},
|
||||
{0x460b,0x37},
|
||||
{0x471d,0x5},
|
||||
{0x4713,0x02},
|
||||
{0x471c,0xd0},
|
||||
{0x501f,0x00},
|
||||
{0x4300,0x32},
|
||||
{0x3002,0x5c},
|
||||
{0x5682,0x5},
|
||||
{0x5683,0x0},
|
||||
{0x5686,0x3},
|
||||
{0x5687,0xc0},
|
||||
{0x5001,0x7f},
|
||||
{0x589b,0x4},
|
||||
{0x589a,0xc5},
|
||||
{0x4407,0x04},
|
||||
{0x3002,0x5c},
|
||||
{0x3503,0x00},
|
||||
{0x3000,0x00},
|
||||
#else
|
||||
{0x3800 ,0x1 },
|
||||
{0x3801 ,0x50},
|
||||
{0x3802 ,0x0 },
|
||||
{0x3803 ,0x8 },
|
||||
{0x3804 ,0x5 },
|
||||
{0x3805 ,0x0 },
|
||||
{0x3806 ,0x3 },
|
||||
{0x3807 ,0xc0},
|
||||
{0x3808 ,0x3 },
|
||||
{0x3809 ,0x20},
|
||||
{0x380a ,0x2 },
|
||||
{0x380b ,0x58},
|
||||
{0x380c ,0xc },
|
||||
{0x380d ,0x80},
|
||||
{0x380e ,0x3 },
|
||||
{0x380f ,0xe8},
|
||||
{0x5001 ,0x7f},
|
||||
{0x5680 ,0x0 },
|
||||
{0x5681 ,0x0 },
|
||||
{0x5682 ,0x5 },
|
||||
{0x5683 ,0x0 },
|
||||
{0x5684 ,0x0 },
|
||||
{0x5685 ,0x0 },
|
||||
{0x5686 ,0x3 },
|
||||
{0x5687 ,0xc0},
|
||||
{0x5687 ,0xc0},
|
||||
{0x3815 ,0x02},
|
||||
{0x3503 ,0x00},
|
||||
#endif
|
||||
{0x3819,0x81},
|
||||
{0x3000,0xf8},
|
||||
{0x3001,0x48},
|
||||
{0x3002,0x5c},
|
||||
{0x3003,0x02},
|
||||
{0x3005,0xb7},
|
||||
{0x3006,0x43},
|
||||
{0x3007,0x37},
|
||||
{0x350c,0x07},//03
|
||||
{0x350d,0xd0},//e8
|
||||
{0x3602,0xfc},
|
||||
{0x3612,0xff},
|
||||
{0x3613,0x00},
|
||||
{0x3621,0xc7},//87
|
||||
{0x3622,0x00},//60
|
||||
{0x3623,0x22},//01
|
||||
{0x3604,0x40},//48
|
||||
{0x3705,0xdb},
|
||||
{0x370a,0x81},
|
||||
{0x3801,0x50},
|
||||
{0x3803,0x08},
|
||||
{0x3804,0x05},
|
||||
{0x3805,0x00},
|
||||
{0x3806,0x03},
|
||||
{0x3807,0xc0},
|
||||
{0x3808,0x03},
|
||||
{0x3809,0x20},
|
||||
{0x380a,0x02},
|
||||
{0x380b,0x58},
|
||||
{0x380c,0x0c},
|
||||
{0x380d,0x80},
|
||||
{0x380e,0x03},
|
||||
{0x380f,0xe8},
|
||||
{0x3810,0x40},//c0
|
||||
{0x3815,0x02},
|
||||
{0x3818,0xc1},
|
||||
{0x381c,0x21},
|
||||
{0x381d,0x50},
|
||||
{0x381e,0x01},
|
||||
{0x381f,0x20},
|
||||
{0x3820,0x00},
|
||||
{0x3821,0x00},
|
||||
{0x3824,0x11},
|
||||
{0x3825,0xb4},
|
||||
{0x3826,0x00},
|
||||
{0x3827,0x08},
|
||||
{0x3a00,0x78},
|
||||
{ 0x3011, 0x08 },
|
||||
{ 0x3c01, 0x80 },
|
||||
{ 0x3c00, 0x04 },
|
||||
{0x3a08,0x09},
|
||||
{0x3a09,0x60},
|
||||
{0x3a0a,0x07},
|
||||
{0x3a0b,0xd0},
|
||||
{0x3a0d,0x08},
|
||||
{0x3a0e,0x06},
|
||||
{0x3a10,0x30},
|
||||
{0x3a1b,0x3c},
|
||||
{0x3a1e,0x30},
|
||||
{0x3a11,0x70},
|
||||
{0x3a1f,0x10},
|
||||
{0x3010,0x10},
|
||||
{0x460b,0x37},
|
||||
{0x471d,0x05},
|
||||
{0x4713,0x02},
|
||||
{0x471c,0xd0},
|
||||
{0x501f,0x00},
|
||||
{0x4300,0x32},
|
||||
{0x3002,0x5c},
|
||||
{0x5682,0x05},
|
||||
{0x5683,0x00},
|
||||
{0x5686,0x03},
|
||||
{0x5687,0xc0},
|
||||
{0x5001,0x7f},
|
||||
{0x589b,0x04},
|
||||
{0x589a,0xc5},
|
||||
{0x4407,0x04},
|
||||
{0x3002,0x5c},
|
||||
{0x460c,0x22},
|
||||
{0x3815,0x03},
|
||||
{0x3000,0x00},
|
||||
{0x3819,0x80},
|
||||
{0x3406,0x00},
|
||||
{0x5183,0x80},
|
||||
{0x5191,0xff},
|
||||
{0x5192,0x00},
|
||||
{0x3503,0x00},
|
||||
{0x0000 ,0x00}
|
||||
};
|
||||
|
||||
@@ -3144,6 +3311,7 @@ struct sensor_parameter
|
||||
|
||||
unsigned short int capture_framerate;
|
||||
unsigned short int preview_framerate;
|
||||
char awb[6];
|
||||
};
|
||||
|
||||
struct sensor
|
||||
@@ -3645,6 +3813,9 @@ int sensor_parameter_record(struct i2c_client *client)
|
||||
u8 tp_l,tp_m,tp_h;
|
||||
struct sensor *sensor = to_sensor(client);
|
||||
|
||||
sensor_write(client,0x3503,0x07); //stop AE/AG
|
||||
sensor_write(client,0x3406,0x01); //stop AWB
|
||||
|
||||
sensor_read(client,0x3500,&ret_h);
|
||||
sensor_read(client,0x3501, &ret_m);
|
||||
sensor_read(client,0x3502, &ret_l);
|
||||
@@ -3664,6 +3835,13 @@ int sensor_parameter_record(struct i2c_client *client)
|
||||
sensor->parameter.capture_framerate = 900;
|
||||
sensor->parameter.preview_framerate = 1500;
|
||||
|
||||
sensor_read(client,0x3400,&sensor->parameter.awb[0]); //record awb value
|
||||
sensor_read(client,0x3401,&sensor->parameter.awb[1]);
|
||||
sensor_read(client,0x3402,&sensor->parameter.awb[2]);
|
||||
sensor_read(client,0x3403,&sensor->parameter.awb[3]);
|
||||
sensor_read(client,0x3404,&sensor->parameter.awb[4]);
|
||||
sensor_read(client,0x3405,&sensor->parameter.awb[5]);
|
||||
|
||||
SENSOR_DG(" %s Read 0x350c = 0x%02x 0x350d = 0x%02x 0x350b=0x%02x \n",SENSOR_NAME_STRING(), ret_h, ret_l, sensor->parameter.preview_gain);
|
||||
return 0;
|
||||
}
|
||||
@@ -3771,6 +3949,14 @@ int sensor_ae_transfer(struct i2c_client *client)
|
||||
//<2F>ӳ<EFBFBD><D3B3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ⰵ<EFBFBD><E2B0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//camera_timed_wait(200);
|
||||
//linzhk camera_timed_wait(500);
|
||||
|
||||
sensor_write(client,0x3400,sensor->parameter.awb[0]); // resume awb value
|
||||
sensor_write(client,0x3401,sensor->parameter.awb[1]);
|
||||
sensor_write(client,0x3402,sensor->parameter.awb[2]);
|
||||
sensor_write(client,0x3403,sensor->parameter.awb[3]);
|
||||
sensor_write(client,0x3404,sensor->parameter.awb[4]);
|
||||
sensor_write(client,0x3405,sensor->parameter.awb[5]);
|
||||
|
||||
SENSOR_DG(" %s Write 0x350b = 0x%02x 0x3502 = 0x%02x 0x3501=0x%02x 0x3500 = 0x%02x\n",SENSOR_NAME_STRING(), Gain, ExposureLow, ExposureMid, ExposureHigh);
|
||||
mdelay(100);
|
||||
return 0;
|
||||
@@ -3881,8 +4067,8 @@ static int sensor_init(struct v4l2_subdev *sd, u32 val)
|
||||
goto sensor_INIT_ERR;
|
||||
}
|
||||
sensor_task_lock(client,0);
|
||||
icd->user_width = SENSOR_INIT_WIDTH;
|
||||
icd->user_height = SENSOR_INIT_HEIGHT;
|
||||
//icd->user_width = SENSOR_INIT_WIDTH;
|
||||
//icd->user_height = SENSOR_INIT_HEIGHT;
|
||||
sensor->info_priv.winseqe_cur_addr = SENSOR_INIT_WINSEQADR;
|
||||
sensor->info_priv.pixfmt = SENSOR_INIT_PIXFMT;
|
||||
|
||||
@@ -3939,17 +4125,19 @@ sensor_INIT_ERR:
|
||||
static int sensor_deactivate(struct i2c_client *client)
|
||||
{
|
||||
struct soc_camera_device *icd = client->dev.platform_data;
|
||||
|
||||
SENSOR_DG("\n%s..%s.. Enter\n",SENSOR_NAME_STRING(),__FUNCTION__);
|
||||
|
||||
/* ddl@rock-chips.com : all sensor output pin must change to input for other sensor */
|
||||
sensor_task_lock(client, 1);
|
||||
sensor_write(client, 0x3017, 0x00); // FREX,VSYNC,HREF,PCLK,D9-D6
|
||||
sensor_write(client, 0x3018, 0x03); // D5-D0
|
||||
sensor_write(client,0x3019,0X00); // STROBE,SDA
|
||||
SENSOR_DG("\n%s..%s exit \n",SENSOR_NAME_STRING(),__FUNCTION__);
|
||||
|
||||
sensor_task_lock(client, 0);
|
||||
|
||||
sensor_ioctrl(icd, Sensor_PowerDown, 1);
|
||||
|
||||
/* ddl@rock-chips.com : sensor config init width , because next open sensor quickly(soc_camera_open -> Try to configure with default parameters) */
|
||||
icd->user_width = SENSOR_INIT_WIDTH;
|
||||
icd->user_height = SENSOR_INIT_HEIGHT;
|
||||
msleep(100);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user