From bc261bed10e95a5159101b32617a879b2967e1ec Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Sat, 4 Apr 2020 11:27:35 +0800 Subject: [PATCH] media: rockchip: isp: fix picture abnormal when 3dlut is enable Signed-off-by: Hu Kejun Change-Id: Id275941a664dbd50d2e1dfcfc12641ea3152e6d1 --- .../platform/rockchip/isp/isp_params_v2x.c | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/isp_params_v2x.c b/drivers/media/platform/rockchip/isp/isp_params_v2x.c index 6e91b99aab41..188cb1fb374c 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v2x.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v2x.c @@ -3360,26 +3360,27 @@ isp_3dlut_config(struct rkisp_isp_params_vdev *params_vdev, u32 value, buf_idx, i; u32 *data; - value = rkisp_ioread32(params_vdev, ISP_3DLUT_CTRL); - value &= ~ISP_3DLUT_EN; - - if (arg->bypass_en) - value |= ISP_3DLUT_BYPASS; - - rkisp_iowrite32(params_vdev, value, ISP_3DLUT_CTRL); - priv_val = (struct rkisp_isp_params_val_v2x *)params_vdev->priv_val; buf_idx = (priv_val->buf_3dlut_idx++) % RKISP_PARAM_3DLUT_BUF_NUM; data = (u32 *)priv_val->buf_3dlut[buf_idx].vaddr; for (i = 0; i < arg->actual_size; i++) - data[i] = (arg->lut_r[i] & 0x3FF) | (arg->lut_g[i] & 0xFFF) << 10 | - (arg->lut_b[i] & 0x3FF) << 22; + data[i] = (arg->lut_b[i] & 0x3FF) | + (arg->lut_g[i] & 0xFFF) << 10 | + (arg->lut_r[i] & 0x3FF) << 22; value = priv_val->buf_3dlut[buf_idx].dma_addr; rkisp_iowrite32(params_vdev, value, MI_LUT_3D_RD_BASE); rkisp_iowrite32(params_vdev, arg->actual_size, MI_LUT_3D_RD_WSIZE); isp_param_set_bits(params_vdev, ISP_3DLUT_UPDATE, 0x01); + + value = rkisp_ioread32(params_vdev, ISP_3DLUT_CTRL); + value &= ISP_3DLUT_EN; + + if (arg->bypass_en) + value |= ISP_3DLUT_BYPASS; + + rkisp_iowrite32(params_vdev, value, ISP_3DLUT_CTRL); } static void