diff --git a/drivers/media/platform/rockchip/isp/isp_params_v39.c b/drivers/media/platform/rockchip/isp/isp_params_v39.c index efbe070eeff6..4029a2428e6c 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v39.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v39.c @@ -1036,6 +1036,10 @@ isp_rawaf_config(struct rkisp_isp_params_vdev *params_vdev, var = ISP_PACK_2SHORT(arg->v_fv_limit, arg->v_fv_slope); isp3_param_write(params_vdev, var, ISP32L_RAWAF_CORING_V, id); + if (!arg->hiir_en || !arg->viir_en || !arg->aehgl_en) + dev_err(params_vdev->dev->dev, + "af hiir:%d viir:%d aehgl:%d no enable together\n", + arg->hiir_en, arg->viir_en, arg->aehgl_en); viir_en = arg->viir_en; gaus_en = arg->gaus_en; @@ -2187,13 +2191,18 @@ isp_hdrdrc_config(struct rkisp_isp_params_vdev *params_vdev, const struct isp39_drc_cfg *arg, enum rkisp_params_type type, u32 id) { - u32 i, value; + u32 i, value, ctrl; - value = isp3_param_read(params_vdev, ISP3X_DRC_CTRL0, id); - value &= ISP39_MODULE_EN; - value |= !!arg->raw_dly_dis << 29 | !!arg->gainx32_en << 3 | - !!arg->cmps_byp_en << 2 | !!arg->bypass_en << 1; - isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL0, id); + ctrl = isp3_param_read(params_vdev, ISP3X_DRC_CTRL0, id); + ctrl &= ISP39_MODULE_EN; + ctrl |= !!arg->gainx32_en << 3 | + !!arg->cmps_byp_en << 2 | !!arg->bypass_en << 1; + isp3_param_write(params_vdev, ctrl, ISP3X_DRC_CTRL0, id); + if (ctrl & BIT(29)) + dev_warn(params_vdev->dev->dev, "drc raw_dly_dis=1\n"); + value = isp3_param_read_cache(params_vdev, ISP3X_HDRMGE_CTRL, id); + if (ctrl & BIT(2) && (value & ISP39_MODULE_EN)) + dev_warn(params_vdev->dev->dev, "drc cmps_byp_en=1 but hdr\n"); if (type == RKISP_PARAMS_IMD) return; @@ -2283,11 +2292,16 @@ isp_hdrdrc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) static void isp_gic_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_gic_cfg *arg, u32 id) + const struct isp39_gic_cfg *arg, u32 id) { u32 value; s32 i; + value = isp3_param_read(params_vdev, ISP3X_GIC_CONTROL, id); + value &= ISP39_MODULE_EN; + value |= arg->bypass_en << 1; + isp3_param_write(params_vdev, value, ISP3X_GIC_CONTROL, id); + value = (arg->regmingradthrdark2 & 0x03FF) << 20 | (arg->regmingradthrdark1 & 0x03FF) << 10 | (arg->regminbusythre & 0x03FF); @@ -2333,8 +2347,11 @@ isp_gic_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 value = 0; + value = isp3_param_read(params_vdev, ISP3X_GIC_CONTROL, id); if (en) value |= ISP39_MODULE_EN; + else + value &= ~ISP39_MODULE_EN; isp3_param_write(params_vdev, value, ISP3X_GIC_CONTROL, id); } @@ -3102,6 +3119,10 @@ isp_bay3d_config(struct rkisp_isp_params_vdev *params_vdev, ctrl |= !!arg->bypass_en << 1 | !!arg->iirsparse_en << 2; isp3_param_write(params_vdev, ctrl, ISP3X_BAY3D_CTRL, id); + value = isp3_param_read_cache(params_vdev, ISP3X_HDRMGE_CTRL, id); + if (arg->transf_bypass_en && (value & ISP39_MODULE_EN)) + dev_err(params_vdev->dev->dev, "bay3d transf_bypass_en=1 but hdr\n"); + value = !!arg->noisebal_mode << 23 | !!arg->curdbg_out_en << 22 | !!arg->lomdwgt_dbg_en << 21 | @@ -3929,11 +3950,15 @@ void __isp_isr_other_en(struct rkisp_isp_params_vdev *params_vdev, struct rkisp_isp_params_val_v39 *priv_val = params_vdev->priv_val; u64 module_en_update = new_params->module_en_update; u64 module_ens = new_params->module_ens; + u64 mask; u32 gain_ctrl, cnr_ctrl, val; if (type == RKISP_PARAMS_SHD) return; + mask = ISP39_MODULE_YNR | ISP39_MODULE_CNR | ISP39_MODULE_SHARP; + if ((module_ens & mask) && ((module_ens & mask) != mask)) + dev_err(params_vdev->dev->dev, "ynr cnr sharp no enable together\n"); v4l2_dbg(4, rkisp_debug, ¶ms_vdev->dev->v4l2_dev, "%s id:%d seq:%d module_en_update:0x%llx module_ens:0x%llx\n", __func__, id, new_params->frame_id, module_en_update, module_ens); diff --git a/drivers/media/platform/rockchip/isp/isp_params_v39.h b/drivers/media/platform/rockchip/isp/isp_params_v39.h index 8506a32d1a63..44f941c07168 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v39.h +++ b/drivers/media/platform/rockchip/isp/isp_params_v39.h @@ -92,7 +92,7 @@ struct rkisp_isp_params_ops_v39 { void (*hdrmge_enable)(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id); void (*gic_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_gic_cfg *arg, u32 id); + const struct isp39_gic_cfg *arg, u32 id); void (*gic_enable)(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id); void (*dhaz_config)(struct rkisp_isp_params_vdev *params_vdev, diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v39.c b/drivers/media/platform/rockchip/isp/isp_stats_v39.c index ef9069aa8d47..55c197f76f8b 100644 --- a/drivers/media/platform/rockchip/isp/isp_stats_v39.c +++ b/drivers/media/platform/rockchip/isp/isp_stats_v39.c @@ -380,7 +380,7 @@ void rkisp_stats_first_ddr_config_v39(struct rkisp_isp_stats_vdev *stats_vdev) struct rkisp_pdaf_vdev *pdaf_vdev = &dev->pdaf_vdev; u32 val, size = 0, div = dev->unite_div; - if (!stats_vdev->streamon || dev->isp_sdev.in_fmt.fmt_type == FMT_YUV) + if (dev->isp_sdev.in_fmt.fmt_type == FMT_YUV) return; rkisp_get_stat_size_v39(stats_vdev, &size); diff --git a/include/uapi/linux/rk-isp39-config.h b/include/uapi/linux/rk-isp39-config.h index 36583ae69b6a..e81cc835537c 100644 --- a/include/uapi/linux/rk-isp39-config.h +++ b/include/uapi/linux/rk-isp39-config.h @@ -177,6 +177,39 @@ #define ISP39_BNR2AEBIG_SEL_EN 0x10 #define ISP39_BNR2AE0_SEL_EN 0x20 +struct isp39_gic_cfg { + /* CONTROL */ + __u8 bypass_en; + /* DIFF_PARA1 */ + __u16 regmingradthrdark2; + __u16 regmingradthrdark1; + __u16 regminbusythre; + /* DIFF_PARA2 */ + __u16 regdarkthre; + __u16 regmaxcorvboth; + __u16 regdarktthrehi; + /* DIFF_PARA3 */ + __u8 regkgrad2dark; + __u8 regkgrad1dark; + __u8 regstrengthglobal_fix; + __u8 regdarkthrestep; + __u8 regkgrad2; + __u8 regkgrad1; + __u8 reggbthre; + /* DIFF_PARA4 */ + __u16 regmaxcorv; + __u16 regmingradthr2; + __u16 regmingradthr1; + /* NOISE_PARA1 */ + __u8 gr_ratio; + __u8 noise_scale; + __u16 noise_base; + /* NOISE_PARA2 */ + __u16 diff_clip; + /* SIGMA */ + __u16 sigma_y[ISP39_GIC_SIGMA_Y_NUM]; +} __attribute__ ((packed)); + struct isp39_dpcc_cfg { /* MODE */ __u8 stage1_enable; @@ -1585,7 +1618,7 @@ struct isp39_isp_other_cfg { struct isp39_dpcc_cfg dpcc_cfg; struct isp3x_lsc_cfg lsc_cfg; struct isp32_awb_gain_cfg awb_gain_cfg; - struct isp21_gic_cfg gic_cfg; + struct isp39_gic_cfg gic_cfg; struct isp39_debayer_cfg debayer_cfg; struct isp39_ccm_cfg ccm_cfg; struct isp3x_gammaout_cfg gammaout_cfg;