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; }