From bfd9dfad2ea6fadfe7758da5abac5d2f293041bd Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Thu, 3 Apr 2025 11:11:21 +0800 Subject: [PATCH] media: rockchip: isp: fix isp35 lsc and awb error for aiisp en Change-Id: I1bef27b5328684343f898e52f4b65e69118adb16 Signed-off-by: Cai YiWei --- .../platform/rockchip/isp/isp_params_v35.c | 31 +++++++++++++++++-- .../media/platform/rockchip/isp/regs_v3x.h | 2 ++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/isp_params_v35.c b/drivers/media/platform/rockchip/isp/isp_params_v35.c index 7cb381ded56c..d442c9932bb6 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v35.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v35.c @@ -535,7 +535,7 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev, } ctrl = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id); - ctrl &= ISP35_MODULE_EN; + ctrl &= (ISP35_MODULE_EN | ISP3X_LSC_PRE_RD_ST_MODE); ctrl |= !!arg->sector_16x16 << 2; isp3_param_write(params_vdev, ctrl, ISP3X_LSC_CTRL, id); @@ -547,15 +547,38 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev, static void isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { + struct rkisp_device *dev = params_vdev->dev; u32 val = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id); + u32 path_sel; if (en == !!(val & ISP35_MODULE_EN)) return; - if (en) + if (en) { val |= ISP35_MODULE_EN; - else + if (dev->is_aiisp_en && !dev->is_aiisp_sync) { + val &= ~ISP3X_LSC_PRE_RD_ST_MODE; + + path_sel = isp3_param_read_cache(params_vdev, ISP3X_VI_ISP_PATH, id); + /* drcLSC default frame end read table */ + path_sel |= ISP3X_LSC_CFG_SEL(3); + isp3_param_write(params_vdev, path_sel, ISP3X_VI_ISP_PATH, id); + isp3_param_write(params_vdev, val, ISP3X_LSC_CTRL, id); + /* awbLSC default frame end read table */ + path_sel &= ~ISP3X_LSC_CFG_SEL(3); + path_sel |= ISP3X_LSC_CFG_SEL(2); + isp3_param_write(params_vdev, path_sel, ISP3X_VI_ISP_PATH, id); + isp3_param_write(params_vdev, val, ISP3X_LSC_CTRL, id); + /* mainLSC default frame start read table and change to frame end */ + path_sel &= ~ISP3X_LSC_CFG_SEL(3); + path_sel |= ISP3X_LSC_CFG_SEL(1); + isp3_param_write(params_vdev, path_sel, ISP3X_VI_ISP_PATH, id); + + val |= ISP3X_LSC_PRE_RD_ST_MODE; + } + } else { val &= ~(ISP35_MODULE_EN | ISP35_SELF_FORCE_UPD); + } isp3_param_write(params_vdev, val, ISP3X_LSC_CTRL, id); } @@ -1267,6 +1290,8 @@ isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev, !!arg->blk_measure_xytype << 2 | !!arg->blk_measure_mode << 1 | !!arg->blk_measure_enable; + if (dev->is_aiisp_en) + value |= ISP35_RAWAWB_BNR_BE_SEL; isp3_param_write(params_vdev, value, ISP3X_RAWAWB_BLK_CTRL, id); h_offs = arg->h_offs & ~0x1; diff --git a/drivers/media/platform/rockchip/isp/regs_v3x.h b/drivers/media/platform/rockchip/isp/regs_v3x.h index 55a47652e7dc..2dc7f2694a86 100644 --- a/drivers/media/platform/rockchip/isp/regs_v3x.h +++ b/drivers/media/platform/rockchip/isp/regs_v3x.h @@ -3358,6 +3358,8 @@ #define ISP32_RAWAWB_2DDR_PATH_DS BIT(27) #define ISP32_RAWAWB_2DDR_PATH_ERR BIT(29) +#define ISP35_RAWAWB_BNR_BE_SEL BIT(10) + #define ISP33_RAWAWB_WRAM_CLR BIT(31) /* AIAWB */