mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
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:
@@ -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,
|
||||
¶ms_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));
|
||||
|
||||
@@ -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,
|
||||
¶ms_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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user