From ea005bee31277c6bd766f347095a14176e2aba18 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Tue, 24 Sep 2024 09:16:20 +0800 Subject: [PATCH] media: rockchip: isp: fix lsc switch for isp30 Change-Id: Ib953aadd25cf73f956197e19ccd9155173530fab Signed-off-by: Cai YiWei --- drivers/media/platform/rockchip/isp/hw.c | 2 +- drivers/media/platform/rockchip/isp/isp_params_v3x.c | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/hw.c b/drivers/media/platform/rockchip/isp/hw.c index eebffdd9a88d..37f946a64de4 100644 --- a/drivers/media/platform/rockchip/isp/hw.c +++ b/drivers/media/platform/rockchip/isp/hw.c @@ -1067,7 +1067,7 @@ static void isp_config_clk(struct rkisp_hw_dev *dev, int on) val = 0; if ((dev->isp_ver == ISP_V20 || dev->isp_ver == ISP_V30) && on) - val |= CLK_CTRL_ISP_3A; + val |= CLK_CTRL_ISP_3A | CLK_CTRL_ISP_RAW; if (dev->isp_ver == ISP_V32) rv1106_sdmmc_get_lock(); writel(val, dev->base_addr + CTRL_VI_ISP_CLK_CTRL); diff --git a/drivers/media/platform/rockchip/isp/isp_params_v3x.c b/drivers/media/platform/rockchip/isp/isp_params_v3x.c index f3055039739d..93bd106cc1bc 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v3x.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v3x.c @@ -634,6 +634,7 @@ static void isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { struct isp3x_isp_params_cfg *params_rec = params_vdev->isp3x_params + id; + struct rkisp_isp_params_val_v3x *priv_val = params_vdev->priv_val; u32 val = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id); if (en == !!(val & ISP_LSC_EN)) @@ -641,9 +642,12 @@ isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) if (en) { isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN, id); - if (params_vdev->dev->hw_dev->is_single) - isp_lsc_matrix_cfg_sram(params_vdev, - ¶ms_rec->others.lsc_cfg, false, id); + if (params_vdev->dev->hw_dev->is_single) { + if (!in_interrupt()) + isp_lsc_matrix_cfg_sram(params_vdev, ¶ms_rec->others.lsc_cfg, false, id); + else if (id == ISP3_LEFT) + tasklet_schedule(&priv_val->lsc_tasklet); + } } else { isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN, id); isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(8), id);