Explorar o código

msm: camera: csiphy: Extend CSIPHY hw block support

Increase CSIPHY hw block support 8 for v780 and future
platforms.

CRs-Fixed: 3042539
Change-Id: Ib8c3c2bdde583ff5dc5ddb0a7b818dc8723b270f
Signed-off-by: Jigarkumar Zala <[email protected]>
Jigarkumar Zala %!s(int64=3) %!d(string=hai) anos
pai
achega
1c29fe16b5

+ 28 - 5
drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.c

@@ -229,9 +229,14 @@ int cam_csiphy_dump_status_reg(struct csiphy_device *csiphy_dev)
 		return -EINVAL;
 	}
 
+	if (!g_phy_data[soc_info->index].base_address) {
+		CAM_ERR(CAM_CSIPHY, "Invalid cphy_idx: %d", soc_info->index);
+		return -EINVAL;
+	}
+
 	csiphy_reg = &csiphy_dev->ctrl_reg->csiphy_reg;
 	status_regs = csiphy_reg->status_reg_params;
-	phybase = soc_info->reg_map[0].mem_base;
+	phybase = g_phy_data[soc_info->index].base_address;
 
 	if (!status_regs) {
 		CAM_ERR(CAM_CSIPHY, "2ph/3ph status offset not set");
@@ -1416,6 +1421,11 @@ int cam_csiphy_util_update_aon_registration
 		return -EINVAL;
 	}
 
+	if (!g_phy_data[phy_idx].base_address) {
+		CAM_ERR(CAM_CSIPHY, "Invalid PHY idx: %d from Sensor user", phy_idx);
+		return -EINVAL;
+	}
+
 	g_phy_data[phy_idx].enable_aon_support = is_aon_user;
 
 	return 0;
@@ -1433,6 +1443,11 @@ int cam_csiphy_util_update_aon_ops(
 		return -ENODEV;
 	}
 
+	if (!g_phy_data[phy_idx].base_address) {
+		CAM_ERR(CAM_CSIPHY, "phy_idx: %d is not supported", phy_idx);
+		return -EINVAL;
+	}
+
 	if (!g_phy_data[phy_idx].aon_sel_param) {
 		CAM_ERR(CAM_CSIPHY, "AON select parameters are null");
 		return -EINVAL;
@@ -1680,6 +1695,12 @@ int32_t cam_csiphy_core_cfg(void *phy_dev,
 		return -EINVAL;
 	}
 
+	if (!g_phy_data[soc_info->index].base_address) {
+		CAM_ERR(CAM_CSIPHY, "CSIPHY hw is not avaialble at index: %d",
+			soc_info->index);
+		return -EINVAL;
+	}
+
 	csiphybase = soc_info->reg_map[0].mem_base;
 	csiphy_reg = &csiphy_dev->ctrl_reg->csiphy_reg;
 	status_reg_ptr = csiphy_reg->status_reg_params;
@@ -2250,19 +2271,19 @@ release_mutex:
 	return rc;
 }
 
-void cam_csiphy_register_baseaddress(struct csiphy_device *csiphy_dev)
+int cam_csiphy_register_baseaddress(struct csiphy_device *csiphy_dev)
 {
 	int phy_idx;
 
 	if (!csiphy_dev) {
-		CAM_WARN(CAM_CSIPHY, "Data is NULL");
-		return;
+		CAM_ERR(CAM_CSIPHY, "Data is NULL");
+		return -EINVAL;
 	}
 
 	if (csiphy_dev->soc_info.index >= MAX_CSIPHY) {
 		CAM_ERR(CAM_CSIPHY, "Invalid soc index: %u Max soc index: %u",
 			csiphy_dev->soc_info.index, MAX_CSIPHY);
-		return;
+		return -EINVAL;
 	}
 
 	phy_idx = csiphy_dev->soc_info.index;
@@ -2273,4 +2294,6 @@ void cam_csiphy_register_baseaddress(struct csiphy_device *csiphy_dev)
 	g_phy_data[phy_idx].aon_sel_param =
 		csiphy_dev->ctrl_reg->csiphy_reg.aon_sel_params;
 	g_phy_data[phy_idx].enable_aon_support = false;
+
+	return 0;
 }

+ 1 - 1
drivers/cam_sensor_module/cam_csiphy/cam_csiphy_core.h

@@ -54,7 +54,7 @@ void cam_csiphy_shutdown(struct csiphy_device *csiphy_dev);
  *
  * This API registers base address per soc_idx
  */
-void cam_csiphy_register_baseaddress(struct csiphy_device *csiphy_dev);
+int cam_csiphy_register_baseaddress(struct csiphy_device *csiphy_dev);
 
 /**
  * @get_access : Get Access for the Main Camera over AON Camera

+ 10 - 3
drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.c

@@ -320,11 +320,14 @@ static int cam_csiphy_component_bind(struct device *dev,
 			"Error allocating workqueue for csiphy: %d",
 			new_csiphy_dev->soc_info.index);
 		rc = -ENOMEM;
-		goto csiphy_unregister_subdev;
+		goto cpas_unregister;
 	}
 
-	cam_csiphy_register_baseaddress(new_csiphy_dev);
-
+	rc = cam_csiphy_register_baseaddress(new_csiphy_dev);
+	if (rc) {
+		CAM_ERR(CAM_CSIPHY, "Failed to register baseaddress, rc: %d", rc);
+		goto cpas_unregister;
+	}
 
 	CAM_DBG(CAM_CSIPHY, "%s component bound successfully",
 		pdev->name);
@@ -333,6 +336,10 @@ static int cam_csiphy_component_bind(struct device *dev,
 
 	return rc;
 
+cpas_unregister:
+	cam_cpas_unregister_client(new_csiphy_dev->cpas_handle);
+	if (new_csiphy_dev->work_queue)
+		destroy_workqueue(new_csiphy_dev->work_queue);
 csiphy_unregister_subdev:
 	cam_unregister_subdev(&(new_csiphy_dev->v4l2_dev_str));
 csiphy_no_resource:

+ 1 - 1
drivers/cam_sensor_module/cam_csiphy/cam_csiphy_dev.h

@@ -28,7 +28,7 @@
 #include "cam_debug_util.h"
 #include "cam_context.h"
 
-#define MAX_CSIPHY                  6
+#define MAX_CSIPHY                  8
 
 #define CSIPHY_NUM_CLK_MAX          16