From afb3736650122de189e575793badca123103d813 Mon Sep 17 00:00:00 2001 From: Ayush Kumar Date: Tue, 8 Dec 2020 20:26:15 +0530 Subject: [PATCH] msm: camera: isp: IFE and CSID probe based on fuse Some ISP hardware id instances are disabled on some target skus. Cpas driver has fuse information based on the dtsi entries. ISP hw driver queries the cpas driver whether hw instance is supported or not. If ISP hardware is supported on the target then continue the isp hardware probe. CRs-Fixed: 2825675 Change-Id: I37f059c6591f3a6e57277029859e1b8b0e48905d Signed-off-by: Ayush Kumar --- drivers/cam_cpas/cam_cpas_intf.c | 5 +---- .../isp_hw/ife_csid_hw/cam_ife_csid_core.c | 12 ++++++++++++ .../cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_core.c | 12 ++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/drivers/cam_cpas/cam_cpas_intf.c b/drivers/cam_cpas/cam_cpas_intf.c index 1ff8f92fdd70..45eba95e1052 100644 --- a/drivers/cam_cpas/cam_cpas_intf.c +++ b/drivers/cam_cpas/cam_cpas_intf.c @@ -161,11 +161,8 @@ bool cam_cpas_is_feature_supported(uint32_t flag, uint32_t hw_map, if (soc_private->feature_info[i].feature == flag) break; - if (i == soc_private->num_feature_info) { - CAM_INFO(CAM_CPAS, "Feature not found, no of featues: %d", - soc_private->num_feature_info); + if (i == soc_private->num_feature_info) goto end; - } if (soc_private->feature_info[i].type == CAM_CPAS_FEATURE_TYPE_DISABLE || (soc_private->feature_info[i].type == diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c index ef50a1ab51eb..2601110a3719 100644 --- a/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/ife_csid_hw/cam_ife_csid_core.c @@ -21,6 +21,7 @@ #include "cam_cpas_api.h" #include "cam_subdev.h" #include "cam_tasklet_util.h" +#include "dt-bindings/msm/msm-camera.h" /* Timeout value in msec */ #define IFE_CSID_TIMEOUT 1000 @@ -5522,6 +5523,17 @@ int cam_ife_csid_hw_probe_init(struct cam_hw_intf *csid_hw_intf, ife_csid_hw->device_enabled = 0; ife_csid_hw->is_resetting = false; ife_csid_hw->hw_info->hw_state = CAM_HW_STATE_POWER_DOWN; + + if (!cam_cpas_is_feature_supported(CAM_CPAS_ISP_FUSE, + (1 << ife_csid_hw->hw_intf->hw_idx), 0) || + !cam_cpas_is_feature_supported(CAM_CPAS_ISP_LITE_FUSE, + (1 << ife_csid_hw->hw_intf->hw_idx), 0)) { + CAM_DBG(CAM_ISP, "IFE:%d is not supported", + ife_csid_hw->hw_intf->hw_idx); + rc = -EINVAL; + return rc; + } + mutex_init(&ife_csid_hw->hw_info->hw_mutex); spin_lock_init(&ife_csid_hw->hw_info->hw_lock); spin_lock_init(&ife_csid_hw->lock_state); diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_core.c b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_core.c index 6b0b2113bfe1..725c716ffb4a 100644 --- a/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_core.c +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/cam_vfe_core.c @@ -17,6 +17,8 @@ #include "cam_ife_hw_mgr.h" #include "cam_debug_util.h" #include "cam_cpas_api.h" +#include + static const char drv_name[] = "vfe"; @@ -681,6 +683,16 @@ int cam_vfe_core_init(struct cam_vfe_hw_core_info *core_info, return -ENODEV; } + if (!cam_cpas_is_feature_supported(CAM_CPAS_ISP_FUSE, + (1 << hw_intf->hw_idx), 0) || + !cam_cpas_is_feature_supported(CAM_CPAS_ISP_LITE_FUSE, + (1 << hw_intf->hw_idx), 0)) { + CAM_DBG(CAM_ISP, "IFE:%d is not supported", + hw_intf->hw_idx); + rc = -EINVAL; + return rc; + } + rc = cam_irq_controller_init(drv_name, CAM_SOC_GET_REG_MAP_START(soc_info, VFE_CORE_BASE_IDX), vfe_hw_info->irq_reg_info, &core_info->vfe_irq_controller,