msm: camera: Fix for lcd power on issue
After camera probe, releasing LCD_CAMERA_LDO_2V8 &
SKU3_LCD_CAMERA_LDO_1V8 gpios for power on lcd
Change-Id: I2c03f045b0eb5302962145d7466ac2231eea0c83
Signed-off-by: Raju P.L.S.S.S.N <rplsssn@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-msm7627a-camera.c b/arch/arm/mach-msm/board-msm7627a-camera.c
index 7fecf59..608eb1e 100644
--- a/arch/arm/mach-msm/board-msm7627a-camera.c
+++ b/arch/arm/mach-msm/board-msm7627a-camera.c
@@ -1063,9 +1063,8 @@
pr_debug("msm7627a_camera_init Entered\n");
/* LCD and camera power (VREG & LDO) init */
if (machine_is_msm7627a_evb() || machine_is_msm8625_evb()) {
- evb_camera_gpio_cfg();
lcd_camera_power_init();
-
+ evb_camera_gpio_cfg();
}
#ifndef CONFIG_MSM_CAMERA_V4L2
diff --git a/drivers/media/video/msm/sensors/ov5647_v4l2.c b/drivers/media/video/msm/sensors/ov5647_v4l2.c
index 052305c..fed514c 100644
--- a/drivers/media/video/msm/sensors/ov5647_v4l2.c
+++ b/drivers/media/video/msm/sensors/ov5647_v4l2.c
@@ -515,10 +515,29 @@
{SENSOR_NAME, (kernel_ulong_t)&ov5647_s_ctrl},
{ }
};
+int32_t ov5647_sensor_i2c_probe(struct i2c_client *client,
+ const struct i2c_device_id *id)
+{
+ int32_t rc = 0;
+ struct msm_sensor_ctrl_t *s_ctrl;
+
+ rc = msm_sensor_i2c_probe(client, id);
+
+ if (client->dev.platform_data == NULL) {
+ pr_err("%s: NULL sensor data\n", __func__);
+ return -EFAULT;
+ }
+
+ s_ctrl = client->dev.platform_data;
+ if (s_ctrl->sensordata->pmic_gpio_enable)
+ lcd_camera_power_onoff(0);
+
+ return rc;
+}
static struct i2c_driver ov5647_i2c_driver = {
.id_table = ov5647_i2c_id,
- .probe = msm_sensor_i2c_probe,
+ .probe = ov5647_sensor_i2c_probe,
.driver = {
.name = SENSOR_NAME,
},
diff --git a/drivers/media/video/msm/sensors/ov7692_qrd_v4l2.c b/drivers/media/video/msm/sensors/ov7692_qrd_v4l2.c
index f33d303..4373e22 100644
--- a/drivers/media/video/msm/sensors/ov7692_qrd_v4l2.c
+++ b/drivers/media/video/msm/sensors/ov7692_qrd_v4l2.c
@@ -467,6 +467,61 @@
{SENSOR_NAME, (kernel_ulong_t)&ov7692_s_ctrl},
{ }
};
+static int ov7692_pwdn_gpio;
+static int ov7692_reset_gpio;
+
+static int ov7692_probe_init_gpio(const struct msm_camera_sensor_info *data)
+{
+ int rc = 0;
+ CDBG("%s: entered\n", __func__);
+
+ ov7692_pwdn_gpio = data->sensor_pwd;
+ ov7692_reset_gpio = data->sensor_reset ;
+
+ CDBG("%s: pwdn_gpio:%d, reset_gpio:%d\n", __func__,
+ ov7692_pwdn_gpio, ov7692_reset_gpio);
+
+ if (data->sensor_reset_enable)
+ gpio_direction_output(data->sensor_reset, 1);
+
+ gpio_direction_output(data->sensor_pwd, 1);
+
+ return rc;
+
+}
+static void ov7692_power_on(void)
+{
+ CDBG("%s\n", __func__);
+ gpio_set_value(ov7692_pwdn_gpio, 0);
+}
+
+static void ov7692_power_down(void)
+{
+ CDBG("%s\n", __func__);
+ gpio_set_value(ov7692_pwdn_gpio, 1);
+}
+
+int32_t ov7692_sensor_i2c_probe(struct i2c_client *client,
+ const struct i2c_device_id *id)
+{
+ int32_t rc = 0;
+ struct msm_sensor_ctrl_t *s_ctrl;
+ rc = msm_sensor_i2c_probe(client, id);
+
+ ov7692_power_down();
+
+ if (client->dev.platform_data == NULL) {
+ pr_err("%s: NULL sensor data\n", __func__);
+ return -EFAULT;
+ }
+
+ s_ctrl = client->dev.platform_data;
+ if (s_ctrl->sensordata->pmic_gpio_enable)
+ lcd_camera_power_onoff(0);
+
+ return rc;
+
+}
static struct i2c_driver ov7692_i2c_driver = {
.id_table = ov7692_i2c_id,
@@ -504,39 +559,6 @@
.video = &ov7692_subdev_video_ops,
};
-static int ov7692_pwdn_gpio;
-static int ov7692_reset_gpio;
-
-static int ov7692_probe_init_gpio(const struct msm_camera_sensor_info *data)
-{
- int rc = 0;
- CDBG("%s: entered\n", __func__);
-
- ov7692_pwdn_gpio = data->sensor_pwd;
- ov7692_reset_gpio = data->sensor_reset ;
-
- CDBG("%s: pwdn_gpio:%d, reset_gpio:%d\n", __func__,
- ov7692_pwdn_gpio, ov7692_reset_gpio);
-
- if (data->sensor_reset_enable)
- gpio_direction_output(data->sensor_reset, 1);
-
- gpio_direction_output(data->sensor_pwd, 1);
-
- return rc;
-
-}
-static void ov7692_power_on(void)
-{
- CDBG("%s\n", __func__);
- gpio_set_value(ov7692_pwdn_gpio, 0);
-}
-
-static void ov7692_power_down(void)
-{
- CDBG("%s\n", __func__);
- gpio_set_value(ov7692_pwdn_gpio, 1);
-}
static int32_t ov7692_i2c_txdata(struct i2c_client *ov7692_client,
unsigned short saddr,
unsigned char *txdata, int length)