From c1b4d9854515f98259e714a016a38378cb5f1b52 Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Fri, 7 May 2021 15:20:26 +0800 Subject: [PATCH] media: rockchip: isp: apply en params if no match for isp20 Change-Id: I47bc2b58aae016df1bb6ba0a1425431bed53ca9d Signed-off-by: Cai YiWei --- .../platform/rockchip/isp/isp_params_v2x.c | 668 +++++++----------- 1 file changed, 262 insertions(+), 406 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/isp_params_v2x.c b/drivers/media/platform/rockchip/isp/isp_params_v2x.c index 9d7f9beb7016..9902d0c42db5 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v2x.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v2x.c @@ -697,7 +697,7 @@ isp_lsc_matrix_cfg_ddr(struct rkisp_isp_params_vdev *params_vdev, 0); vaddr[3][index[3]++] = data; } - + rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_lsclut[buf_idx]); data = priv_val->buf_lsclut[buf_idx].dma_addr; rkisp_iowrite32(params_vdev, data, MI_LUT_LSC_RD_BASE); rkisp_iowrite32(params_vdev, RKISP_PARAM_LSC_LUT_BUF_SIZE, MI_LUT_LSC_RD_WSIZE); @@ -747,13 +747,11 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev, /* restore the lsc ctrl status */ if (lsc_ctrl & ISP_LSC_EN) { - isp_param_set_bits(params_vdev, - ISP_LSC_CTRL, - ISP_LSC_EN); + if (!IS_HDR_RDBK(dev->rd_mode)) + lsc_ctrl |= ISP_LSC_LUT_EN; + isp_param_set_bits(params_vdev, ISP_LSC_CTRL, lsc_ctrl); } else { - isp_param_clear_bits(params_vdev, - ISP_LSC_CTRL, - ISP_LSC_EN); + isp_param_clear_bits(params_vdev, ISP_LSC_CTRL, ISP_LSC_EN); } params_vdev->cur_lsccfg = *arg; @@ -3111,7 +3109,7 @@ isp_rawnr_enable(struct rkisp_isp_params_vdev *params_vdev, static void isp_hdrtmo_wait_first_line(struct rkisp_isp_params_vdev *params_vdev) { - s32 retry = 8; + s32 retry = 10; u32 value, line_cnt, frame_id; struct v4l2_rect *out_crop = ¶ms_vdev->dev->isp_sdev.out_crop; @@ -3126,10 +3124,6 @@ static void isp_hdrtmo_wait_first_line(struct rkisp_isp_params_vdev *params_vdev else break; } while (retry-- > 0); - - if (retry < 0) - dev_err(params_vdev->dev->dev, "hdr line_cnt(%d) < 1line\n", - line_cnt); } static void @@ -3528,7 +3522,7 @@ isp_3dlut_config(struct rkisp_isp_params_vdev *params_vdev, data[i] = (arg->lut_b[i] & 0x3FF) | (arg->lut_g[i] & 0xFFF) << 10 | (arg->lut_r[i] & 0x3FF) << 22; - + rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_3dlut[buf_idx]); value = priv_val->buf_3dlut[buf_idx].dma_addr; rkisp_iowrite32(params_vdev, value, MI_LUT_3D_RD_BASE); rkisp_iowrite32(params_vdev, arg->actual_size, MI_LUT_3D_RD_WSIZE); @@ -3612,6 +3606,7 @@ isp_ldch_config(struct rkisp_isp_params_vdev *params_vdev, if (dev->rd_mode == HDR_RDBK_FRAME1) vsize += cnt; } + rkisp_prepare_buffer(dev, &priv_val->buf_ldch[buf_idx]); value = priv_val->buf_ldch[buf_idx].dma_addr + ldch_head->data_oft; rkisp_iowrite32(params_vdev, value, MI_LUT_LDCH_RD_BASE); rkisp_iowrite32(params_vdev, arg->hsize, MI_LUT_LDCH_RD_H_WSIZE); @@ -3750,454 +3745,294 @@ static __maybe_unused void __isp_isr_other_config(struct rkisp_isp_params_vdev *params_vdev, const struct isp2x_isp_params_cfg *new_params, enum rkisp_params_type type) { - u64 module_en_update, module_cfg_update, module_ens; + struct rkisp_isp_params_v2x_ops *ops = + (struct rkisp_isp_params_v2x_ops *)params_vdev->priv_ops; + u64 module_cfg_update = new_params->module_cfg_update; + + if (type == RKISP_PARAMS_SHD) { + if ((module_cfg_update & ISP2X_MODULE_HDRMGE)) + ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type); + + if ((module_cfg_update & ISP2X_MODULE_HDRTMO)) + ops->hdrtmo_config(params_vdev, &new_params->others.hdrtmo_cfg, type); + + return; + } + + if ((module_cfg_update & ISP2X_MODULE_DPCC)) + ops->dpcc_config(params_vdev, &new_params->others.dpcc_cfg); + + if ((module_cfg_update & ISP2X_MODULE_BLS)) + ops->bls_config(params_vdev, &new_params->others.bls_cfg); + + if ((module_cfg_update & ISP2X_MODULE_SDG)) + ops->sdg_config(params_vdev, &new_params->others.sdg_cfg); + + if ((module_cfg_update & ISP2X_MODULE_LSC)) + ops->lsc_config(params_vdev, &new_params->others.lsc_cfg); + + if ((module_cfg_update & ISP2X_MODULE_AWB_GAIN)) + ops->awbgain_config(params_vdev, &new_params->others.awb_gain_cfg); + + if ((module_cfg_update & ISP2X_MODULE_DEBAYER)) + ops->debayer_config(params_vdev, &new_params->others.debayer_cfg); + + if ((module_cfg_update & ISP2X_MODULE_CCM)) + ops->ccm_config(params_vdev, &new_params->others.ccm_cfg); + + if ((module_cfg_update & ISP2X_MODULE_GOC)) + ops->goc_config(params_vdev, &new_params->others.gammaout_cfg); + + if ((module_cfg_update & ISP2X_MODULE_CPROC)) + ops->cproc_config(params_vdev, &new_params->others.cproc_cfg); + + if ((module_cfg_update & ISP2X_MODULE_IE)) + ops->ie_config(params_vdev, &new_params->others.ie_cfg); + + if ((module_cfg_update & ISP2X_MODULE_WDR)) + ops->wdr_config(params_vdev, &new_params->others.wdr_cfg); + + if ((module_cfg_update & ISP2X_MODULE_RK_IESHARP)) + ops->iesharp_config(params_vdev, &new_params->others.rkiesharp_cfg); + + if ((module_cfg_update & ISP2X_MODULE_HDRMGE)) + ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type); + + if ((module_cfg_update & ISP2X_MODULE_RAWNR)) + ops->rawnr_config(params_vdev, &new_params->others.rawnr_cfg); + + if ((module_cfg_update & ISP2X_MODULE_HDRTMO)) + ops->hdrtmo_config(params_vdev, &new_params->others.hdrtmo_cfg, type); + + if ((module_cfg_update & ISP2X_MODULE_GIC)) + ops->gic_config(params_vdev, &new_params->others.gic_cfg); + + if ((module_cfg_update & ISP2X_MODULE_DHAZ)) + ops->dhaz_config(params_vdev, &new_params->others.dhaz_cfg); + + if ((module_cfg_update & ISP2X_MODULE_3DLUT)) + ops->isp3dlut_config(params_vdev, &new_params->others.isp3dlut_cfg); + + if ((module_cfg_update & ISP2X_MODULE_LDCH)) + ops->ldch_config(params_vdev, &new_params->others.ldch_cfg); + + if ((module_cfg_update & ISP2X_MODULE_GAIN)) + ops->gain_config(params_vdev, &new_params->others.gain_cfg); +} + +static __maybe_unused +void __isp_isr_other_en(struct rkisp_isp_params_vdev *params_vdev, + const struct isp2x_isp_params_cfg *new_params, enum rkisp_params_type type) +{ struct rkisp_isp_params_v2x_ops *ops = (struct rkisp_isp_params_v2x_ops *)params_vdev->priv_ops; struct rkisp_isp_params_val_v2x *priv_val = (struct rkisp_isp_params_val_v2x *)params_vdev->priv_val; + u64 module_en_update = new_params->module_en_update; + u64 module_ens = new_params->module_ens; - module_en_update = new_params->module_en_update; - module_cfg_update = new_params->module_cfg_update; - module_ens = new_params->module_ens; - - if (type == RKISP_PARAMS_SHD) { - if ((module_en_update & ISP2X_MODULE_HDRMGE) || - (module_cfg_update & ISP2X_MODULE_HDRMGE)) { - if ((module_cfg_update & ISP2X_MODULE_HDRMGE)) - ops->hdrmge_config(params_vdev, - &new_params->others.hdrmge_cfg, type); - - if (module_en_update & ISP2X_MODULE_HDRMGE) { - ops->hdrmge_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_HDRMGE)); - priv_val->mge_en = !!(module_ens & ISP2X_MODULE_HDRMGE); - } - } - - if ((module_en_update & ISP2X_MODULE_HDRTMO) || - (module_cfg_update & ISP2X_MODULE_HDRTMO)) { - if ((module_cfg_update & ISP2X_MODULE_HDRTMO)) - ops->hdrtmo_config(params_vdev, - &new_params->others.hdrtmo_cfg, type); - - if (module_en_update & ISP2X_MODULE_HDRTMO) { - ops->hdrtmo_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_HDRTMO)); - priv_val->tmo_en = !!(module_ens & ISP2X_MODULE_HDRTMO); - } - } + if (type == RKISP_PARAMS_SHD) return; + + if (module_en_update & ISP2X_MODULE_HDRMGE) { + ops->hdrmge_enable(params_vdev, !!(module_ens & ISP2X_MODULE_HDRMGE)); + priv_val->mge_en = !!(module_ens & ISP2X_MODULE_HDRMGE); } - if ((module_en_update & ISP2X_MODULE_DPCC) || - (module_cfg_update & ISP2X_MODULE_DPCC)) { - if ((module_cfg_update & ISP2X_MODULE_DPCC)) - ops->dpcc_config(params_vdev, - &new_params->others.dpcc_cfg); - - if (module_en_update & ISP2X_MODULE_DPCC) - ops->dpcc_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_DPCC)); + if (module_en_update & ISP2X_MODULE_HDRTMO) { + ops->hdrtmo_enable(params_vdev, !!(module_ens & ISP2X_MODULE_HDRTMO)); + priv_val->tmo_en = !!(module_ens & ISP2X_MODULE_HDRTMO); } - if ((module_en_update & ISP2X_MODULE_BLS) || - (module_cfg_update & ISP2X_MODULE_BLS)) { - if ((module_cfg_update & ISP2X_MODULE_BLS)) - ops->bls_config(params_vdev, - &new_params->others.bls_cfg); + if (module_en_update & ISP2X_MODULE_DPCC) + ops->dpcc_enable(params_vdev, !!(module_ens & ISP2X_MODULE_DPCC)); - if (module_en_update & ISP2X_MODULE_BLS) - ops->bls_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_BLS)); + if (module_en_update & ISP2X_MODULE_BLS) + ops->bls_enable(params_vdev, !!(module_ens & ISP2X_MODULE_BLS)); + + if (module_en_update & ISP2X_MODULE_SDG) + ops->sdg_enable(params_vdev, !!(module_ens & ISP2X_MODULE_SDG)); + + if (module_en_update & ISP2X_MODULE_LSC) { + ops->lsc_enable(params_vdev, !!(module_ens & ISP2X_MODULE_LSC)); + priv_val->lsc_en = !!(module_ens & ISP2X_MODULE_LSC); } - if ((module_en_update & ISP2X_MODULE_SDG) || - (module_cfg_update & ISP2X_MODULE_SDG)) { - if ((module_cfg_update & ISP2X_MODULE_SDG)) - ops->sdg_config(params_vdev, - &new_params->others.sdg_cfg); + if (module_en_update & ISP2X_MODULE_AWB_GAIN) + ops->awbgain_enable(params_vdev, !!(module_ens & ISP2X_MODULE_AWB_GAIN)); - if (module_en_update & ISP2X_MODULE_SDG) - ops->sdg_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_SDG)); + if (module_en_update & ISP2X_MODULE_DEBAYER) + ops->debayer_enable(params_vdev, !!(module_ens & ISP2X_MODULE_DEBAYER)); + + if (module_en_update & ISP2X_MODULE_CCM) + ops->ccm_enable(params_vdev, !!(module_ens & ISP2X_MODULE_CCM)); + + if (module_en_update & ISP2X_MODULE_GOC) + ops->goc_enable(params_vdev, !!(module_ens & ISP2X_MODULE_GOC)); + + if (module_en_update & ISP2X_MODULE_CPROC) + ops->cproc_enable(params_vdev, !!(module_ens & ISP2X_MODULE_CPROC)); + + if (module_en_update & ISP2X_MODULE_IE) + ops->ie_enable(params_vdev, !!(module_ens & ISP2X_MODULE_IE)); + + if (module_en_update & ISP2X_MODULE_WDR) { + ops->wdr_enable(params_vdev, !!(module_ens & ISP2X_MODULE_WDR)); + priv_val->wdr_en = !!(module_ens & ISP2X_MODULE_WDR); } - if ((module_en_update & ISP2X_MODULE_LSC) || - (module_cfg_update & ISP2X_MODULE_LSC)) { - if ((module_cfg_update & ISP2X_MODULE_LSC)) - ops->lsc_config(params_vdev, - &new_params->others.lsc_cfg); + if (module_en_update & ISP2X_MODULE_RK_IESHARP) + ops->iesharp_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RK_IESHARP)); - if (module_en_update & ISP2X_MODULE_LSC) { - ops->lsc_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_LSC)); - priv_val->lsc_en = !!(module_ens & ISP2X_MODULE_LSC); - } + if (module_en_update & ISP2X_MODULE_HDRMGE) { + ops->hdrmge_enable(params_vdev, !!(module_ens & ISP2X_MODULE_HDRMGE)); + priv_val->mge_en = !!(module_ens & ISP2X_MODULE_HDRMGE); } - if ((module_en_update & ISP2X_MODULE_AWB_GAIN) || - (module_cfg_update & ISP2X_MODULE_AWB_GAIN)) { - if ((module_cfg_update & ISP2X_MODULE_AWB_GAIN)) - ops->awbgain_config(params_vdev, - &new_params->others.awb_gain_cfg); + if (module_en_update & ISP2X_MODULE_RAWNR) + ops->rawnr_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWNR)); - if (module_en_update & ISP2X_MODULE_AWB_GAIN) - ops->awbgain_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_AWB_GAIN)); + if (module_en_update & ISP2X_MODULE_HDRTMO) { + ops->hdrtmo_enable(params_vdev, !!(module_ens & ISP2X_MODULE_HDRTMO)); + priv_val->tmo_en = !!(module_ens & ISP2X_MODULE_HDRTMO); } - if ((module_en_update & ISP2X_MODULE_DEBAYER) || - (module_cfg_update & ISP2X_MODULE_DEBAYER)) { - if ((module_cfg_update & ISP2X_MODULE_DEBAYER)) - ops->debayer_config(params_vdev, - &new_params->others.debayer_cfg); + if (module_en_update & ISP2X_MODULE_GIC) + ops->gic_enable(params_vdev, !!(module_ens & ISP2X_MODULE_GIC)); - if (module_en_update & ISP2X_MODULE_DEBAYER) - ops->debayer_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_DEBAYER)); + if (module_en_update & ISP2X_MODULE_DHAZ) { + ops->dhaz_enable(params_vdev, !!(module_ens & ISP2X_MODULE_DHAZ)); + priv_val->dhaz_en = !!(module_ens & ISP2X_MODULE_DHAZ); } - if ((module_en_update & ISP2X_MODULE_CCM) || - (module_cfg_update & ISP2X_MODULE_CCM)) { - if ((module_cfg_update & ISP2X_MODULE_CCM)) - ops->ccm_config(params_vdev, - &new_params->others.ccm_cfg); + if (module_en_update & ISP2X_MODULE_3DLUT) + ops->isp3dlut_enable(params_vdev, !!(module_ens & ISP2X_MODULE_3DLUT)); - if (module_en_update & ISP2X_MODULE_CCM) - ops->ccm_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_CCM)); + if (module_en_update & ISP2X_MODULE_LDCH) { + /* + * lsc read table from sram in mult-isp mode, + * so don't delay in mult-isp mode. + */ + if (params_vdev->first_cfg_params && + !!(module_ens & ISP2X_MODULE_LDCH) && + params_vdev->dev->hw_dev->is_single) + priv_val->delay_en_ldch = true; + else + ops->ldch_enable(params_vdev, + !!(module_ens & ISP2X_MODULE_LDCH)); } - if ((module_en_update & ISP2X_MODULE_GOC) || - (module_cfg_update & ISP2X_MODULE_GOC)) { - if ((module_cfg_update & ISP2X_MODULE_GOC)) - ops->goc_config(params_vdev, - &new_params->others.gammaout_cfg); - - if (module_en_update & ISP2X_MODULE_GOC) - ops->goc_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_GOC)); - } - - if ((module_en_update & ISP2X_MODULE_CPROC) || - (module_cfg_update & ISP2X_MODULE_CPROC)) { - if ((module_cfg_update & ISP2X_MODULE_CPROC)) - ops->cproc_config(params_vdev, - &new_params->others.cproc_cfg); - - if (module_en_update & ISP2X_MODULE_CPROC) - ops->cproc_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_CPROC)); - } - - if ((module_en_update & ISP2X_MODULE_IE) || - (module_cfg_update & ISP2X_MODULE_IE)) { - if ((module_cfg_update & ISP2X_MODULE_IE)) - ops->ie_config(params_vdev, - &new_params->others.ie_cfg); - - if (module_en_update & ISP2X_MODULE_IE) - ops->ie_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_IE)); - } - - if ((module_en_update & ISP2X_MODULE_WDR) || - (module_cfg_update & ISP2X_MODULE_WDR)) { - if ((module_cfg_update & ISP2X_MODULE_WDR)) - ops->wdr_config(params_vdev, - &new_params->others.wdr_cfg); - - if (module_en_update & ISP2X_MODULE_WDR) { - ops->wdr_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_WDR)); - priv_val->wdr_en = !!(module_ens & ISP2X_MODULE_WDR); - } - } - - if ((module_en_update & ISP2X_MODULE_RK_IESHARP) || - (module_cfg_update & ISP2X_MODULE_RK_IESHARP)) { - if ((module_cfg_update & ISP2X_MODULE_RK_IESHARP)) - ops->iesharp_config(params_vdev, - &new_params->others.rkiesharp_cfg); - - if (module_en_update & ISP2X_MODULE_RK_IESHARP) - ops->iesharp_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RK_IESHARP)); - } - - if ((module_en_update & ISP2X_MODULE_HDRMGE) || - (module_cfg_update & ISP2X_MODULE_HDRMGE)) { - if ((module_cfg_update & ISP2X_MODULE_HDRMGE)) - ops->hdrmge_config(params_vdev, - &new_params->others.hdrmge_cfg, type); - - if (module_en_update & ISP2X_MODULE_HDRMGE) { - ops->hdrmge_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_HDRMGE)); - priv_val->mge_en = !!(module_ens & ISP2X_MODULE_HDRMGE); - } - } - - if ((module_en_update & ISP2X_MODULE_RAWNR) || - (module_cfg_update & ISP2X_MODULE_RAWNR)) { - if ((module_cfg_update & ISP2X_MODULE_RAWNR)) - ops->rawnr_config(params_vdev, - &new_params->others.rawnr_cfg); - - if (module_en_update & ISP2X_MODULE_RAWNR) - ops->rawnr_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWNR)); - } - - if ((module_en_update & ISP2X_MODULE_HDRTMO) || - (module_cfg_update & ISP2X_MODULE_HDRTMO)) { - if ((module_cfg_update & ISP2X_MODULE_HDRTMO)) - ops->hdrtmo_config(params_vdev, - &new_params->others.hdrtmo_cfg, type); - - if (module_en_update & ISP2X_MODULE_HDRTMO) { - ops->hdrtmo_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_HDRTMO)); - priv_val->tmo_en = !!(module_ens & ISP2X_MODULE_HDRTMO); - } - } - - if ((module_en_update & ISP2X_MODULE_GIC) || - (module_cfg_update & ISP2X_MODULE_GIC)) { - if ((module_cfg_update & ISP2X_MODULE_GIC)) - ops->gic_config(params_vdev, - &new_params->others.gic_cfg); - - if (module_en_update & ISP2X_MODULE_GIC) - ops->gic_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_GIC)); - } - - if ((module_en_update & ISP2X_MODULE_DHAZ) || - (module_cfg_update & ISP2X_MODULE_DHAZ)) { - if ((module_cfg_update & ISP2X_MODULE_DHAZ)) - ops->dhaz_config(params_vdev, - &new_params->others.dhaz_cfg); - - if (module_en_update & ISP2X_MODULE_DHAZ) { - ops->dhaz_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_DHAZ)); - priv_val->dhaz_en = !!(module_ens & ISP2X_MODULE_DHAZ); - } - } - - if ((module_en_update & ISP2X_MODULE_3DLUT) || - (module_cfg_update & ISP2X_MODULE_3DLUT)) { - if ((module_cfg_update & ISP2X_MODULE_3DLUT)) - ops->isp3dlut_config(params_vdev, - &new_params->others.isp3dlut_cfg); - - if (module_en_update & ISP2X_MODULE_3DLUT) - ops->isp3dlut_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_3DLUT)); - } - - if ((module_en_update & ISP2X_MODULE_LDCH) || - (module_cfg_update & ISP2X_MODULE_LDCH)) { - if ((module_cfg_update & ISP2X_MODULE_LDCH)) - ops->ldch_config(params_vdev, - &new_params->others.ldch_cfg); - - if (module_en_update & ISP2X_MODULE_LDCH) { - /* - * lsc read table from sram in mult-isp mode, - * so don't delay in mult-isp mode. - */ - if (params_vdev->first_cfg_params && - !!(module_ens & ISP2X_MODULE_LDCH) && - params_vdev->dev->hw_dev->is_single) - priv_val->delay_en_ldch = true; - else - ops->ldch_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_LDCH)); - } - } - - if ((module_en_update & ISP2X_MODULE_GAIN) || - (module_cfg_update & ISP2X_MODULE_GAIN)) { - if ((module_cfg_update & ISP2X_MODULE_GAIN)) - ops->gain_config(params_vdev, - &new_params->others.gain_cfg); - - if (module_en_update & ISP2X_MODULE_GAIN) - ops->gain_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_GAIN)); - } + if (module_en_update & ISP2X_MODULE_GAIN) + ops->gain_enable(params_vdev, !!(module_ens & ISP2X_MODULE_GAIN)); } static __maybe_unused void __isp_isr_meas_config(struct rkisp_isp_params_vdev *params_vdev, struct isp2x_isp_params_cfg *new_params, enum rkisp_params_type type) { - u64 module_en_update, module_cfg_update, module_ens; struct rkisp_isp_params_v2x_ops *ops = (struct rkisp_isp_params_v2x_ops *)params_vdev->priv_ops; + u64 module_cfg_update = new_params->module_cfg_update; if (type == RKISP_PARAMS_SHD) return; - module_en_update = new_params->module_en_update; - module_cfg_update = new_params->module_cfg_update; - module_ens = new_params->module_ens; + if ((module_cfg_update & ISP2X_MODULE_YUVAE)) + ops->yuvae_config(params_vdev, &new_params->meas.yuvae); - if ((module_en_update & ISP2X_MODULE_YUVAE) || - (module_cfg_update & ISP2X_MODULE_YUVAE)) { - if ((module_cfg_update & ISP2X_MODULE_YUVAE)) - ops->yuvae_config(params_vdev, - &new_params->meas.yuvae); + if ((module_cfg_update & ISP2X_MODULE_RAWAE0)) + ops->rawae0_config(params_vdev, &new_params->meas.rawae0); - if (module_en_update & ISP2X_MODULE_YUVAE) - ops->yuvae_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_YUVAE)); - } + if ((module_cfg_update & ISP2X_MODULE_RAWAE1)) + ops->rawae1_config(params_vdev, &new_params->meas.rawae1); - if ((module_en_update & ISP2X_MODULE_RAWAE0) || - (module_cfg_update & ISP2X_MODULE_RAWAE0)) { - if ((module_cfg_update & ISP2X_MODULE_RAWAE0)) - ops->rawae0_config(params_vdev, - &new_params->meas.rawae0); + if ((module_cfg_update & ISP2X_MODULE_RAWAE2)) + ops->rawae2_config(params_vdev, &new_params->meas.rawae2); - if (module_en_update & ISP2X_MODULE_RAWAE0) - ops->rawae0_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWAE0)); - } + if ((module_cfg_update & ISP2X_MODULE_RAWAE3)) + ops->rawae3_config(params_vdev, &new_params->meas.rawae3); - if ((module_en_update & ISP2X_MODULE_RAWAE1) || - (module_cfg_update & ISP2X_MODULE_RAWAE1)) { - if ((module_cfg_update & ISP2X_MODULE_RAWAE1)) - ops->rawae1_config(params_vdev, - &new_params->meas.rawae1); + if ((module_cfg_update & ISP2X_MODULE_SIHST)) + ops->sihst_config(params_vdev, &new_params->meas.sihst); - if (module_en_update & ISP2X_MODULE_RAWAE1) - ops->rawae1_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWAE1)); - } + if ((module_cfg_update & ISP2X_MODULE_RAWHIST0)) + ops->rawhst0_config(params_vdev, &new_params->meas.rawhist0); - if ((module_en_update & ISP2X_MODULE_RAWAE2) || - (module_cfg_update & ISP2X_MODULE_RAWAE2)) { - if ((module_cfg_update & ISP2X_MODULE_RAWAE2)) - ops->rawae2_config(params_vdev, - &new_params->meas.rawae2); + if ((module_cfg_update & ISP2X_MODULE_RAWHIST1)) + ops->rawhst1_config(params_vdev, &new_params->meas.rawhist1); - if (module_en_update & ISP2X_MODULE_RAWAE2) - ops->rawae2_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWAE2)); - } + if ((module_cfg_update & ISP2X_MODULE_RAWHIST2)) + ops->rawhst2_config(params_vdev, &new_params->meas.rawhist2); - if ((module_en_update & ISP2X_MODULE_RAWAE3) || - (module_cfg_update & ISP2X_MODULE_RAWAE3)) { - if ((module_cfg_update & ISP2X_MODULE_RAWAE3)) - ops->rawae3_config(params_vdev, - &new_params->meas.rawae3); + if ((module_cfg_update & ISP2X_MODULE_RAWHIST3)) + ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3); - if (module_en_update & ISP2X_MODULE_RAWAE3) - ops->rawae3_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWAE3)); - } + if ((module_cfg_update & ISP2X_MODULE_SIAWB)) + ops->siawb_config(params_vdev, &new_params->meas.siawb); - if ((module_en_update & ISP2X_MODULE_SIHST) || - (module_cfg_update & ISP2X_MODULE_SIHST)) { - if ((module_cfg_update & ISP2X_MODULE_SIHST)) - ops->sihst_config(params_vdev, - &new_params->meas.sihst); + if ((module_cfg_update & ISP2X_MODULE_RAWAWB)) + ops->rawawb_config(params_vdev, &new_params->meas.rawawb); - if (module_en_update & ISP2X_MODULE_SIHST) - ops->sihst_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_SIHST)); - } + if ((module_cfg_update & ISP2X_MODULE_SIAF)) + ops->siaf_config(params_vdev, &new_params->meas.siaf); - if ((module_en_update & ISP2X_MODULE_RAWHIST0) || - (module_cfg_update & ISP2X_MODULE_RAWHIST0)) { - if ((module_cfg_update & ISP2X_MODULE_RAWHIST0)) - ops->rawhst0_config(params_vdev, - &new_params->meas.rawhist0); + if ((module_cfg_update & ISP2X_MODULE_RAWAF)) + ops->rawaf_config(params_vdev, &new_params->meas.rawaf); +} - if (module_en_update & ISP2X_MODULE_RAWHIST0) - ops->rawhst0_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWHIST0)); - } +static __maybe_unused +void __isp_isr_meas_en(struct rkisp_isp_params_vdev *params_vdev, + struct isp2x_isp_params_cfg *new_params, enum rkisp_params_type type) +{ + struct rkisp_isp_params_v2x_ops *ops = + (struct rkisp_isp_params_v2x_ops *)params_vdev->priv_ops; + u64 module_en_update = new_params->module_en_update; + u64 module_ens = new_params->module_ens; - if ((module_en_update & ISP2X_MODULE_RAWHIST1) || - (module_cfg_update & ISP2X_MODULE_RAWHIST1)) { - if ((module_cfg_update & ISP2X_MODULE_RAWHIST1)) - ops->rawhst1_config(params_vdev, - &new_params->meas.rawhist1); + if (type == RKISP_PARAMS_SHD) + return; - if (module_en_update & ISP2X_MODULE_RAWHIST1) - ops->rawhst1_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWHIST1)); - } + if (module_en_update & ISP2X_MODULE_YUVAE) + ops->yuvae_enable(params_vdev, !!(module_ens & ISP2X_MODULE_YUVAE)); - if ((module_en_update & ISP2X_MODULE_RAWHIST2) || - (module_cfg_update & ISP2X_MODULE_RAWHIST2)) { - if ((module_cfg_update & ISP2X_MODULE_RAWHIST2)) - ops->rawhst2_config(params_vdev, - &new_params->meas.rawhist2); + if (module_en_update & ISP2X_MODULE_RAWAE0) + ops->rawae0_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWAE0)); - if (module_en_update & ISP2X_MODULE_RAWHIST2) - ops->rawhst2_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWHIST2)); - } + if (module_en_update & ISP2X_MODULE_RAWAE1) + ops->rawae1_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWAE1)); - if ((module_en_update & ISP2X_MODULE_RAWHIST3) || - (module_cfg_update & ISP2X_MODULE_RAWHIST3)) { - if ((module_cfg_update & ISP2X_MODULE_RAWHIST3)) - ops->rawhst3_config(params_vdev, - &new_params->meas.rawhist3); + if (module_en_update & ISP2X_MODULE_RAWAE2) + ops->rawae2_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWAE2)); - if (module_en_update & ISP2X_MODULE_RAWHIST3) - ops->rawhst3_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWHIST3)); - } + if (module_en_update & ISP2X_MODULE_RAWAE3) + ops->rawae3_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWAE3)); - if ((module_en_update & ISP2X_MODULE_SIAWB) || - (module_cfg_update & ISP2X_MODULE_SIAWB)) { - if ((module_cfg_update & ISP2X_MODULE_SIAWB)) - ops->siawb_config(params_vdev, - &new_params->meas.siawb); + if (module_en_update & ISP2X_MODULE_SIHST) + ops->sihst_enable(params_vdev, !!(module_ens & ISP2X_MODULE_SIHST)); - if (module_en_update & ISP2X_MODULE_SIAWB) - ops->siawb_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_SIAWB)); - } + if (module_en_update & ISP2X_MODULE_RAWHIST0) + ops->rawhst0_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWHIST0)); - if ((module_en_update & ISP2X_MODULE_RAWAWB) || - (module_cfg_update & ISP2X_MODULE_RAWAWB)) { - if ((module_cfg_update & ISP2X_MODULE_RAWAWB)) - ops->rawawb_config(params_vdev, - &new_params->meas.rawawb); + if (module_en_update & ISP2X_MODULE_RAWHIST1) + ops->rawhst1_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWHIST1)); - if (module_en_update & ISP2X_MODULE_RAWAWB) - ops->rawawb_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWAWB)); - } + if (module_en_update & ISP2X_MODULE_RAWHIST2) + ops->rawhst2_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWHIST2)); - if ((module_en_update & ISP2X_MODULE_SIAF) || - (module_cfg_update & ISP2X_MODULE_SIAF)) { - if ((module_cfg_update & ISP2X_MODULE_SIAF)) - ops->siaf_config(params_vdev, - &new_params->meas.siaf); + if (module_en_update & ISP2X_MODULE_RAWHIST3) + ops->rawhst3_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWHIST3)); - if (module_en_update & ISP2X_MODULE_SIAF) - ops->siaf_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_SIAF)); - } + if (module_en_update & ISP2X_MODULE_SIAWB) + ops->siawb_enable(params_vdev, !!(module_ens & ISP2X_MODULE_SIAWB)); - if ((module_en_update & ISP2X_MODULE_RAWAF) || - (module_cfg_update & ISP2X_MODULE_RAWAF)) { - if ((module_cfg_update & ISP2X_MODULE_RAWAF)) - ops->rawaf_config(params_vdev, - &new_params->meas.rawaf); + if (module_en_update & ISP2X_MODULE_RAWAWB) + ops->rawawb_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWAWB)); - if (module_en_update & ISP2X_MODULE_RAWAF) - ops->rawaf_enable(params_vdev, - !!(module_ens & ISP2X_MODULE_RAWAF)); - } + if (module_en_update & ISP2X_MODULE_SIAF) + ops->siaf_enable(params_vdev, !!(module_ens & ISP2X_MODULE_SIAF)); + + if (module_en_update & ISP2X_MODULE_RAWAF) + ops->rawaf_enable(params_vdev, !!(module_ens & ISP2X_MODULE_RAWAF)); } static __maybe_unused @@ -4212,12 +4047,6 @@ void __isp_config_hdrshd(struct rkisp_isp_params_vdev *params_vdev) ¶ms_vdev->last_hdrtmo, RKISP_PARAMS_ALL); } -static __maybe_unused -void __preisp_isr_update_hdrae_para(struct rkisp_isp_params_vdev *params_vdev, - struct isp2x_isp_params_cfg *new_params) -{ -} - static void rkisp_params_cfgsram_v2x(struct rkisp_isp_params_vdev *params_vdev) { @@ -4247,8 +4076,9 @@ rkisp_params_first_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev) priv_val->delay_en_ldch = false; params_vdev->first_cfg_params = true; __isp_isr_other_config(params_vdev, params_vdev->isp2x_params, RKISP_PARAMS_ALL); + __isp_isr_other_en(params_vdev, params_vdev->isp2x_params, RKISP_PARAMS_ALL); __isp_isr_meas_config(params_vdev, params_vdev->isp2x_params, RKISP_PARAMS_ALL); - __preisp_isr_update_hdrae_para(params_vdev, params_vdev->isp2x_params); + __isp_isr_meas_en(params_vdev, params_vdev->isp2x_params, RKISP_PARAMS_ALL); params_vdev->first_cfg_params = false; params_vdev->cur_hdrtmo = params_vdev->isp2x_params->others.hdrtmo_cfg; @@ -4420,6 +4250,26 @@ rkisp_params_disable_isp_v2x(struct rkisp_isp_params_vdev *params_vdev) ops->isp3dlut_enable(params_vdev, false); } +static void +ldch_data_abandon(struct rkisp_isp_params_vdev *params_vdev, + struct isp2x_isp_params_cfg *params) +{ + const struct isp2x_ldch_cfg *arg = ¶ms->others.ldch_cfg; + struct rkisp_isp_params_val_v2x *priv_val; + struct isp2x_ldch_head *ldch_head; + int i; + + priv_val = (struct rkisp_isp_params_val_v2x *)params_vdev->priv_val; + for (i = 0; i < ISP2X_LDCH_BUF_NUM; i++) { + if (arg->buf_fd == priv_val->buf_ldch[i].dma_fd && + priv_val->buf_ldch[i].vaddr) { + ldch_head = (struct isp2x_ldch_head *)priv_val->buf_ldch[i].vaddr; + ldch_head->stat = LDCH_BUF_CHIPINUSE; + break; + } + } +} + static void rkisp_params_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev, u32 frame_id, enum rkisp_params_type type) @@ -4438,14 +4288,18 @@ rkisp_params_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev, cur_buf = list_first_entry(¶ms_vdev->params, struct rkisp_buffer, queue); - if (!IS_HDR_RDBK(dev->rd_mode)) { - list_del(&cur_buf->queue); - break; - } - new_params = (struct isp2x_isp_params_cfg *)(cur_buf->vaddr[0]); if (new_params->frame_id < frame_id) { list_del(&cur_buf->queue); + if (list_empty(¶ms_vdev->params)) + break; + else if (new_params->module_en_update) { + /* update en immediately */ + __isp_isr_other_en(params_vdev, new_params, type); + __isp_isr_meas_en(params_vdev, new_params, type); + } + if (new_params->module_cfg_update & ISP2X_MODULE_LDCH) + ldch_data_abandon(params_vdev, new_params); vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); cur_buf = NULL; continue; @@ -4462,7 +4316,9 @@ rkisp_params_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev, new_params = (struct isp2x_isp_params_cfg *)(cur_buf->vaddr[0]); __isp_isr_other_config(params_vdev, new_params, type); + __isp_isr_other_en(params_vdev, new_params, type); __isp_isr_meas_config(params_vdev, new_params, type); + __isp_isr_meas_en(params_vdev, new_params, type); if (!hw_dev->is_single && type != RKISP_PARAMS_SHD) __isp_config_hdrshd(params_vdev); @@ -4647,7 +4503,7 @@ rkisp_params_isr_v2x(struct rkisp_isp_params_vdev *params_vdev, } if ((isp_mis & CIF_ISP_FRAME) && !IS_HDR_RDBK(dev->rd_mode)) - rkisp_params_cfg_v2x(params_vdev, cur_frame_id, RKISP_PARAMS_ALL); + rkisp_params_cfg_v2x(params_vdev, cur_frame_id + 1, RKISP_PARAMS_ALL); } static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = {