sync(system): update front board system configuration.
This commit is contained in:
@@ -1046,11 +1046,11 @@ static int sensor_power(struct v4l2_subdev *sd, int on)
|
||||
usleep_range(1000, 1200);
|
||||
vin_gpio_set_status(sd, PWDN, 1);
|
||||
vin_gpio_set_status(sd, RESET, 1);
|
||||
//vin_gpio_set_status(sd, POWER_EN, 1);
|
||||
vin_gpio_set_status(sd, POWER_EN, 1);
|
||||
vin_gpio_write(sd, PWDN, CSI_GPIO_LOW);
|
||||
vin_gpio_write(sd, RESET, CSI_GPIO_LOW);
|
||||
usleep_range(1000, 1200);
|
||||
//vin_gpio_write(sd, POWER_EN, CSI_GPIO_HIGH);
|
||||
vin_gpio_write(sd, POWER_EN, CSI_GPIO_LOW);
|
||||
//vin_set_pmu_channel(sd, CMBCSI, ON);
|
||||
vin_set_pmu_channel(sd, IOVDD, ON);
|
||||
usleep_range(1000, 1200);
|
||||
@@ -1069,7 +1069,7 @@ static int sensor_power(struct v4l2_subdev *sd, int on)
|
||||
sensor_dbg("PWR_OFF!do nothing\n");
|
||||
cci_lock(sd);
|
||||
vin_set_mclk(sd, OFF);
|
||||
//vin_gpio_write(sd, POWER_EN, CSI_GPIO_LOW);
|
||||
vin_gpio_write(sd, POWER_EN, CSI_GPIO_HIGH);
|
||||
//vin_set_pmu_channel(sd, CMBCSI, OFF);
|
||||
vin_set_pmu_channel(sd, AVDD, OFF);
|
||||
vin_set_pmu_channel(sd, DVDD, OFF);
|
||||
|
||||
@@ -27,6 +27,8 @@ MODULE_LICENSE("GPL");
|
||||
#define MCLK (24*1000*1000)
|
||||
#define V4L2_IDENT_SENSOR (0x002B)
|
||||
|
||||
#define HC_ORIGIN_DEFINED_BOARD
|
||||
|
||||
/*
|
||||
* Our nominal (default) frame rate.
|
||||
*/
|
||||
@@ -44,7 +46,7 @@ MODULE_LICENSE("GPL");
|
||||
#define SENSOR_NAME_2 "ov02b10_mipi"
|
||||
|
||||
#define SENSOR_1600x1200_30FPS 1
|
||||
#define SENSOR_1280x720_30FPS 1
|
||||
#define SENSOR_1280x720_30FPS 0
|
||||
#define SENSOR_1280x720_15FPS 0
|
||||
#define SENSOR_800x600_15FPS 0
|
||||
#define SENSOR_640x480_15FPS 0
|
||||
@@ -664,6 +666,7 @@ static struct regval_list sensor_1600x1200_30fps_regs[] = {
|
||||
{0xfd, 0x01},
|
||||
{0x0e, 0x02},
|
||||
{0x0f, 0x1a},
|
||||
{0x12, 0x01}, //mirror and flip
|
||||
{0x18, 0x00},
|
||||
{0x22, 0xff},
|
||||
{0x23, 0x02},
|
||||
@@ -842,6 +845,77 @@ static int sensor_s_exp_gain(struct v4l2_subdev *sd,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static data_type sensor_flip_status;
|
||||
static int sensor_s_vflip(struct v4l2_subdev *sd, int enable)
|
||||
{
|
||||
data_type get_value;
|
||||
data_type set_value;
|
||||
|
||||
if (!(enable == 0 || enable == 1))
|
||||
return -1;
|
||||
|
||||
sensor_read(sd, 0x12, &get_value);
|
||||
sensor_dbg("ready to vflip, regs_data = 0x%x\n", get_value);
|
||||
|
||||
if (enable) {
|
||||
set_value = get_value | 0x02;
|
||||
} else {
|
||||
set_value = get_value & 0xFD;
|
||||
}
|
||||
sensor_write(sd, 0x12, set_value);
|
||||
sensor_flip_status = set_value;
|
||||
//usleep_range(80000, 100000);
|
||||
//sensor_read(sd, 0x17, &get_value);
|
||||
//sensor_dbg("after vflip, regs_data = 0x%x, sensor_flip_status = %d\n",
|
||||
// get_value, sensor_flip_status);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sensor_s_hflip(struct v4l2_subdev *sd, int enable)
|
||||
{
|
||||
data_type get_value;
|
||||
data_type set_value;
|
||||
|
||||
if (!(enable == 0 || enable == 1))
|
||||
return -1;
|
||||
|
||||
sensor_read(sd, 0x12, &get_value);
|
||||
sensor_dbg("ready to hflip, regs_data = 0x%x\n", get_value);
|
||||
|
||||
if (enable) {
|
||||
set_value = get_value | 0x01;
|
||||
} else {
|
||||
set_value = get_value & 0xFE;
|
||||
}
|
||||
sensor_write(sd, 0x12, set_value);
|
||||
sensor_flip_status = set_value;
|
||||
//usleep_range(80000, 100000);
|
||||
//sensor_read(sd, 0x17, &get_value);
|
||||
//sensor_dbg("after hflip, regs_data = 0x%x, sensor_flip_status = %d\n",
|
||||
// get_value, sensor_flip_status);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sensor_g_flip(struct v4l2_subdev *sd, struct sensor_flip *flip)
|
||||
{
|
||||
#ifdef CONFIG_ENABLE_SENSOR_FLIP_OPTION
|
||||
if (sensor_flip_status & 0x01)
|
||||
flip->hflip = 1;
|
||||
else
|
||||
flip->hflip = 0;
|
||||
|
||||
if (sensor_flip_status & 0x02)
|
||||
flip->vflip = 1;
|
||||
else
|
||||
flip->vflip = 0;
|
||||
#else
|
||||
flip->hflip = 0;
|
||||
flip->vflip = 0;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sensor_s_sw_stby(struct v4l2_subdev *sd, int on_off)
|
||||
{
|
||||
@@ -851,6 +925,9 @@ static void sensor_s_sw_stby(struct v4l2_subdev *sd, int on_off)
|
||||
/*
|
||||
* Stuff that knows about the sensor.
|
||||
*/
|
||||
#ifdef HC_ORIGIN_DEFINED_BOARD
|
||||
static int pwdn_flag = 0;
|
||||
#endif
|
||||
static int sensor_power(struct v4l2_subdev *sd, int on)
|
||||
{
|
||||
static int use_count = 0;
|
||||
@@ -876,19 +953,21 @@ static int sensor_power(struct v4l2_subdev *sd, int on)
|
||||
sensor_print("%d, PWR_ON! use_count:%d\n", __LINE__, use_count);
|
||||
|
||||
cci_lock(sd);
|
||||
if(use_count == 0) {
|
||||
vin_gpio_set_status(sd, SM_HS, 1);
|
||||
vin_gpio_set_status(sd, SM_VS, 1);
|
||||
vin_gpio_write(sd, SM_VS, CSI_GPIO_HIGH); //AVDD_EN
|
||||
vin_gpio_write(sd, SM_HS, CSI_GPIO_HIGH); //DOVDD_EN
|
||||
vin_gpio_set_status(sd, POWER_EN, 1);
|
||||
vin_gpio_write(sd, POWER_EN, CSI_GPIO_HIGH); //AVDD&DOVDD
|
||||
}
|
||||
use_count++;
|
||||
vin_gpio_set_status(sd, PWDN, 1);
|
||||
|
||||
vin_gpio_set_status(sd, RESET, 1);
|
||||
vin_gpio_set_status(sd, POWER_EN, 1);
|
||||
#ifdef HC_ORIGIN_DEFINED_BOARD
|
||||
if (pwdn_flag == 0)
|
||||
{
|
||||
vin_gpio_set_status(sd, PWDN, 1);
|
||||
pwdn_flag = 1;
|
||||
}
|
||||
#else
|
||||
vin_gpio_set_status(sd, PWDN, 1);
|
||||
vin_gpio_write(sd, PWDN, CSI_GPIO_LOW);
|
||||
#endif
|
||||
vin_gpio_write(sd, RESET, CSI_GPIO_LOW);
|
||||
vin_gpio_write(sd, POWER_EN, CSI_GPIO_HIGH);
|
||||
usleep_range(5000, 6000);
|
||||
|
||||
vin_set_mclk_freq(sd, MCLK);
|
||||
@@ -910,7 +989,10 @@ static int sensor_power(struct v4l2_subdev *sd, int on)
|
||||
|
||||
vin_gpio_write(sd, RESET, CSI_GPIO_LOW);
|
||||
vin_set_mclk(sd, OFF);
|
||||
#ifdef HC_ORIGIN_DEFINED_BOARD
|
||||
#else
|
||||
vin_gpio_write(sd, PWDN, CSI_GPIO_LOW);
|
||||
#endif
|
||||
use_count--;
|
||||
sensor_print("%d, PWR_OFF! use_count:%d\n", __LINE__, use_count);
|
||||
cci_unlock(sd);
|
||||
@@ -944,6 +1026,7 @@ static int sensor_reset(struct v4l2_subdev *sd, u32 val)
|
||||
|
||||
static int sensor_detect(struct v4l2_subdev *sd)
|
||||
{
|
||||
#if !defined CONFIG_VIN_INIT_MELIS
|
||||
data_type rdval;
|
||||
unsigned int sensor_id;
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
@@ -959,6 +1042,7 @@ static int sensor_detect(struct v4l2_subdev *sd)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1020,8 +1104,9 @@ static int sensor_get_fmt_mbus_core(struct v4l2_subdev *sd, int *code)
|
||||
// default:
|
||||
// *code = info->fmt->mbus_code;
|
||||
// }
|
||||
*code = MEDIA_BUS_FMT_SRGGB10_1X10;//MEDIA_BUS_FMT_SBGGR10_1X10;
|
||||
|
||||
// *code = MEDIA_BUS_FMT_SRGGB10_1X10;//MEDIA_BUS_FMT_SBGGR10_1X10;
|
||||
*code = MEDIA_BUS_FMT_SBGGR10_1X10;
|
||||
sensor_print("%s(), L:%d, MEDIA_BUS_FMT_SBGGR10_1X10\n", __func__, __LINE__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1057,6 +1142,9 @@ static long sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
case VIDIOC_VIN_SET_IR:
|
||||
sensor_set_ir(sd, (struct ir_switch *)arg);
|
||||
break;
|
||||
case VIDIOC_VIN_SENSOR_GET_FLIP:
|
||||
sensor_g_flip(sd, (struct sensor_flip *)arg);
|
||||
break;
|
||||
case VIDIOC_S_INPUT:
|
||||
break;
|
||||
default:
|
||||
@@ -1071,7 +1159,8 @@ static long sensor_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
static struct sensor_format_struct sensor_formats[] = {
|
||||
{
|
||||
.desc = "Raw RGB Bayer",
|
||||
.mbus_code = MEDIA_BUS_FMT_SRGGB10_1X10,//MEDIA_BUS_FMT_SBGGR10_1X10,
|
||||
//.mbus_code = MEDIA_BUS_FMT_SRGGB10_1X10,//MEDIA_BUS_FMT_SBGGR10_1X10,
|
||||
.mbus_code = MEDIA_BUS_FMT_SGRBG10_1X10,//MEDIA_BUS_FMT_SBGGR10_1X10,//MEDIA_BUS_FMT_SBGGR10_1X10,
|
||||
.regs = sensor_fmt_raw,
|
||||
.regs_size = ARRAY_SIZE(sensor_fmt_raw),
|
||||
.bpp = 1
|
||||
@@ -1304,6 +1393,10 @@ static int sensor_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
return sensor_s_gain(sd, ctrl->val);
|
||||
case V4L2_CID_EXPOSURE:
|
||||
return sensor_s_exp(sd, ctrl->val);
|
||||
case V4L2_CID_HFLIP:
|
||||
return sensor_s_hflip(sd, ctrl->val);
|
||||
case V4L2_CID_VFLIP:
|
||||
return sensor_s_vflip(sd, ctrl->val);
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -1435,11 +1528,11 @@ static int sensor_probe(struct i2c_client *client,
|
||||
info->exp = 0;
|
||||
info->gain = 0;
|
||||
info->preview_first_flag = 1;
|
||||
info->wdr_time_hs = 0x18; //zcy md 0x18 to 0x12
|
||||
info->time_hs = 0x20; //zcy md 0x20 to 0x16
|
||||
info->wdr_time_hs = 0x28; //zcy md 0x18 to 0x12
|
||||
info->time_hs = 0x28; //zcy md 0x20 to 0x16
|
||||
info->deskew = 0x2;
|
||||
info->first_power_flag = 1;
|
||||
info->ir_state = IDLE_STATE;
|
||||
// info->ir_state = IDLE_STATE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user