msm: camera: Add i2c mux support for native 3D camera
Signed-off-by: Nishant Pandit <npandit@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c
index 87896df..4c29fd3 100644
--- a/arch/arm/mach-msm/board-msm8960.c
+++ b/arch/arm/mach-msm/board-msm8960.c
@@ -475,7 +475,7 @@
},
},
};
-static struct gpiomux_setting cam_settings[4] = {
+static struct gpiomux_setting cam_settings[] = {
{
.func = GPIOMUX_FUNC_GPIO, /*suspend*/
.drv = GPIOMUX_DRV_2MA,
@@ -499,9 +499,34 @@
.drv = GPIOMUX_DRV_8MA,
.pull = GPIOMUX_PULL_UP,
},
+
+ {
+ .func = GPIOMUX_FUNC_5, /*active 4*/
+ .drv = GPIOMUX_DRV_8MA,
+ .pull = GPIOMUX_PULL_UP,
+ },
+
+ {
+ .func = GPIOMUX_FUNC_6, /*active 5*/
+ .drv = GPIOMUX_DRV_8MA,
+ .pull = GPIOMUX_PULL_UP,
+ },
+
+ {
+ .func = GPIOMUX_FUNC_2, /*active 6*/
+ .drv = GPIOMUX_DRV_2MA,
+ .pull = GPIOMUX_PULL_UP,
+ },
+
+ {
+ .func = GPIOMUX_FUNC_3, /*active 7*/
+ .drv = GPIOMUX_DRV_8MA,
+ .pull = GPIOMUX_PULL_UP,
+ },
+
};
-static struct msm_gpiomux_config msm8960_cam_configs[] = {
+static struct msm_gpiomux_config msm8960_cam_common_configs[] = {
{
.gpio = 2,
.settings = {
@@ -531,6 +556,23 @@
},
},
{
+ .gpio = 76,
+ .settings = {
+ [GPIOMUX_ACTIVE] = &cam_settings[2],
+ [GPIOMUX_SUSPENDED] = &cam_settings[0],
+ },
+ },
+ {
+ .gpio = 107,
+ .settings = {
+ [GPIOMUX_ACTIVE] = &cam_settings[2],
+ [GPIOMUX_SUSPENDED] = &cam_settings[0],
+ },
+ },
+};
+
+static struct msm_gpiomux_config msm8960_cam_2d_configs[] = {
+ {
.gpio = 18,
.settings = {
[GPIOMUX_ACTIVE] = &cam_settings[3],
@@ -558,20 +600,6 @@
[GPIOMUX_SUSPENDED] = &cam_settings[0],
},
},
- {
- .gpio = 76,
- .settings = {
- [GPIOMUX_ACTIVE] = &cam_settings[2],
- [GPIOMUX_SUSPENDED] = &cam_settings[0],
- },
- },
- {
- .gpio = 107,
- .settings = {
- [GPIOMUX_ACTIVE] = &cam_settings[2],
- [GPIOMUX_SUSPENDED] = &cam_settings[0],
- },
- },
};
static struct gpiomux_setting cyts_resout_sus_cfg = {
@@ -892,12 +920,19 @@
#ifdef CONFIG_MSM_CAMERA
-static uint16_t msm_cam_gpio_tbl[] = {
+static uint16_t msm_cam_gpio_2d_tbl[] = {
5, /*CAMIF_MCLK*/
20, /*CAMIF_I2C_DATA*/
21, /*CAMIF_I2C_CLK*/
};
+static struct msm_camera_gpio_conf gpio_conf = {
+ .cam_gpiomux_conf_tbl = msm8960_cam_2d_configs,
+ .cam_gpiomux_conf_tbl_size = ARRAY_SIZE(msm8960_cam_2d_configs),
+ .cam_gpio_tbl = msm_cam_gpio_2d_tbl,
+ .cam_gpio_tbl_size = ARRAY_SIZE(msm_cam_gpio_2d_tbl),
+};
+
#define VFE_CAMIF_TIMER1_GPIO 2
#define VFE_CAMIF_TIMER2_GPIO 3
#define VFE_CAMIF_TIMER3_GPIO_INT 4
@@ -921,26 +956,17 @@
};
#endif
-#ifdef CONFIG_IMX074
-static struct msm_camera_sensor_platform_info sensor_board_info = {
- .mount_angle = 90
-};
-#endif
-
-struct msm_camera_device_platform_data msm_camera_csi0_device_data = {
- .ioclk.mclk_clk_rate = 24000000,
- .ioclk.vfe_clk_rate = 228570000,
- .csid_core = 0,
- .cam_gpio_tbl = msm_cam_gpio_tbl,
- .cam_gpio_tbl_size = ARRAY_SIZE(msm_cam_gpio_tbl),
-};
-
-struct msm_camera_device_platform_data msm_camera_csi1_device_data = {
- .ioclk.mclk_clk_rate = 24000000,
- .ioclk.vfe_clk_rate = 228570000,
- .csid_core = 1,
- .cam_gpio_tbl = msm_cam_gpio_tbl,
- .cam_gpio_tbl_size = ARRAY_SIZE(msm_cam_gpio_tbl),
+struct msm_camera_device_platform_data msm_camera_csi_device_data[] = {
+ {
+ .ioclk.mclk_clk_rate = 24000000,
+ .ioclk.vfe_clk_rate = 228570000,
+ .csid_core = 0,
+ },
+ {
+ .ioclk.mclk_clk_rate = 24000000,
+ .ioclk.vfe_clk_rate = 228570000,
+ .csid_core = 1,
+ },
};
#ifdef CONFIG_IMX074
@@ -951,17 +977,23 @@
#endif
};
-static struct msm_camera_sensor_info msm_camera_sensor_imx074_data = {
- .sensor_name = "imx074",
+static struct msm_camera_sensor_platform_info sensor_board_info_imx074 = {
+ .mount_angle = 90,
.sensor_reset = 107,
.sensor_pwd = 85,
.vcm_pwd = 0,
.vcm_enable = 1,
- .pdata = &msm_camera_csi0_device_data,
+};
+
+static struct msm_camera_sensor_info msm_camera_sensor_imx074_data = {
+ .sensor_name = "imx074",
+ .pdata = &msm_camera_csi_device_data[0],
.flash_data = &flash_imx074,
.strobe_flash_data = &strobe_flash_xenon,
- .sensor_platform_info = &sensor_board_info,
- .csi_if = 1
+ .sensor_platform_info = &sensor_board_info_imx074,
+ .gpio_conf = &gpio_conf,
+ .csi_if = 1,
+ .camera_type = BACK_CAMERA_2D,
};
struct platform_device msm8960_camera_sensor_imx074 = {
@@ -976,15 +1008,22 @@
.flash_type = MSM_CAMERA_FLASH_NONE,
};
-static struct msm_camera_sensor_info msm_camera_sensor_ov2720_data = {
- .sensor_name = "ov2720",
+static struct msm_camera_sensor_platform_info sensor_board_info_ov2720 = {
+ .mount_angle = 0,
.sensor_reset = 76,
.sensor_pwd = 85,
.vcm_pwd = 0,
.vcm_enable = 1,
- .pdata = &msm_camera_csi1_device_data,
+};
+
+static struct msm_camera_sensor_info msm_camera_sensor_ov2720_data = {
+ .sensor_name = "ov2720",
+ .pdata = &msm_camera_csi_device_data[1],
.flash_data = &flash_ov2720,
- .csi_if = 1
+ .sensor_platform_info = &sensor_board_info_ov2720,
+ .gpio_conf = &gpio_conf,
+ .csi_if = 1,
+ .camera_type = FRONT_CAMERA_2D,
};
struct platform_device msm8960_camera_sensor_ov2720 = {
@@ -999,16 +1038,22 @@
.flash_type = MSM_CAMERA_FLASH_LED,
};
-static struct msm_camera_sensor_info msm_camera_sensor_qs_mt9p017_data = {
- .sensor_name = "qs_mt9p017",
+static struct msm_camera_sensor_platform_info sensor_board_info_qs_mt9p017 = {
+ .mount_angle = 270,
.sensor_reset = 107,
.sensor_pwd = 85,
.vcm_pwd = 0,
.vcm_enable = 1,
- .pdata = &msm_camera_csi0_device_data,
+};
+
+static struct msm_camera_sensor_info msm_camera_sensor_qs_mt9p017_data = {
+ .sensor_name = "qs_mt9p017",
+ .pdata = &msm_camera_csi_device_data[0],
.flash_data = &flash_qs_mt9p017,
- .sensor_platform_info = &sensor_board_info,
- .csi_if = 1
+ .sensor_platform_info = &sensor_board_info_qs_mt9p017,
+ .gpio_conf = &gpio_conf,
+ .csi_if = 1,
+ .camera_type = BACK_CAMERA_3D,
};
struct platform_device msm8960_camera_sensor_qs_mt9p017 = {
@@ -2085,8 +2130,8 @@
return rc;
}
- msm_gpiomux_install(msm8960_cam_configs,
- ARRAY_SIZE(msm8960_cam_configs));
+ msm_gpiomux_install(msm8960_cam_common_configs,
+ ARRAY_SIZE(msm8960_cam_common_configs));
msm_gpiomux_install(msm8960_gpiomux_configs,
ARRAY_SIZE(msm8960_gpiomux_configs));
diff --git a/arch/arm/mach-msm/devices-8960.c b/arch/arm/mach-msm/devices-8960.c
index 08c8435..e346104 100644
--- a/arch/arm/mach-msm/devices-8960.c
+++ b/arch/arm/mach-msm/devices-8960.c
@@ -996,6 +996,19 @@
.end = MSM8960_CSIPHY_2LN_IRQ,
.flags = IORESOURCE_IRQ,
},
+ {
+ .name = "s3d_rw",
+ .start = 0x008003E0,
+ .end = 0x008003E0 + SZ_16 - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .name = "s3d_ctl",
+ .start = 0x008020B8,
+ .end = 0x008020B8 + SZ_16 - 1,
+ .flags = IORESOURCE_MEM,
+ },
+
};
int __init msm_get_cam_resources(struct msm_camera_sensor_info *s_info)
diff --git a/arch/arm/mach-msm/include/mach/board.h b/arch/arm/mach-msm/include/mach/board.h
index a537b4f..e0aa28d 100644
--- a/arch/arm/mach-msm/include/mach/board.h
+++ b/arch/arm/mach-msm/include/mach/board.h
@@ -65,8 +65,6 @@
#ifdef CONFIG_MSM_BUS_SCALING
struct msm_bus_scale_pdata *cam_bus_scale_table;
#endif
- uint16_t *cam_gpio_tbl;
- uint8_t cam_gpio_tbl_size;
};
enum msm_camera_csi_data_format {
CSI_8BIT,
@@ -159,8 +157,27 @@
int state;
};
+enum msm_camera_type {
+ BACK_CAMERA_2D,
+ FRONT_CAMERA_2D,
+ BACK_CAMERA_3D,
+ BACK_CAMERA_INT_3D,
+};
+
struct msm_camera_sensor_platform_info {
int mount_angle;
+ int sensor_reset_enable;
+ int sensor_reset;
+ int sensor_pwd;
+ int vcm_pwd;
+ int vcm_enable;
+};
+
+struct msm_camera_gpio_conf {
+ void *cam_gpiomux_conf_tbl;
+ uint8_t cam_gpiomux_conf_tbl_size;
+ uint16_t *cam_gpio_tbl;
+ uint8_t cam_gpio_tbl_size;
};
struct msm_camera_sensor_info {
@@ -181,6 +198,8 @@
struct msm_camera_csi_params csi_params;
struct msm_camera_sensor_strobe_flash_data *strobe_flash_data;
char *eeprom_data;
+ struct msm_camera_gpio_conf *gpio_conf;
+ enum msm_camera_type camera_type;
};
int __init msm_get_cam_resources(struct msm_camera_sensor_info *);
diff --git a/arch/arm/mach-msm/include/mach/camera.h b/arch/arm/mach-msm/include/mach/camera.h
index c0dc909..5b0e019 100644
--- a/arch/arm/mach-msm/include/mach/camera.h
+++ b/arch/arm/mach-msm/include/mach/camera.h
@@ -95,12 +95,6 @@
VPE_MSG_OUTPUT_ST_R,
};
-enum msm_camera_type {
- BACK_CAMERA_2D,
- FRONT_CAMERA_2D,
- BACK_CAMERA_3D,
-};
-
enum msm_stereo_state {
STEREO_VIDEO_IDLE,
STEREO_VIDEO_ACTIVE,
@@ -598,12 +592,19 @@
S_EXIT
};
+enum msm_cam_mode {
+ MODE_R,
+ MODE_L,
+ MODE_DUAL
+};
+
int msm_camio_enable(struct platform_device *dev);
int msm_camio_jpeg_clk_enable(void);
int msm_camio_jpeg_clk_disable(void);
int msm_camio_vpe_clk_enable(uint32_t);
int msm_camio_vpe_clk_disable(void);
+void msm_camio_mode_config(enum msm_cam_mode mode);
int msm_camio_clk_enable(enum msm_camio_clk_type clk);
int msm_camio_clk_disable(enum msm_camio_clk_type clk);
int msm_camio_clk_config(uint32_t freq);
@@ -619,6 +620,8 @@
void msm_camio_vfe_blk_reset(void);
+int32_t msm_camio_3d_enable(const struct msm_camera_sensor_info *sinfo);
+void msm_camio_3d_disable(void);
void msm_camio_clk_sel(enum msm_camio_clk_src_type);
void msm_camio_disable(struct platform_device *);
int msm_camio_probe_on(struct platform_device *);
diff --git a/drivers/media/video/msm/msm_io_8960.c b/drivers/media/video/msm/msm_io_8960.c
index 96c096c..436ce52 100644
--- a/drivers/media/video/msm/msm_io_8960.c
+++ b/drivers/media/video/msm/msm_io_8960.c
@@ -15,6 +15,7 @@
#include <linux/io.h>
#include <linux/regulator/consumer.h>
#include <mach/gpio.h>
+#include <mach/gpiomux.h>
#include <mach/board.h>
#include <mach/camera.h>
#include <mach/vreg.h>
@@ -134,10 +135,10 @@
static struct msm_camera_io_clk camio_clk;
static struct platform_device *camio_dev;
-static struct resource *csidio, *csiphyio;
-static struct resource *csid_mem, *csiphy_mem;
+static struct resource *csidio, *csiphyio, *s3drw_io, *s3dctl_io;
+static struct resource *csid_mem, *csiphy_mem, *s3drw_mem, *s3dctl_mem;
static struct resource *csid_irq, *csiphy_irq;
-void __iomem *csidbase, *csiphybase;
+void __iomem *csidbase, *csiphybase, *s3d_rw, *s3d_ctl;
static struct msm_bus_vectors cam_init_vectors[] = {
{
@@ -1043,27 +1044,32 @@
static int config_gpio_table(int gpio_en)
{
struct msm_camera_sensor_info *sinfo = camio_dev->dev.platform_data;
- struct msm_camera_device_platform_data *camdev = sinfo->pdata;
+ struct msm_camera_gpio_conf *gpio_conf = sinfo->gpio_conf;
int rc = 0, i = 0;
- if (camdev->cam_gpio_tbl == NULL) {
- pr_err("%s: Invalid NULL cam gpio table\n", __func__);
+ if (gpio_conf->cam_gpio_tbl == NULL || gpio_conf->cam_gpiomux_conf_tbl
+ == NULL) {
+ pr_err("%s: Invalid NULL cam gpio config table\n", __func__);
return -EFAULT;
}
if (gpio_en) {
- for (i = 0; i < camdev->cam_gpio_tbl_size; i++) {
- rc = gpio_request(camdev->cam_gpio_tbl[i], "CAM_GPIO");
+ msm_gpiomux_install((struct msm_gpiomux_config *)gpio_conf->
+ cam_gpiomux_conf_tbl,
+ gpio_conf->cam_gpiomux_conf_tbl_size);
+ for (i = 0; i < gpio_conf->cam_gpio_tbl_size; i++) {
+ rc = gpio_request(gpio_conf->cam_gpio_tbl[i],
+ "CAM_GPIO");
if (rc < 0) {
pr_err("%s not able to get gpio\n", __func__);
for (i--; i >= 0; i--)
- gpio_free(camdev->cam_gpio_tbl[i]);
+ gpio_free(gpio_conf->cam_gpio_tbl[i]);
break;
}
}
} else {
- for (i = 0; i < camdev->cam_gpio_tbl_size; i++)
- gpio_free(camdev->cam_gpio_tbl[i]);
+ for (i = 0; i < gpio_conf->cam_gpio_tbl_size; i++)
+ gpio_free(gpio_conf->cam_gpio_tbl[i]);
}
return rc;
}
@@ -1185,6 +1191,72 @@
msm_camio_disable_all_clks(csid_core);
}
+int32_t msm_camio_3d_enable(const struct msm_camera_sensor_info *s_info)
+{
+ int32_t val = 0, rc = 0;
+ char s3drw[] = "s3d_rw";
+ char s3dctl[] = "s3d_ctl";
+ struct platform_device *pdev = camio_dev;
+ pdev->resource = s_info->resource;
+ pdev->num_resources = s_info->num_resources;
+
+ s3drw_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, s3drw);
+ if (!s3drw_mem) {
+ pr_err("%s: no mem resource?\n", __func__);
+ return -ENODEV;
+ }
+ s3dctl_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM, s3dctl);
+ if (!s3dctl_mem) {
+ pr_err("%s: no mem resource?\n", __func__);
+ return -ENODEV;
+ }
+ s3drw_io = request_mem_region(s3drw_mem->start,
+ resource_size(s3drw_mem), pdev->name);
+ if (!s3drw_io)
+ return -EBUSY;
+
+ s3d_rw = ioremap(s3drw_mem->start,
+ resource_size(s3drw_mem));
+ if (!s3d_rw) {
+ rc = -ENOMEM;
+ goto s3drw_nomem;
+ }
+ s3dctl_io = request_mem_region(s3dctl_mem->start,
+ resource_size(s3dctl_mem), pdev->name);
+ if (!s3dctl_io) {
+ rc = -EBUSY;
+ goto s3dctl_busy;
+ }
+ s3d_ctl = ioremap(s3dctl_mem->start,
+ resource_size(s3dctl_mem));
+ if (!s3d_ctl) {
+ rc = -ENOMEM;
+ goto s3dctl_nomem;
+ }
+
+ val = msm_io_r(s3d_rw);
+ msm_io_w((val | 0x200), s3d_rw);
+ return rc;
+
+s3dctl_nomem:
+ release_mem_region(s3dctl_mem->start, resource_size(s3dctl_mem));
+s3dctl_busy:
+ iounmap(s3d_rw);
+s3drw_nomem:
+ release_mem_region(s3drw_mem->start, resource_size(s3drw_mem));
+return rc;
+}
+
+void msm_camio_3d_disable(void)
+{
+ int32_t val = 0;
+ msm_io_w((val & ~0x200), s3d_rw);
+ iounmap(s3d_ctl);
+ release_mem_region(s3dctl_mem->start, resource_size(s3dctl_mem));
+ iounmap(s3d_rw);
+ release_mem_region(s3drw_mem->start, resource_size(s3drw_mem));
+}
+
int msm_camio_sensor_clk_on(struct platform_device *pdev)
{
int rc = 0;
@@ -1338,6 +1410,23 @@
return rc;
}
+void msm_camio_mode_config(enum msm_cam_mode mode)
+{
+ uint32_t val;
+ val = msm_io_r(s3d_ctl);
+ if (mode == MODE_DUAL) {
+ msm_io_w(val | 0x3, s3d_ctl);
+ } else if (mode == MODE_L) {
+ msm_io_w(((val | 0x2) & ~(0x1)), s3d_ctl);
+ val = msm_io_r(s3d_ctl);
+ CDBG("the camio mode config left value is %d\n", val);
+ } else {
+ msm_io_w(((val | 0x1) & ~(0x2)), s3d_ctl);
+ val = msm_io_r(s3d_ctl);
+ CDBG("the camio mode config right value is %d\n", val);
+ }
+}
+
void msm_camio_set_perf_lvl(enum msm_bus_perf_setting perf_setting)
{
static uint32_t bus_perf_client;
diff --git a/drivers/media/video/msm/qs_mt9p017.c b/drivers/media/video/msm/qs_mt9p017.c
index f5bc070..d160af8 100644
--- a/drivers/media/video/msm/qs_mt9p017.c
+++ b/drivers/media/video/msm/qs_mt9p017.c
@@ -857,13 +857,16 @@
static int32_t qs_mt9p017_power_up(const struct msm_camera_sensor_info *data)
{
int32_t rc = 0;
- rc = gpio_request(data->sensor_reset, "qs_mt9p017");
+ rc = gpio_request(data->sensor_platform_info->sensor_reset,
+ "qs_mt9p017");
CDBG("%s\n", __func__);
if (!rc) {
CDBG("sensor_reset = %d\n", rc);
- gpio_direction_output(data->sensor_reset, 0);
+ gpio_direction_output(data->sensor_platform_info->sensor_reset
+ , 0);
msleep(50);
- gpio_set_value_cansleep(data->sensor_reset, 1);
+ gpio_set_value_cansleep(data->sensor_platform_info->
+ sensor_reset, 1);
msleep(20);
} else {
CDBG("sensor reset fail");
@@ -876,8 +879,8 @@
static int32_t qs_mt9p017_power_down(const struct msm_camera_sensor_info *data)
{
- gpio_set_value_cansleep(data->sensor_reset, 0);
- gpio_free(data->sensor_reset);
+ gpio_set_value_cansleep(data->sensor_platform_info->sensor_reset, 0);
+ gpio_free(data->sensor_platform_info->sensor_reset);
return 0;
}
@@ -1154,7 +1157,7 @@
s->s_release = qs_mt9p017_sensor_release;
s->s_config = qs_mt9p017_sensor_config;
s->s_mount_angle = 270;
-
+ s->s_camera_type = info->camera_type;
qs_mt9p017_power_down(info);
return rc;
diff --git a/drivers/media/video/msm/sensors/imx074_v4l2.c b/drivers/media/video/msm/sensors/imx074_v4l2.c
index 0c9e864..fd0c310 100644
--- a/drivers/media/video/msm/sensors/imx074_v4l2.c
+++ b/drivers/media/video/msm/sensors/imx074_v4l2.c
@@ -971,9 +971,9 @@
}
static int imx074_probe_init_done(const struct msm_camera_sensor_info *data)
{
- gpio_set_value_cansleep(data->sensor_reset, 0);
- gpio_direction_input(data->sensor_reset);
- gpio_free(data->sensor_reset);
+ gpio_set_value_cansleep(data->sensor_platform_info->sensor_reset, 0);
+ gpio_direction_input(data->sensor_platform_info->sensor_reset);
+ gpio_free(data->sensor_platform_info->sensor_reset);
return 0;
}
@@ -1055,13 +1055,16 @@
int32_t rc = 0;
unsigned short chipidl, chipidh;
CDBG("%s: %d\n", __func__, __LINE__);
- rc = gpio_request(data->sensor_reset, "imx074");
+ rc = gpio_request(data->sensor_platform_info
+ ->sensor_reset, "imx074");
CDBG("imx074_probe_init_sensor\n");
if (!rc) {
CDBG("sensor_reset = %d\n", rc);
- gpio_direction_output(data->sensor_reset, 0);
+ gpio_direction_output(data->sensor_platform_info
+ ->sensor_reset, 0);
usleep_range(5000, 6000);
- gpio_set_value_cansleep(data->sensor_reset, 1);
+ gpio_set_value_cansleep(data->sensor_platform_info
+ ->sensor_reset, 1);
usleep_range(5000, 6000);
} else {
CDBG("gpio reset fail");
@@ -1099,9 +1102,11 @@
int32_t rc = 0;
CDBG("imx074 enable AF actuator, gpio = %d\n",
imx074_ctrl->sensordata->vcm_pwd);
- rc = gpio_request(imx074_ctrl->sensordata->vcm_pwd, "imx074");
+ rc = gpio_request(imx074_ctrl->sensordata->sensor_platform_info
+ ->vcm_pwd, "imx074");
if (!rc) {
- gpio_direction_output(imx074_ctrl->sensordata->vcm_pwd, 1);
+ gpio_direction_output(imx074_ctrl->sensordata->
+ sensor_platform_info->vcm_pwd, 1);
msleep(20);
rc = imx074_af_init();
if (rc < 0)
@@ -1113,8 +1118,9 @@
}
static void imx074_poweroff_af(void)
{
- gpio_set_value_cansleep(imx074_ctrl->sensordata->vcm_pwd, 0);
- gpio_free(imx074_ctrl->sensordata->vcm_pwd);
+ gpio_set_value_cansleep(imx074_ctrl->sensordata->sensor_platform_info
+ ->vcm_pwd, 0);
+ gpio_free(imx074_ctrl->sensordata->sensor_platform_info->vcm_pwd);
}
/* camsensor_iu060f_imx074_reset */
int imx074_sensor_open_init(const struct msm_camera_sensor_info *data)
@@ -1359,10 +1365,12 @@
if (machine_is_msm8x60_fluid())
imx074_poweroff_af();
imx074_power_down();
- gpio_set_value_cansleep(imx074_ctrl->sensordata->sensor_reset, 0);
+ gpio_set_value_cansleep(imx074_ctrl->sensordata->sensor_platform_info
+ ->sensor_reset, 0);
usleep_range(5000, 6000);
- gpio_direction_input(imx074_ctrl->sensordata->sensor_reset);
- gpio_free(imx074_ctrl->sensordata->sensor_reset);
+ gpio_direction_input(imx074_ctrl->sensordata->sensor_platform_info
+ ->sensor_reset);
+ gpio_free(imx074_ctrl->sensordata->sensor_platform_info->sensor_reset);
CDBG("imx074_release completed\n");
mutex_unlock(&imx074_mut);
@@ -1385,7 +1393,7 @@
s->s_init = imx074_sensor_open_init;
s->s_release = imx074_sensor_release;
s->s_config = imx074_sensor_config;
- s->s_camera_type = BACK_CAMERA_2D;
+ s->s_camera_type = info->camera_type;
s->s_mount_angle = info->sensor_platform_info->mount_angle;
imx074_probe_init_done(info);
return rc;
diff --git a/drivers/media/video/msm/sensors/msm_sensor.c b/drivers/media/video/msm/sensors/msm_sensor.c
index cfa6c3f..05e128e 100644
--- a/drivers/media/video/msm/sensors/msm_sensor.c
+++ b/drivers/media/video/msm/sensors/msm_sensor.c
@@ -576,12 +576,15 @@
int32_t rc = 0;
CDBG("%s: %d\n", __func__, __LINE__);
msm_camio_clk_rate_set(MSM_SENSOR_MCLK_24HZ);
- rc = gpio_request(data->sensor_reset, "SENSOR_NAME");
+ rc = gpio_request(data->sensor_platform_info->sensor_reset,
+ "SENSOR_NAME");
if (!rc) {
CDBG("%s: reset sensor\n", __func__);
- gpio_direction_output(data->sensor_reset, 0);
+ gpio_direction_output(data->sensor_platform_info->sensor_reset,
+ 0);
usleep_range(1000, 2000);
- gpio_set_value_cansleep(data->sensor_reset, 1);
+ gpio_set_value_cansleep(data->sensor_platform_info->
+ sensor_reset, 1);
usleep_range(1000, 2000);
} else {
CDBG("%s: gpio request fail", __func__);
@@ -592,9 +595,9 @@
int32_t msm_sensor_power_down(const struct msm_camera_sensor_info *data)
{
CDBG("%s\n", __func__);
- gpio_set_value_cansleep(data->sensor_reset, 0);
+ gpio_set_value_cansleep(data->sensor_platform_info->sensor_reset, 0);
usleep_range(1000, 2000);
- gpio_free(data->sensor_reset);
+ gpio_free(data->sensor_platform_info->sensor_reset);
return 0;
}
@@ -707,7 +710,7 @@
s->s_init = s_ctrl->func_tbl->sensor_open_init;
s->s_release = s_ctrl->func_tbl->sensor_release;
s->s_config = s_ctrl->func_tbl->sensor_config;
- s->s_camera_type = s_ctrl->camera_type;
+ s->s_camera_type = info->camera_type;
if (info->sensor_platform_info != NULL)
s->s_mount_angle = info->sensor_platform_info->mount_angle;
else
diff --git a/drivers/media/video/msm/sensors/msm_sensor.h b/drivers/media/video/msm/sensors/msm_sensor.h
index 08904b4..fedd485 100644
--- a/drivers/media/video/msm/sensors/msm_sensor.h
+++ b/drivers/media/video/msm/sensors/msm_sensor.h
@@ -157,7 +157,6 @@
enum msm_sensor_resolution_t pict_res;
enum msm_sensor_resolution_t curr_res;
enum msm_sensor_cam_mode_t cam_mode;
- enum msm_camera_type camera_type;
struct mutex *msm_sensor_mutex;
struct msm_camera_csi2_params *curr_csi_params;
diff --git a/drivers/media/video/msm/sensors/ov2720.c b/drivers/media/video/msm/sensors/ov2720.c
index 23e623a..be15b779 100644
--- a/drivers/media/video/msm/sensors/ov2720.c
+++ b/drivers/media/video/msm/sensors/ov2720.c
@@ -517,7 +517,6 @@
.sensor_id_info = &ov2720_id_info,
.sensor_exp_gain_info = &ov2720_exp_gain_info,
.cam_mode = MSM_SENSOR_MODE_INVALID,
- .camera_type = FRONT_CAMERA_2D,
.csi_params = &ov2720_csi_params_array[0],
.msm_sensor_mutex = &ov2720_mut,
.sensor_i2c_driver = &ov2720_i2c_driver,