From af010aa87d89ea3de3d6af99a128cd20afe2f29e Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Thu, 15 Oct 2020 11:35:01 +0800 Subject: [PATCH] media: rockchip: isp: skip frame when change hdr/normal mode Signed-off-by: Hu Kejun Change-Id: I103653f36bbfcc310e9648715baf870db967c9c3 --- drivers/media/platform/rockchip/isp/bridge.c | 6 ++++++ drivers/media/platform/rockchip/isp/csi.c | 1 + drivers/media/platform/rockchip/isp/dev.h | 1 + 3 files changed, 8 insertions(+) diff --git a/drivers/media/platform/rockchip/isp/bridge.c b/drivers/media/platform/rockchip/isp/bridge.c index e9e6e87c5e81..055790c42456 100644 --- a/drivers/media/platform/rockchip/isp/bridge.c +++ b/drivers/media/platform/rockchip/isp/bridge.c @@ -63,6 +63,11 @@ static int frame_end(struct rkisp_bridge_device *dev, bool en) spin_lock_irqsave(&hw->buf_lock, lock_flags); list_add_tail(&hw->cur_buf->list, &hw->list); spin_unlock_irqrestore(&hw->buf_lock, lock_flags); + } else if (dev->ispdev->skip_frame > 0) { + dev->ispdev->skip_frame--; + spin_lock_irqsave(&hw->buf_lock, lock_flags); + list_add_tail(&hw->cur_buf->list, &hw->list); + spin_unlock_irqrestore(&hw->buf_lock, lock_flags); } else { ns = 0; rkisp_dmarx_get_frame(dev->ispdev, @@ -458,6 +463,7 @@ static int bridge_start(struct rkisp_bridge_device *dev) if (!(dev->work_mode & ISP_ISPP_QUICK)) update_mi(dev); } + dev->ispdev->skip_frame = 0; dev->en = true; return 0; } diff --git a/drivers/media/platform/rockchip/isp/csi.c b/drivers/media/platform/rockchip/isp/csi.c index 897312cad34f..3063df3e6742 100644 --- a/drivers/media/platform/rockchip/isp/csi.c +++ b/drivers/media/platform/rockchip/isp/csi.c @@ -501,6 +501,7 @@ void rkisp_trigger_read_back(struct rkisp_csi_device *csi, u8 dma2frm, u32 mode) tmp = rkisp_read(dev, ISP_HDRMGE_BASE, false) & 0xf; if (val != tmp) { rkisp_write(dev, ISP_HDRMGE_BASE, val, false); + dev->skip_frame = 2; is_upd = true; } diff --git a/drivers/media/platform/rockchip/isp/dev.h b/drivers/media/platform/rockchip/isp/dev.h index c327e5d1b91e..afe7bc835722 100644 --- a/drivers/media/platform/rockchip/isp/dev.h +++ b/drivers/media/platform/rockchip/isp/dev.h @@ -209,5 +209,6 @@ struct rkisp_device { phys_addr_t resmem_pa; size_t resmem_size; int dev_id; + unsigned int skip_frame; }; #endif