media: rockchip: isp: fix hold at lsc ram data config

isp_raw_clk auto-gate and lsc ram config need lsc enable

Change-Id: Id257c40bea4fea0bf89b799bbcb127a4827d5394
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2022-06-08 14:29:27 +08:00
committed by Tao Huang
parent 11ee607656
commit d07683b395
3 changed files with 28 additions and 26 deletions

View File

@@ -540,16 +540,10 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
u32 data, lsc_ctrl;
int i;
/* To config must be off , store the current status firstly */
lsc_ctrl = isp3_param_read(params_vdev, ISP3X_LSC_CTRL);
isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN | BIT(2));
params_rec->others.lsc_cfg = *arg;
if (dev->hw_dev->is_single) {
if (lsc_ctrl & ISP_LSC_EN)
tasklet_schedule(&priv_val->lsc_tasklet);
else
isp_lsc_matrix_cfg_sram(params_vdev, arg, false);
}
if (dev->hw_dev->is_single && (lsc_ctrl & ISP_LSC_EN))
tasklet_schedule(&priv_val->lsc_tasklet);
for (i = 0; i < ISP32_LSC_SIZE_TBL_SIZE / 4; i++) {
/* program x size tables */
@@ -578,17 +572,24 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
}
if (arg->sector_16x16)
lsc_ctrl |= BIT(2);
isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, lsc_ctrl);
lsc_ctrl |= ISP3X_LSC_SECTOR_16X16;
else
lsc_ctrl &= ~ISP3X_LSC_SECTOR_16X16;
isp3_param_write(params_vdev, lsc_ctrl, ISP3X_LSC_CTRL);
}
static void
isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
{
u32 val = ISP_LSC_EN;
struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params;
u32 val;
if (en) {
val = ISP_LSC_EN | ISP32_SELF_FORCE_UPD;
isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, val);
if (params_vdev->dev->hw_dev->is_single)
isp_lsc_matrix_cfg_sram(params_vdev,
&params_rec->others.lsc_cfg, false);
} else {
isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN);
isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(8));

View File

@@ -609,19 +609,13 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
u32 lsc_ctrl;
int i;
/* To config must be off , store the current status firstly */
lsc_ctrl = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id);
isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN | BIT(2), id);
params_rec->others.lsc_cfg = *arg;
if (dev->hw_dev->is_single) {
if (lsc_ctrl & ISP_LSC_EN) {
/* latest config for ISP3_LEFT, unite isp or single isp */
if (id == ISP3_LEFT)
tasklet_schedule(&priv_val->lsc_tasklet);
} else {
isp_lsc_matrix_cfg_sram(params_vdev, arg, false, id);
}
}
if (dev->hw_dev->is_single &&
(lsc_ctrl & ISP_LSC_EN) &&
(id == ISP3_LEFT))
/* latest config for ISP3_LEFT, unite isp or single isp */
tasklet_schedule(&priv_val->lsc_tasklet);
for (i = 0; i < ISP3X_LSC_SIZE_TBL_SIZE / 4; i++) {
/* program x size tables */
@@ -658,17 +652,23 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
}
if (arg->sector_16x16)
lsc_ctrl |= BIT(2);
isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, lsc_ctrl, id);
lsc_ctrl |= ISP3X_LSC_SECTOR_16X16;
else
lsc_ctrl &= ~ISP3X_LSC_SECTOR_16X16;
isp3_param_write(params_vdev, lsc_ctrl, ISP3X_LSC_CTRL, id);
}
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;
u32 val = ISP_LSC_EN;
if (en) {
isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, val, id);
if (params_vdev->dev->hw_dev->is_single)
isp_lsc_matrix_cfg_sram(params_vdev,
&params_rec->others.lsc_cfg, false, id);
} 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);
@@ -2796,8 +2796,7 @@ isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev,
ctrl |= (arg->soft_wr_en & 0x1) << 25;
/* merge dual unite isp params at frame end */
if (arg->soft_wr_en &&
(!dev->hw_dev->is_unite ||
(dev->hw_dev->is_unite && !(ctrl & ISP3X_DHAZ_ENMUX)))) {
(!dev->hw_dev->is_unite || !(ctrl & ISP3X_DHAZ_ENMUX))) {
value = ISP_PACK_2SHORT(arg->adp_wt_wr, arg->adp_air_wr);
isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADT_WR0, id);
value = ISP_PACK_2SHORT(arg->adp_tmax_wr, arg->adp_gratio_wr);

View File

@@ -2138,6 +2138,8 @@
#define ISP3X_LSC_TABLE_ADDRESS_0 0
#define ISP3X_LSC_TABLE_ADDRESS_153 153
#define ISP3X_LSC_SECTOR_16X16 BIT(2)
/* RAWAE */
#define ISP3X_RAWAE_LITE_EN BIT(0)
#define ISP3X_RAWAE_LITE_WNDNUM BIT(1)