media: rockchip: isp: fix cac for multi sensor

Change-Id: Ia63c5129ca28ff8d683cd35b56bb2d57b58682e4
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei 2024-06-17 10:26:55 +08:00
commit b98e293576
2 changed files with 21 additions and 16 deletions

View file

@ -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) {

View file

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