msm: camera: isp: Get valid csid id

This change helps to get valid csid id incase
of any IFE is disabled and accessing csid hw caps
with the help of csid id.

CRs-Fixed: 3863667
Change-Id: I57ff8acaaf15b347a69883a54937376843fcd848
Signed-off-by: Gaurav Jindal <quic_gjindal@quicinc.com>
Signed-off-by: Karthik Dillibabu <quic_kard@quicinc.com>
Dieser Commit ist enthalten in:
Gaurav Jindal
2024-04-12 14:23:11 +05:30
committet von Karthik Dillibabu
Ursprung 3ecdc35c98
Commit 10386fd4da

Datei anzeigen

@@ -157,6 +157,20 @@ static void *cam_ife_hw_mgr_get_hw_intf(
return NULL;
}
static int cam_ife_mgr_get_first_valid_csid_id(void)
{
int i = 0;
for (i = 0; i < CAM_IFE_CSID_HW_NUM_MAX; i++) {
if (g_ife_hw_mgr.csid_devices[i]) {
CAM_DBG(CAM_ISP, "valid csid_id %d", i);
return i;
}
}
return 0;
}
static int cam_ife_mgr_update_core_info_to_cpas(struct cam_ife_hw_mgr_ctx *ctx,
bool set_port)
{
@@ -2946,6 +2960,7 @@ static int cam_ife_hw_mgr_acquire_res_sfe_src(
uint32_t sfe_res_id = 0;
struct cam_ife_hw_mgr *hw_mgr;
struct cam_isp_hw_mgr_res *csid_res_map[CAM_ISP_HW_SFE_IN_MAX];
int valid_id = 0;
hw_mgr = ife_ctx->hw_mgr;
list_for_each_entry(csid_res, &ife_ctx->res_list_ife_csid, list) {
@@ -2992,9 +3007,11 @@ static int cam_ife_hw_mgr_acquire_res_sfe_src(
* 1. No read count
* 2. Dynamic switch from SHDR-->HDR and HDR-->SHDR is possible
*/
valid_id = cam_ife_mgr_get_first_valid_csid_id();
if ((!(sfe_required_res & BIT(CAM_ISP_HW_SFE_IN_PIX))) &&
(!in_port->ife_rd_count || in_port->dynamic_hdr_switch_en) &&
(BIT(csid_res->res_id) == hw_mgr->csid_hw_caps[0].sfe_ipp_input_rdi_res)) {
(BIT(csid_res->res_id) ==
hw_mgr->csid_hw_caps[valid_id].sfe_ipp_input_rdi_res)) {
sfe_required_res |= BIT(CAM_ISP_HW_SFE_IN_PIX);
csid_res_map[CAM_ISP_HW_SFE_IN_PIX] = csid_res;
}
@@ -3740,13 +3757,14 @@ static bool cam_ife_hw_mgr_is_need_csid_ipp(
{
struct cam_ife_hw_mgr *hw_mgr;
bool need = true;
int valid_id = 0;
hw_mgr = ife_ctx->hw_mgr;
valid_id = cam_ife_mgr_get_first_valid_csid_id();
if (!(in_port->ipp_count || in_port->lcr_count))
need = false;
else if (ife_ctx->ctx_type == CAM_IFE_CTX_TYPE_SFE &&
((hw_mgr->csid_hw_caps[0].sfe_ipp_input_rdi_res && !in_port->usage_type) ||
((hw_mgr->csid_hw_caps[valid_id].sfe_ipp_input_rdi_res && !in_port->usage_type) ||
in_port->ife_rd_count))
need = false;
@@ -4097,11 +4115,13 @@ static int cam_ife_hw_mgr_get_csid_rdi_for_sfe_ipp_input(
struct cam_ife_hw_mgr *hw_mgr;
uint32_t res_id = CAM_IFE_PIX_PATH_RES_MAX;
int rc = 0;
int valid_id;
hw_mgr = ife_ctx->hw_mgr;
if (hw_mgr->csid_hw_caps[0].sfe_ipp_input_rdi_res && !in_port->usage_type)
res_id = ffs(hw_mgr->csid_hw_caps[0].sfe_ipp_input_rdi_res) - 1;
valid_id = cam_ife_mgr_get_first_valid_csid_id();
if (hw_mgr->csid_hw_caps[valid_id].sfe_ipp_input_rdi_res && !in_port->usage_type)
res_id = ffs(hw_mgr->csid_hw_caps[valid_id].sfe_ipp_input_rdi_res) - 1;
if ((res_id != CAM_IFE_PIX_PATH_RES_MAX) && (!(BIT(res_id) & (*acquired_rdi_res)))) {
rc = cam_ife_hw_mgr_acquire_csid_rdi_util(ife_ctx,