msm: camera: Remove gpio call back function from board file
Moved camera gpio on and off functions to msm_io_8960 file
Exposure camera gpio numbers from board file to msm_io_8960 file.
Signed-off-by: Kevin Chan <ktchan@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c
index 66ead3f..145459b 100644
--- a/arch/arm/mach-msm/board-msm8960.c
+++ b/arch/arm/mach-msm/board-msm8960.c
@@ -852,7 +852,7 @@
#ifdef CONFIG_MSM_CAMERA
-static int msm_cam_gpio_tbl[] = {
+static uint16_t msm_cam_gpio_tbl[] = {
5, /*CAMIF_MCLK*/
20, /*CAMIF_I2C_DATA*/
21, /*CAMIF_I2C_CLK*/
@@ -887,58 +887,20 @@
};
#endif
-static int config_gpio_table(int gpio_en)
-{
- int rc = 0, i = 0;
- if (gpio_en) {
- for (i = 0; i < ARRAY_SIZE(msm_cam_gpio_tbl); i++) {
- rc = gpio_request(msm_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(msm_cam_gpio_tbl[i]);
- break;
- }
- }
- } else {
- for (i = 0; i < ARRAY_SIZE(msm_cam_gpio_tbl); i++)
- gpio_free(msm_cam_gpio_tbl[i]);
- }
- return rc;
-}
-
-static int config_camera_on_gpios(void)
-{
- int rc = 0;
-
- rc = config_gpio_table(1);
- if (rc < 0) {
- printk(KERN_ERR "%s: CAMSENSOR gpio table request"
- "failed\n", __func__);
- return rc;
- }
- return rc;
-}
-
-static void config_camera_off_gpios(void)
-{
- config_gpio_table(0);
-}
-
struct msm_camera_device_platform_data msm_camera_csi0_device_data = {
- .camera_gpio_on = config_camera_on_gpios,
- .camera_gpio_off = config_camera_off_gpios,
.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 = {
- .camera_gpio_on = config_camera_on_gpios,
- .camera_gpio_off = config_camera_off_gpios,
.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),
};
#ifdef CONFIG_IMX074
diff --git a/arch/arm/mach-msm/include/mach/board.h b/arch/arm/mach-msm/include/mach/board.h
index 53d56f9..2576d91 100644
--- a/arch/arm/mach-msm/include/mach/board.h
+++ b/arch/arm/mach-msm/include/mach/board.h
@@ -75,6 +75,8 @@
#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,
diff --git a/drivers/media/video/msm/msm_io_8960.c b/drivers/media/video/msm/msm_io_8960.c
index c07e8a4..554aeb1 100644
--- a/drivers/media/video/msm/msm_io_8960.c
+++ b/drivers/media/video/msm/msm_io_8960.c
@@ -1057,6 +1057,34 @@
return rc;
}
+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;
+ int rc = 0, i = 0;
+
+ if (camdev->cam_gpio_tbl == NULL) {
+ pr_err("%s: Invalid NULL cam gpio 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");
+ 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]);
+ break;
+ }
+ }
+ } else {
+ for (i = 0; i < camdev->cam_gpio_tbl_size; i++)
+ gpio_free(camdev->cam_gpio_tbl[i]);
+ }
+ return rc;
+}
+
int msm_camio_enable(struct platform_device *pdev)
{
int rc = 0;
@@ -1151,7 +1179,7 @@
common_fail:
msm_camio_disable_all_clks(csid_core);
msm_camera_vreg_disable();
- camdev->camera_gpio_off();
+ config_gpio_table(0);
return rc;
}
@@ -1186,7 +1214,7 @@
msm_camera_vreg_enable(pdev);
msleep(20);
- rc = camdev->camera_gpio_on();
+ rc = config_gpio_table(1);
if (rc < 0)
return rc;
return msm_camio_clk_enable(CAMIO_CAM_MCLK_CLK);
@@ -1194,10 +1222,11 @@
int msm_camio_sensor_clk_off(struct platform_device *pdev)
{
- struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data;
- struct msm_camera_device_platform_data *camdev = sinfo->pdata;
+ int rc = 0;
msm_camera_vreg_disable();
- camdev->camera_gpio_off();
+ rc = config_gpio_table(0);
+ if (rc < 0)
+ return rc;
return msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK);
}
@@ -1214,7 +1243,7 @@
camio_dev = pdev;
camio_clk = camdev->ioclk;
- rc = camdev->camera_gpio_on();
+ rc = config_gpio_table(1);
if (rc < 0)
return rc;
msm_camera_vreg_enable(pdev);
@@ -1223,10 +1252,11 @@
int msm_camio_probe_off(struct platform_device *pdev)
{
- struct msm_camera_sensor_info *sinfo = pdev->dev.platform_data;
- struct msm_camera_device_platform_data *camdev = sinfo->pdata;
+ int rc = 0;
msm_camera_vreg_disable();
- camdev->camera_gpio_off();
+ rc = config_gpio_table(0);
+ if (rc < 0)
+ return rc;
return msm_camio_clk_disable(CAMIO_CAM_MCLK_CLK);
}