Evo MR3 updates
/drivers/media/video/msm/ov8810.c
blob:f5503d60a6c920e6f7ab9dd4df02808232de076b -> blob:164be2e73edf8f79846ba2e5a7a1af0984ff6884
--- drivers/media/video/msm/ov8810.c
+++ drivers/media/video/msm/ov8810.c
@@ -1984,6 +1984,7 @@ static int ov8810_probe_read_id(const st
if (IS_ERR(vreg_af_actuator))
return PTR_ERR(vreg_af_actuator);
+ data->camera_set_source(MAIN_SOURCE);
pr_info(" ov8810_probe_init_sensor finishes\n");
return rc;
}
@@ -2038,15 +2039,8 @@ static int ov8810_sensor_open_init(struc
pr_info("doing clk switch (ov8810)\n");
if(data->camera_clk_switch != NULL)
data->camera_clk_switch();
-
- /* enable mclk first */
- msm_camio_clk_rate_set(OV8810_DEFAULT_CLOCK_RATE);
- msleep(20);
- msm_camio_camif_pad_reg_reset();
- msleep(20);
-
- /*PWD and RST config*/
+ /*PWD config*/
pr_info("%s, GPIO(%d) sensor_pwd 0\n", __func__, data->sensor_pwd);
rc = gpio_request(data->sensor_pwd, "ov8810");
if (!rc)
@@ -2054,15 +2048,20 @@ static int ov8810_sensor_open_init(struc
else
pr_err("GPIO (%d) request faile\n", data->sensor_pwd);
gpio_free(data->sensor_pwd);
- mdelay(5);
-
+ mdelay(3);
+
+ /* enable mclk first */
+ msm_camio_clk_rate_set(OV8810_DEFAULT_CLOCK_RATE);
+ msm_camio_camif_pad_reg_reset();
+ msleep(3);
+ /*Pull reset*/
rc = gpio_request(data->sensor_reset, "ov8810");
if (!rc)
gpio_direction_output(data->sensor_reset, 1);
else
pr_err("GPIO (%d) request faile\n", data->sensor_reset);
gpio_free(data->sensor_reset);
-
+ msleep(20);
/*read sensor id*/
rc = ov8810_probe_read_id(data);
@@ -2071,7 +2070,7 @@ static int ov8810_sensor_open_init(struc
pr_info("%s, initialize_ov8810_registers: %d\n", __func__, __LINE__);
if (rc < 0)
goto init_fail;
- #if 0 /*move to probe up sensor*/
+ #if 1 /*move to probe up sensor*/
/* Initialize Sensor registers */
rc = initialize_ov8810_registers();
if (rc < 0)
@@ -2198,6 +2197,9 @@ static int ov8810_probe_init_done(const
gpio_direction_output(data->sensor_pwd, 1);
gpio_free(data->sensor_pwd);
mdelay(1);
+ gpio_request(data->sensor_reset, "ov8810");
+ gpio_direction_output(data->sensor_reset, 0);
+ gpio_free(data->sensor_reset);
return 0;
}
@@ -2584,24 +2586,26 @@ static int ov8810_sensor_release(void)
int rc = -EBADF;
down(&ov8810_sem);
- msleep(35);
+ /*Pull hi PWD*/
gpio_request(ov8810_ctrl->sensordata->sensor_pwd, "ov8810");
gpio_direction_output(ov8810_ctrl->sensordata->sensor_pwd, 1);
gpio_free(ov8810_ctrl->sensordata->sensor_pwd);
+ /*Pull low RST*/
+ gpio_request(ov8810_ctrl->sensordata->sensor_reset, "ov8810");
+ gpio_direction_output(ov8810_ctrl->sensordata->sensor_reset, 0);
+ gpio_free(ov8810_ctrl->sensordata->sensor_reset);
pr_info("vreg_af_actuator vreg_disable\n");
vreg_disable(vreg_af_actuator);
-
msleep(20);
-
pr_info("%s, %d\n", __func__, __LINE__);
-
+ /*MCLK off*/
msm_camio_probe_off(ov8810_pdev);
if (ov8810_ctrl) {
kfree(ov8810_ctrl);
ov8810_ctrl = NULL;
}
-
+ mdelay(3);
allow_suspend();
pr_info("ov8810_release completed\n");
up(&ov8810_sem);
@@ -2658,6 +2662,8 @@ static int ov8810_sensor_probe(struct ms
if (rc < 0)
return rc;
+ if (info->camera_main_set_probe != NULL)
+ info->camera_main_set_probe(true);
init_suspend();
s->s_init = ov8810_sensor_open_init;
s->s_release = ov8810_sensor_release;
@@ -2682,29 +2688,17 @@ probe_done:
}
-static int ov8810_vreg_enable(struct platform_device *pdev)
-{
- struct msm_camera_sensor_info *sdata = pdev->dev.platform_data;
- int rc;
- pr_info("%s camera vreg on\n", __func__);
-
- if (sdata->camera_power_on == NULL) {
- pr_err("sensor platform_data didnt register\n");
- return -EIO;
- }
- rc = sdata->camera_power_on();
- return rc;
-}
-
static int __ov8810_probe(struct platform_device *pdev)
{
- int rc;
+ struct msm_camera_sensor_info *sdata = pdev->dev.platform_data;
printk("__ov8810_probe\n");
ov8810_pdev = pdev;
- rc = ov8810_vreg_enable(pdev);
- if (rc < 0)
- pr_err("__ov8810_probe fail sensor power on error\n");
-
+ if (sdata->camera_main_get_probe != NULL) {
+ if (sdata->camera_main_get_probe()) {
+ pr_info("__ov8810_probe camera main get probed already.\n");
+ return 0;
+ }
+ }
return msm_camera_drv_start(pdev, ov8810_sensor_probe);
}