Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit afb37366 authored by Ayush Kumar's avatar Ayush Kumar Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarAyush Kumar <ayushkr@codeaurora.org>
parent 38b96be6
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -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 ==
+12 −0
Original line number Diff line number Diff line
@@ -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);
+12 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#include "cam_ife_hw_mgr.h"
#include "cam_debug_util.h"
#include "cam_cpas_api.h"
#include <dt-bindings/msm/msm-camera.h>


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,