Merge "msm: camera: isp: Unsubscribe for discard frame trigger in bh" into camera-kernel.lnx.5.0

Esse commit está contido em:
Camera Software Integration
2021-05-24 19:52:43 -07:00
commit de Gerrit - the friendly Code Review server

Ver arquivo

@@ -568,9 +568,40 @@ static inline void cam_ife_csid_ver2_reset_discard_frame_cfg(
atomic_read(&csid_hw->discard_frame_per_path));
}
static int cam_ife_csid_ver2_discard_sof_pix_top_half(
static int cam_ife_csid_ver2_discard_sof_top_half(
uint32_t evt_id,
struct cam_irq_th_payload *th_payload)
{
struct cam_hw_info *hw_info;
struct cam_ife_csid_ver2_hw *csid_hw = NULL;
struct cam_isp_resource_node *res;
struct cam_ife_csid_ver2_path_cfg *path_cfg;
res = th_payload->handler_priv;
if (!res) {
CAM_ERR_RATE_LIMIT(CAM_ISP, "No private returned");
return -ENODEV;
}
hw_info = (struct cam_hw_info *)res->hw_intf->hw_priv;
csid_hw = (struct cam_ife_csid_ver2_hw *)hw_info->core_info;
path_cfg = (struct cam_ife_csid_ver2_path_cfg *)res->res_priv;
CAM_DBG(CAM_ISP, "CSID: %d status: 0x%x for res: %s",
csid_hw->hw_intf->hw_idx,
th_payload->evt_status_arr[path_cfg->irq_reg_idx],
res->res_name);
/* No need of payload since it's an exclusive th & bh */
th_payload->evt_payload_priv = NULL;
return 0;
}
static int cam_ife_csid_ver2_discard_sof_pix_bottom_half(
void *handler_priv,
void *evt_payload_priv)
{
struct cam_hw_info *hw_info;
struct cam_ife_csid_ver2_hw *csid_hw = NULL;
@@ -582,13 +613,12 @@ static int cam_ife_csid_ver2_discard_sof_pix_top_half(
void __iomem *base;
uint32_t val;
res = th_payload->handler_priv;
if (!res) {
CAM_ERR_RATE_LIMIT(CAM_ISP, "No private returned");
return -ENODEV;
if (!handler_priv) {
CAM_ERR(CAM_ISP, "Invalid handler_priv");
return -EINVAL;
}
res = handler_priv;
hw_info = (struct cam_hw_info *)res->hw_intf->hw_priv;
csid_hw = (struct cam_ife_csid_ver2_hw *)hw_info->core_info;
csid_reg = (struct cam_ife_csid_ver2_reg_info *)
@@ -603,7 +633,7 @@ static int cam_ife_csid_ver2_discard_sof_pix_top_half(
path_reg = csid_reg->ppp_reg;
} else {
CAM_WARN(CAM_ISP, "Invalid res_id: 0x%x", res->res_id);
return -ENODEV;
return -EINVAL;
}
/* Count SOFs */
@@ -628,12 +658,12 @@ static int cam_ife_csid_ver2_discard_sof_pix_top_half(
cam_ife_csid_ver2_reset_discard_frame_cfg(res->res_name, csid_hw, path_cfg);
}
return IRQ_HANDLED;
return 0;
}
static int cam_ife_csid_ver2_discard_sof_rdi_top_half(
uint32_t evt_id,
struct cam_irq_th_payload *th_payload)
static int cam_ife_csid_ver2_discard_sof_rdi_bottom_half(
void *handler_priv,
void *evt_payload_priv)
{
struct cam_hw_info *hw_info;
struct cam_ife_csid_ver2_hw *csid_hw = NULL;
@@ -645,13 +675,12 @@ static int cam_ife_csid_ver2_discard_sof_rdi_top_half(
void __iomem *base;
uint32_t val;
res = th_payload->handler_priv;
if (!res) {
CAM_ERR_RATE_LIMIT(CAM_ISP, "No private returned");
return -ENODEV;
if (!handler_priv) {
CAM_ERR(CAM_ISP, "Invalid handler_priv");
return -EINVAL;
}
res = handler_priv;
hw_info = (struct cam_hw_info *)res->hw_intf->hw_priv;
csid_hw = (struct cam_ife_csid_ver2_hw *)hw_info->core_info;
csid_reg = (struct cam_ife_csid_ver2_reg_info *)
@@ -679,7 +708,7 @@ static int cam_ife_csid_ver2_discard_sof_rdi_top_half(
cam_ife_csid_ver2_reset_discard_frame_cfg(res->res_name, csid_hw, path_cfg);
}
return IRQ_HANDLED;
return 0;
}
static int cam_ife_csid_ver2_stop_csi2_in_err(
@@ -2702,7 +2731,8 @@ static inline int cam_ife_csid_ver2_subscribe_sof_for_discard(
struct cam_ife_csid_ver2_path_cfg *path_cfg,
struct cam_ife_csid_ver2_hw *csid_hw,
struct cam_isp_resource_node *res,
CAM_IRQ_HANDLER_TOP_HALF top_half_handler)
CAM_IRQ_HANDLER_TOP_HALF top_half_handler,
CAM_IRQ_HANDLER_BOTTOM_HALF bottom_half_handler)
{
int rc = 0;
uint32_t val;
@@ -2712,13 +2742,13 @@ static inline int cam_ife_csid_ver2_subscribe_sof_for_discard(
irq_mask[path_cfg->irq_reg_idx] = val;
path_cfg->discard_irq_handle = cam_irq_controller_subscribe_irq(
csid_hw->csid_irq_controller,
CAM_IRQ_PRIORITY_1,
CAM_IRQ_PRIORITY_0,
irq_mask,
res,
top_half_handler,
NULL,
NULL,
NULL);
bottom_half_handler,
csid_hw->tasklet,
&tasklet_bh_api);
if (path_cfg->discard_irq_handle < 1) {
CAM_ERR(CAM_ISP,
@@ -2846,7 +2876,8 @@ static int cam_ife_csid_ver2_program_rdi_path(
if (path_cfg->discard_init_frames) {
rc = cam_ife_csid_ver2_subscribe_sof_for_discard(
path_cfg, csid_hw, res,
cam_ife_csid_ver2_discard_sof_rdi_top_half);
cam_ife_csid_ver2_discard_sof_top_half,
cam_ife_csid_ver2_discard_sof_rdi_bottom_half);
if (rc)
goto end;
}
@@ -2973,7 +3004,8 @@ static int cam_ife_csid_ver2_program_ipp_path(
if (path_cfg->discard_init_frames) {
rc = cam_ife_csid_ver2_subscribe_sof_for_discard(
path_cfg, csid_hw, res,
cam_ife_csid_ver2_discard_sof_pix_top_half);
cam_ife_csid_ver2_discard_sof_top_half,
cam_ife_csid_ver2_discard_sof_pix_bottom_half);
if (rc)
goto end;
}
@@ -3211,7 +3243,8 @@ static int cam_ife_csid_ver2_program_ppp_path(
if (path_cfg->discard_init_frames) {
rc = cam_ife_csid_ver2_subscribe_sof_for_discard(
path_cfg, csid_hw, res,
cam_ife_csid_ver2_discard_sof_pix_top_half);
cam_ife_csid_ver2_discard_sof_top_half,
cam_ife_csid_ver2_discard_sof_pix_bottom_half);
if (rc)
goto end;
}