summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c
index f398ce00dab4..da42439c60d6 100644
--- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c
+++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c
@@ -3592,6 +3592,7 @@ static int msm_isp_request_frame(struct vfe_device *vfe_dev,
uint32_t wm_mask = 0;
int vfe_idx;
uint32_t pingpong_bit = 0;
+ uint32_t do_drop_frame;
if (!vfe_dev || !stream_info) {
pr_err("%s %d failed: vfe_dev %pK stream_info %pK\n", __func__,
@@ -3614,7 +3615,7 @@ static int msm_isp_request_frame(struct vfe_device *vfe_dev,
vfe_ops.axi_ops.get_pingpong_status(vfe_dev);
/* As MCT is still processing it, need to drop the additional requests*/
- if (vfe_dev->isp_page->drop_reconfig) {
+ if (vfe_dev->isp_page->drop_reconfig && do_drop_frame) {
pr_err("%s: MCT has not yet delayed %d drop request %d\n",
__func__, vfe_dev->isp_page->drop_reconfig, frame_id);
goto error;
@@ -3637,6 +3638,7 @@ static int msm_isp_request_frame(struct vfe_device *vfe_dev,
pr_debug("%s:%d invalid time to request frame %d try drop_reconfig\n",
__func__, __LINE__, frame_id);
vfe_dev->isp_page->drop_reconfig = 1;
+ do_drop_frame = 1;
return 0;
} else if ((vfe_dev->axi_data.src_info[frame_src].active) &&
((frame_id ==
@@ -3645,6 +3647,7 @@ static int msm_isp_request_frame(struct vfe_device *vfe_dev,
(stream_info->undelivered_request_cnt <=
MAX_BUFFERS_IN_HW)) {
vfe_dev->isp_page->drop_reconfig = 1;
+ do_drop_frame = 0;
pr_debug("%s: vfe_%d request_frame %d cur frame id %d pix %d try drop_reconfig\n",
__func__, vfe_dev->pdev->id, frame_id,
vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id,