From a1c6f019287474adb449cd116772aa0f1f513dd0 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Fri, 10 Dec 2021 15:21:16 +0800 Subject: [PATCH] media: rockchip: isp: fix hdrmge config error for isp30 read back mode Change-Id: I2cb228cf507c9d5fd1246add1ab625f200c72f20 Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/isp_params_v3x.c | 9 +++++---- drivers/media/platform/rockchip/isp/regs_v2x.h | 1 + drivers/media/platform/rockchip/isp/rkisp.c | 6 +++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/isp_params_v3x.c b/drivers/media/platform/rockchip/isp/isp_params_v3x.c index b5502277b3d2..33e67afb9455 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v3x.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v3x.c @@ -2548,11 +2548,12 @@ isp_hdrmge_config(struct rkisp_isp_params_vdev *params_vdev, value = arg->gain2; isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN2, id); - if (arg->s_base) { - value = isp3_param_read_cache(params_vdev, ISP3X_HDRMGE_CTRL, id); + value = isp3_param_read_cache(params_vdev, ISP3X_HDRMGE_CTRL, id); + if (arg->s_base) value |= BIT(1); - isp3_param_write(params_vdev, value, ISP3X_HDRMGE_CTRL, id); - } + else + value &= ~BIT(1); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_CTRL, id); } if (type == RKISP_PARAMS_IMD || type == RKISP_PARAMS_ALL) { diff --git a/drivers/media/platform/rockchip/isp/regs_v2x.h b/drivers/media/platform/rockchip/isp/regs_v2x.h index 34f7a9fc3a7b..9e55bdfa7783 100644 --- a/drivers/media/platform/rockchip/isp/regs_v2x.h +++ b/drivers/media/platform/rockchip/isp/regs_v2x.h @@ -2492,6 +2492,7 @@ /* HDRMGE */ /* ISP_HDRMGE_CTRL */ +#define ISP_HDRMGE_MODE_MASK GENMASK(3, 2) #define ISP_HDRMGE_EN BIT(0) /* RAWNR */ diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index b3334d1b61d6..31bbb5eb09d0 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -527,9 +527,9 @@ void rkisp_trigger_read_back(struct rkisp_device *dev, u8 dma2frm, u32 mode, boo } } - tmp = rkisp_read(dev, ISP_HDRMGE_BASE, false) & 0xf; - if (val != tmp) { - rkisp_unite_write(dev, ISP_HDRMGE_BASE, val, false, hw->is_unite); + if (rd_mode != dev->rd_mode) { + rkisp_unite_set_bits(dev, ISP_HDRMGE_BASE, ISP_HDRMGE_MODE_MASK, + val, false, hw->is_unite); dev->skip_frame = 2; is_upd = true; }