From b98e2935766e2ae69ce0bd55b4a774da2aece579 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Mon, 17 Jun 2024 10:26:55 +0800 Subject: [PATCH] media: rockchip: isp: fix cac for multi sensor Change-Id: Ia63c5129ca28ff8d683cd35b56bb2d57b58682e4 Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/hw.c | 5 ++++ drivers/media/platform/rockchip/isp/rkisp.c | 32 ++++++++++----------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/hw.c b/drivers/media/platform/rockchip/isp/hw.c index ec7360f24be0..df9d2602c806 100644 --- a/drivers/media/platform/rockchip/isp/hw.c +++ b/drivers/media/platform/rockchip/isp/hw.c @@ -573,6 +573,11 @@ void rkisp_hw_reg_restore(struct rkisp_hw_dev *dev) writel(val, base + ISP_MPFBC_HEAD_PTR); val = rkisp_read_reg_cache(isp, MI_SWS_3A_WR_BASE); writel(val, base + MI_SWS_3A_WR_BASE); + /* force for cac to read lut */ + if (dev->isp_ver >= ISP_V33) { + val = rkisp_read_reg_cache(isp, ISP3X_CAC_BASE); + writel(val, base + ISP3X_CAC_BASE); + } } if (dev->is_single) { diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index 5cdecc79a4fc..e81ffc788b53 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -675,9 +675,21 @@ void rkisp_trigger_read_back(struct rkisp_device *dev, u8 dma2frm, u32 mode, boo writel(0, hw->base_addr + CIF_IRCL); } + /* sensor mode & index */ + if (dev->isp_ver >= ISP_V21) { + val = rkisp_read_reg_cache(dev, ISP_ACQ_H_OFFS); + val |= ISP21_SENSOR_INDEX(dev->multi_index); + if (dev->isp_ver == ISP_V32_L) + val |= ISP32L_SENSOR_MODE(dev->multi_mode); + else + val |= ISP21_SENSOR_MODE(dev->multi_mode); + writel(val, hw->base_addr + ISP_ACQ_H_OFFS); + if (hw->unite == ISP_UNITE_TWO) + writel(val, hw->base_next_addr + ISP_ACQ_H_OFFS); + } rkisp_update_regs(dev, CTRL_VI_ISP_PATH, SUPER_IMP_COLOR_CR); rkisp_update_regs(dev, DUAL_CROP_M_H_OFFS, ISP3X_DUAL_CROP_FBC_V_SIZE); - rkisp_update_regs(dev, ISP_ACQ_H_OFFS, DUAL_CROP_CTRL); + rkisp_update_regs(dev, ISP_ACQ_V_OFFS, DUAL_CROP_CTRL); rkisp_update_regs(dev, ISP39_LDCV_BIC_TABLE0, MI_WR_CTRL); rkisp_update_regs(dev, SELF_RESIZE_SCALE_HY, ISP39_LDCV_CTRL); rkisp_update_regs(dev, ISP32_BP_RESIZE_SCALE_HY, SELF_RESIZE_CTRL); @@ -702,21 +714,9 @@ void rkisp_trigger_read_back(struct rkisp_device *dev, u8 dma2frm, u32 mode, boo rkisp_write(dev, ISP39_MAIN_SCALE_UPDATE, ISP32_SCALE_FORCE_UPD, true); rkisp_unite_write(dev, ISP3X_MI_WR_INIT, CIF_MI_INIT_SOFT_UPD, true); } - /* sensor mode & index */ - if (dev->isp_ver >= ISP_V21) { - val = rkisp_read_reg_cache(dev, ISP_ACQ_H_OFFS); - val |= ISP21_SENSOR_INDEX(dev->multi_index); - if (dev->isp_ver == ISP_V32_L || dev->isp_ver == ISP_V39) - val |= ISP32L_SENSOR_MODE(dev->multi_mode); - else - val |= ISP21_SENSOR_MODE(dev->multi_mode); - writel(val, hw->base_addr + ISP_ACQ_H_OFFS); - if (hw->unite == ISP_UNITE_TWO) - writel(val, hw->base_next_addr + ISP_ACQ_H_OFFS); - v4l2_dbg(2, rkisp_debug, &dev->v4l2_dev, - "sensor mode:%d index:%d | 0x%x\n", - dev->multi_mode, dev->multi_index, val); - } + v4l2_dbg(2, rkisp_debug, &dev->v4l2_dev, + "sensor mode:%d index:%d | 0x%x\n", + dev->multi_mode, dev->multi_index, rkisp_read(dev, ISP_ACQ_H_OFFS, true)); is_upd = true; }