media: rockchip: isp: update gic and check params for isp39

Change-Id: I623d2f9474d744d576f919547778962891b08fa4
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei 2024-04-15 15:06:24 +08:00 committed by Tao Huang
commit d0797df513
4 changed files with 68 additions and 10 deletions

View file

@ -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, &params_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);

View file

@ -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,

View file

@ -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);

View file

@ -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;