From 0b1fb9778fc1635e4e262f7bcb642b389fc09399 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Fri, 19 Nov 2021 10:02:32 +0800 Subject: [PATCH] media: rockchip: isp: fix first params config two times for readback mode Change-Id: Ia6209e60fc75a039ca06d1aa0d5d64e4c9515b9e Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/isp_params.c | 5 +++++ drivers/media/platform/rockchip/isp/isp_params.h | 1 + drivers/media/platform/rockchip/isp/rkisp.c | 10 +++------- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/isp_params.c b/drivers/media/platform/rockchip/isp/isp_params.c index b4af45b26c30..0aef6dc4d3a7 100644 --- a/drivers/media/platform/rockchip/isp/isp_params.c +++ b/drivers/media/platform/rockchip/isp/isp_params.c @@ -149,6 +149,7 @@ static void rkisp_params_vb2_buf_queue(struct vb2_buffer *vb) vb2_buffer_done(¶ms_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); params_vdev->first_params = false; wake_up(¶ms_vdev->dev->sync_onoff); + dev_info(params_vdev->dev->dev, "first params buf queue\n"); return; } @@ -209,6 +210,7 @@ rkisp_params_vb2_start_streaming(struct vb2_queue *queue, unsigned int count) struct rkisp_isp_params_vdev *params_vdev = queue->drv_priv; unsigned long flags; + params_vdev->is_first_cfg = true; params_vdev->hdrtmo_en = false; params_vdev->cur_buf = NULL; spin_lock_irqsave(¶ms_vdev->config_lock, flags); @@ -335,6 +337,9 @@ void rkisp_params_first_cfg(struct rkisp_isp_params_vdev *params_vdev, struct ispsd_in_fmt *in_fmt, enum v4l2_quantization quantization) { + if (!params_vdev->is_first_cfg) + return; + params_vdev->is_first_cfg = false; params_vdev->quantization = quantization; params_vdev->raw_type = in_fmt->bayer_pat; params_vdev->in_mbus_code = in_fmt->mbus_code; diff --git a/drivers/media/platform/rockchip/isp/isp_params.h b/drivers/media/platform/rockchip/isp/isp_params.h index 30d7ad6f501a..89b3e7894388 100644 --- a/drivers/media/platform/rockchip/isp/isp_params.h +++ b/drivers/media/platform/rockchip/isp/isp_params.h @@ -81,6 +81,7 @@ struct rkisp_isp_params_vdev { struct sensor_exposure_cfg exposure; bool is_subs_evt; + bool is_first_cfg; }; static inline void diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index 90ca7b4de539..49267c4a7a4d 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -536,11 +536,8 @@ void rkisp_trigger_read_back(struct rkisp_device *dev, u8 dma2frm, u32 mode, boo } dev->rd_mode = rd_mode; - /* configure hdr params in rdbk mode */ - if (is_upd || cur_frame_id == 0) - rkisp_params_first_cfg(&dev->params_vdev, - &dev->isp_sdev.in_fmt, - dev->isp_sdev.quantization); + rkisp_params_first_cfg(&dev->params_vdev, &dev->isp_sdev.in_fmt, + dev->isp_sdev.quantization); rkisp_params_cfg(params_vdev, cur_frame_id); if (!hw->is_single && !is_try) { @@ -648,8 +645,7 @@ static void rkisp_rdbk_trigger_handle(struct rkisp_device *dev, u32 cmd) if (max) { v4l2_dbg(2, rkisp_debug, &dev->v4l2_dev, - "handle isp%d, trigger fifo len:%d\n", - id, max); + "trigger fifo len:%d\n", max); isp = hw->isp[id]; rkisp_rdbk_trigger_event(isp, T_CMD_DEQUEUE, &t); isp->dmarx_dev.pre_frame = isp->dmarx_dev.cur_frame;