From c6de9ec432f31ae0713fb068e3cd1ef2b40d9722 Mon Sep 17 00:00:00 2001 From: Tejas Prajapati Date: Wed, 24 Nov 2021 10:50:39 +0530 Subject: [PATCH] msm: camera: isp: Add eof notification for rdi only context For RDI only context EOF is not notified; it should be notified, for the corner case if the flash is configured to apply at EOF then it will block apply for ISP on SOF as well until the EOF is notified, this change adds EOF notification. CRs-Fixed: 3091241 Change-Id: If6d974d092d640d9def89bbcf7a88fba0d85579b Signed-off-by: Tejas Prajapati --- drivers/cam_isp/cam_isp_context.c | 10 +++++----- drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c | 8 ++++++++ drivers/cam_isp/isp_hw_mgr/cam_tfe_hw_mgr.c | 6 ++++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/drivers/cam_isp/cam_isp_context.c b/drivers/cam_isp/cam_isp_context.c index 9992e6261956..f3d454914204 100644 --- a/drivers/cam_isp/cam_isp_context.c +++ b/drivers/cam_isp/cam_isp_context.c @@ -4315,7 +4315,7 @@ static struct cam_isp_ctx_irq_ops __cam_isp_ctx_rdi_only_sof_in_top_state, __cam_isp_ctx_reg_upd_in_sof, NULL, - NULL, + __cam_isp_ctx_notify_eof_in_activated_state, NULL, }, }, @@ -4326,7 +4326,7 @@ static struct cam_isp_ctx_irq_ops __cam_isp_ctx_rdi_only_sof_in_applied_state, NULL, NULL, - NULL, + __cam_isp_ctx_notify_eof_in_activated_state, __cam_isp_ctx_buf_done_in_applied, }, }, @@ -4337,7 +4337,7 @@ static struct cam_isp_ctx_irq_ops __cam_isp_ctx_rdi_only_sof_in_top_state, NULL, NULL, - NULL, + __cam_isp_ctx_notify_eof_in_activated_state, __cam_isp_ctx_buf_done_in_epoch, }, }, @@ -4348,7 +4348,7 @@ static struct cam_isp_ctx_irq_ops __cam_isp_ctx_rdi_only_sof_in_bubble_state, __cam_isp_ctx_rdi_only_reg_upd_in_bubble_state, NULL, - NULL, + __cam_isp_ctx_notify_eof_in_activated_state, __cam_isp_ctx_buf_done_in_bubble, }, }, @@ -4359,7 +4359,7 @@ static struct cam_isp_ctx_irq_ops __cam_isp_ctx_rdi_only_sof_in_bubble_applied, __cam_isp_ctx_rdi_only_reg_upd_in_bubble_applied_state, NULL, - NULL, + __cam_isp_ctx_notify_eof_in_activated_state, __cam_isp_ctx_buf_done_in_bubble_applied, }, }, diff --git a/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c b/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c index 487f1eda3457..8af790e2d3b2 100644 --- a/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c +++ b/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c @@ -7990,6 +7990,14 @@ static int cam_ife_hw_mgr_handle_hw_eof( case CAM_ISP_HW_VFE_IN_RDI1: case CAM_ISP_HW_VFE_IN_RDI2: case CAM_ISP_HW_VFE_IN_RDI3: + if (!ife_hw_mgr_ctx->is_rdi_only_context) + break; + if (atomic_read(&ife_hw_mgr_ctx->overflow_pending)) + break; + ife_hw_irq_eof_cb(ife_hw_mgr_ctx->common.cb_priv, + CAM_ISP_HW_EVENT_EOF, (void *)&eof_done_event_data); + break; + case CAM_ISP_HW_VFE_IN_PDLIB: case CAM_ISP_HW_VFE_IN_LCR: break; diff --git a/drivers/cam_isp/isp_hw_mgr/cam_tfe_hw_mgr.c b/drivers/cam_isp/isp_hw_mgr/cam_tfe_hw_mgr.c index 4b33439c44f3..aa6e8c15aa8e 100644 --- a/drivers/cam_isp/isp_hw_mgr/cam_tfe_hw_mgr.c +++ b/drivers/cam_isp/isp_hw_mgr/cam_tfe_hw_mgr.c @@ -5649,6 +5649,12 @@ static int cam_tfe_hw_mgr_handle_hw_eof( case CAM_ISP_HW_TFE_IN_RDI0: case CAM_ISP_HW_TFE_IN_RDI1: case CAM_ISP_HW_TFE_IN_RDI2: + if (!tfe_hw_mgr_ctx->is_rdi_only_context) + break; + if (atomic_read(&tfe_hw_mgr_ctx->overflow_pending)) + break; + tfe_hw_irq_eof_cb(tfe_hw_mgr_ctx->common.cb_priv, + CAM_ISP_HW_EVENT_EOF, (void *)&eof_done_event_data); break; default: