diff options
| -rw-r--r-- | drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c | 5 |
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, |
