diff --git a/drivers/media/platform/rockchip/isp/isp_params_v21.c b/drivers/media/platform/rockchip/isp/isp_params_v21.c index f2b8b9cd82fa..f7bd1f4b4aa2 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v21.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v21.c @@ -1312,11 +1312,33 @@ isp_rawae3_enable(struct rkisp_isp_params_vdev *params_vdev, isp_rawaebig_enable(params_vdev, en, 0); } +static void +isp_rawawb_cfg_sram(struct rkisp_isp_params_vdev *params_vdev, + const struct isp21_rawawb_meas_cfg *arg, bool is_check) +{ + u32 i, val = ISP2X_RAWAWB_ENA; + + if (is_check && + !(rkisp_ioread32(params_vdev, ISP21_RAWAWB_CTRL) & val)) + return; + + for (i = 0; i < ISP21_RAWAWB_WEIGHT_NUM / 5; i++) { + val = (arg->sw_rawawb_wp_blk_wei_w[5 * i] & 0x3f) << 0 | + (arg->sw_rawawb_wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 | + (arg->sw_rawawb_wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 | + (arg->sw_rawawb_wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 | + (arg->sw_rawawb_wp_blk_wei_w[5 * i + 4] & 0x3f) << 24, + rkisp_iowrite32(params_vdev, val, ISP21_RAWAWB_WRAM_DATA_BASE); + } +} + static void isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev, const struct isp21_rawawb_meas_cfg *arg) { - u32 i, value; + struct isp21_isp_params_cfg *params_rec = params_vdev->isp21_params; + struct isp21_rawawb_meas_cfg *arg_rec = ¶ms_rec->meas.rawawb; + u32 value; rkisp_iowrite32(params_vdev, (arg->sw_rawawb_blk_measure_enable & 0x1) | @@ -2119,15 +2141,12 @@ isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev, arg->sw_rawawb_exc_wp_region6_yv1), ISP21_RAWAWB_EXC_WP_REGION6_YV); - for (i = 0; i < ISP21_RAWAWB_WEIGHT_NUM / 5; i++) { - rkisp_iowrite32(params_vdev, - (arg->sw_rawawb_wp_blk_wei_w[5 * i] & 0x3f) << 0 | - (arg->sw_rawawb_wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 | - (arg->sw_rawawb_wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 | - (arg->sw_rawawb_wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 | - (arg->sw_rawawb_wp_blk_wei_w[5 * i + 4] & 0x3f) << 24, - ISP21_RAWAWB_WRAM_DATA_BASE); - } + if (params_vdev->dev->hw_dev->is_single) + isp_rawawb_cfg_sram(params_vdev, arg, false); + else + memcpy(arg_rec->sw_rawawb_wp_blk_wei_w, + arg->sw_rawawb_wp_blk_wei_w, + ISP21_RAWAWB_WEIGHT_NUM); /* avoid to override the old enable value */ value = rkisp_ioread32(params_vdev, ISP21_RAWAWB_CTRL); @@ -3723,6 +3742,7 @@ void rkisp_params_cfgsram_v21(struct rkisp_isp_params_vdev *params_vdev) isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist1, 1, true); isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist2, 2, true); isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist3, 0, true); + isp_rawawb_cfg_sram(params_vdev, ¶ms->meas.rawawb, true); } static int diff --git a/drivers/media/platform/rockchip/isp/isp_params_v3x.c b/drivers/media/platform/rockchip/isp/isp_params_v3x.c index 4effa82cce3b..0432e35efdb3 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v3x.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v3x.c @@ -1419,11 +1419,35 @@ isp_rawae3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) isp_rawaebig_enable(params_vdev, en, 0, id); } +static void +isp_rawawb_cfg_sram(struct rkisp_isp_params_vdev *params_vdev, + const struct isp3x_rawawb_meas_cfg *arg, + bool is_check, u32 id) +{ + u32 i, val = ISP3X_MODULE_EN; + + if (is_check && + !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id) & val)) + return; + + for (i = 0; i < ISP3X_RAWAWB_WEIGHT_NUM / 5; i++) { + isp3_param_write(params_vdev, + (arg->sw_rawawb_wp_blk_wei_w[5 * i] & 0x3f) << 0 | + (arg->sw_rawawb_wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 | + (arg->sw_rawawb_wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 | + (arg->sw_rawawb_wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 | + (arg->sw_rawawb_wp_blk_wei_w[5 * i + 4] & 0x3f) << 24, + ISP3X_RAWAWB_WRAM_DATA_BASE, id); + } +} + static void isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev, const struct isp3x_rawawb_meas_cfg *arg, u32 id) { - u32 i, value; + struct isp3x_isp_params_cfg *params_rec = params_vdev->isp3x_params + id; + struct isp3x_rawawb_meas_cfg *arg_rec = ¶ms_rec->meas.rawawb; + u32 value; isp3_param_write(params_vdev, (arg->sw_rawawb_blk_measure_enable & 0x1) | @@ -2263,15 +2287,12 @@ isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev, arg->sw_rawawb_exc_wp_region6_yv1), ISP3X_RAWAWB_EXC_WP_REGION6_YV, id); - for (i = 0; i < ISP3X_RAWAWB_WEIGHT_NUM / 5; i++) { - isp3_param_write(params_vdev, - (arg->sw_rawawb_wp_blk_wei_w[5 * i] & 0x3f) << 0 | - (arg->sw_rawawb_wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 | - (arg->sw_rawawb_wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 | - (arg->sw_rawawb_wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 | - (arg->sw_rawawb_wp_blk_wei_w[5 * i + 4] & 0x3f) << 24, - ISP3X_RAWAWB_WRAM_DATA_BASE, id); - } + if (params_vdev->dev->hw_dev->is_single) + isp_rawawb_cfg_sram(params_vdev, arg, false, id); + else + memcpy(arg_rec->sw_rawawb_wp_blk_wei_w, + arg->sw_rawawb_wp_blk_wei_w, + ISP3X_RAWAWB_WEIGHT_NUM); /* avoid to override the old enable value */ value = isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id); @@ -4049,12 +4070,14 @@ void rkisp_params_cfgsram_v3x(struct rkisp_isp_params_vdev *params_vdev) isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist1, 1, true, 0); isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist2, 2, true, 0); isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist3, 0, true, 0); + isp_rawawb_cfg_sram(params_vdev, ¶ms->meas.rawawb, true, 0); if (params_vdev->dev->hw_dev->is_unite) { params++; isp_lsc_matrix_cfg_sram(params_vdev, ¶ms->others.lsc_cfg, true, 1); isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist1, 1, true, 1); isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist2, 2, true, 1); isp_rawhstbig_cfg_sram(params_vdev, ¶ms->meas.rawhist3, 0, true, 1); + isp_rawawb_cfg_sram(params_vdev, ¶ms->meas.rawawb, true, 1); } }