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);
 }