diff --git a/drivers/media/platform/rockchip/isp/isp_params_v21.c b/drivers/media/platform/rockchip/isp/isp_params_v21.c index 603a3fc83b0a..1a9337c59f25 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v21.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v21.c @@ -3763,68 +3763,32 @@ void rkisp_params_cfgsram_v21(struct rkisp_isp_params_vdev *params_vdev) isp_rawawb_cfg_sram(params_vdev, ¶ms->meas.rawawb, true); } -static int -rkisp_alloc_internal_buf(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_isp_params_cfg *new_params) +static void +rkisp_alloc_bay3d_buf(struct rkisp_isp_params_vdev *params_vdev, + const struct isp21_isp_params_cfg *new_params) { struct rkisp_device *ispdev = params_vdev->dev; struct rkisp_isp_subdev *isp_sdev = &ispdev->isp_sdev; struct rkisp_isp_params_val_v21 *priv_val; u64 module_en_update, module_ens; u32 w, h, size; - int ret, i; + int ret; - priv_val = (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; module_en_update = new_params->module_en_update; module_ens = new_params->module_ens; - priv_val->buf_3dlut_idx = 0; - for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) { - priv_val->buf_3dlut[i].is_need_vaddr = true; - priv_val->buf_3dlut[i].size = RKISP_PARAM_3DLUT_BUF_SIZE; - ret = rkisp_alloc_buffer(ispdev, &priv_val->buf_3dlut[i]); - if (ret) { - dev_err(ispdev->dev, "can not alloc buffer\n"); - goto err_3dlut; - } - } - - priv_val->buf_lsclut_idx = 0; - for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) { - priv_val->buf_lsclut[i].is_need_vaddr = true; - priv_val->buf_lsclut[i].size = RKISP_PARAM_LSC_LUT_BUF_SIZE; - ret = rkisp_alloc_buffer(ispdev, &priv_val->buf_lsclut[i]); - if (ret) { - dev_err(ispdev->dev, "can not alloc buffer\n"); - goto err_lsclut; - } - } - if ((module_en_update & ISP2X_MODULE_BAY3D) && (module_ens & ISP2X_MODULE_BAY3D)) { w = isp_sdev->in_crop.width; h = isp_sdev->in_crop.height; size = 2 * ALIGN((ALIGN(w, 16) + (w + 15) / 8) * h, 16); + priv_val = (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr); priv_val->buf_3dnr.size = size; ret = rkisp_alloc_buffer(ispdev, &priv_val->buf_3dnr); - if (ret) { + if (ret) dev_err(ispdev->dev, "can not alloc bay3d buffer\n"); - goto err_bay3d; - } } - - return 0; -err_bay3d: - rkisp_free_buffer(ispdev, &priv_val->buf_3dnr); - i = RKISP_PARAM_LSC_LUT_BUF_NUM; -err_lsclut: - for (i -= 1; i >= 0; i--) - rkisp_free_buffer(ispdev, &priv_val->buf_lsclut[i]); - i = RKISP_PARAM_3DLUT_BUF_NUM; -err_3dlut: - for (i -= 1; i >= 0; i--) - rkisp_free_buffer(ispdev, &priv_val->buf_3dlut[i]); - return ret; } static bool @@ -3869,7 +3833,7 @@ rkisp_params_first_cfg_v2x(struct rkisp_isp_params_vdev *params_vdev) struct rkisp_isp_params_val_v21 *priv_val = (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; - rkisp_alloc_internal_buf(params_vdev, params_vdev->isp21_params); + rkisp_alloc_bay3d_buf(params_vdev, params_vdev->isp21_params); dev->is_bigmode = rkisp_params_check_bigmode_v21(params_vdev); spin_lock(¶ms_vdev->config_lock); /* override the default things */ @@ -4017,16 +3981,9 @@ rkisp_params_stream_stop_v2x(struct rkisp_isp_params_vdev *params_vdev) { struct rkisp_device *ispdev = params_vdev->dev; struct rkisp_isp_params_val_v21 *priv_val; - int i; priv_val = (struct rkisp_isp_params_val_v21 *)params_vdev->priv_val; rkisp_free_buffer(ispdev, &priv_val->buf_3dnr); - for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) - rkisp_free_buffer(ispdev, &priv_val->buf_3dlut[i]); - for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) - rkisp_free_buffer(ispdev, &priv_val->buf_lsclut[i]); - for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++) - rkisp_free_buffer(ispdev, &ispdev->stats_vdev.stats_buf[i]); } static void @@ -4232,7 +4189,9 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = { int rkisp_init_params_vdev_v21(struct rkisp_isp_params_vdev *params_vdev) { + struct device *dev = params_vdev->dev->dev; struct rkisp_isp_params_val_v21 *priv_val; + int i, ret; priv_val = kzalloc(sizeof(*priv_val), GFP_KERNEL); if (!priv_val) @@ -4244,18 +4203,62 @@ int rkisp_init_params_vdev_v21(struct rkisp_isp_params_vdev *params_vdev) return -ENOMEM; } + priv_val->buf_3dlut_idx = 0; + for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) { + priv_val->buf_3dlut[i].is_need_vaddr = true; + priv_val->buf_3dlut[i].size = RKISP_PARAM_3DLUT_BUF_SIZE; + ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); + if (ret) { + dev_err(dev, "can not alloc buffer\n"); + goto err; + } + } + + priv_val->buf_lsclut_idx = 0; + for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) { + priv_val->buf_lsclut[i].is_need_vaddr = true; + priv_val->buf_lsclut[i].size = RKISP_PARAM_LSC_LUT_BUF_SIZE; + ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); + if (ret) { + dev_err(dev, "can not alloc buffer\n"); + goto err; + } + } + params_vdev->priv_val = (void *)priv_val; params_vdev->ops = &rkisp_isp_params_ops_tbl; params_vdev->priv_ops = &rkisp_v21_isp_params_ops; rkisp_clear_first_param_v2x(params_vdev); return 0; + +err: + for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) + rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); + + for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) + rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); + vfree(params_vdev->isp21_params); + + return ret; } void rkisp_uninit_params_vdev_v21(struct rkisp_isp_params_vdev *params_vdev) { - if (params_vdev->isp21_params) - vfree(params_vdev->isp21_params); - kfree(params_vdev->priv_val); + struct rkisp_isp_params_val_v21 *priv_val; + int i; + + priv_val = params_vdev->priv_val; + if (!priv_val) + return; + + rkisp_deinit_ldch_buf(params_vdev); + for (i = 0; i < RKISP_PARAM_3DLUT_BUF_NUM; i++) + rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); + + for (i = 0; i < RKISP_PARAM_LSC_LUT_BUF_NUM; i++) + rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); + vfree(params_vdev->isp21_params); + kfree(priv_val); params_vdev->priv_val = NULL; } diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v21.c b/drivers/media/platform/rockchip/isp/isp_stats_v21.c index a456c3be9ee4..065d2dbd08ab 100644 --- a/drivers/media/platform/rockchip/isp/isp_stats_v21.c +++ b/drivers/media/platform/rockchip/isp/isp_stats_v21.c @@ -1126,19 +1126,11 @@ static struct rkisp_isp_stats_ops rkisp_isp_stats_ops_tbl = { void rkisp_stats_first_ddr_config_v21(struct rkisp_isp_stats_vdev *stats_vdev) { - int i; - stats_vdev->rd_stats_from_ddr = false; stats_vdev->priv_ops = &rkisp_stats_reg_ops_v21; - if (!IS_HDR_RDBK(stats_vdev->dev->hdr.op_mode)) { - for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++) { - stats_vdev->stats_buf[i].is_need_vaddr = true; - stats_vdev->stats_buf[i].size = RKISP_RD_STATS_BUF_SIZE; - if (rkisp_alloc_buffer(stats_vdev->dev, &stats_vdev->stats_buf[i])) - goto err; - } - + if (!IS_HDR_RDBK(stats_vdev->dev->hdr.op_mode) && + stats_vdev->stats_buf[0].mem_priv) { stats_vdev->priv_ops = &rkisp_stats_ddr_ops_v21; stats_vdev->rd_stats_from_ddr = true; stats_vdev->rd_buf_idx = 0; @@ -1151,15 +1143,12 @@ void rkisp_stats_first_ddr_config_v21(struct rkisp_isp_stats_vdev *stats_vdev) rkisp_set_bits(stats_vdev->dev, CTRL_SWS_CFG, SW_3A_DDR_WRITE_EN, SW_3A_DDR_WRITE_EN, false); } - return; -err: - for (i -= 1; i >= 0; i--) - rkisp_free_buffer(stats_vdev->dev, &stats_vdev->stats_buf[i]); - dev_err(stats_vdev->dev->dev, "alloc stats ddr buf fail\n"); } void rkisp_init_stats_vdev_v21(struct rkisp_isp_stats_vdev *stats_vdev) { + int i; + stats_vdev->vdev_fmt.fmt.meta.dataformat = V4L2_META_FMT_RK_ISP1_STAT_3A; stats_vdev->vdev_fmt.fmt.meta.buffersize = @@ -1168,10 +1157,19 @@ void rkisp_init_stats_vdev_v21(struct rkisp_isp_stats_vdev *stats_vdev) stats_vdev->ops = &rkisp_isp_stats_ops_tbl; stats_vdev->priv_ops = &rkisp_stats_reg_ops_v21; stats_vdev->rd_stats_from_ddr = false; + + for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++) { + stats_vdev->stats_buf[i].is_need_vaddr = true; + stats_vdev->stats_buf[i].size = RKISP_RD_STATS_BUF_SIZE; + rkisp_alloc_buffer(stats_vdev->dev, &stats_vdev->stats_buf[i]); + } } void rkisp_uninit_stats_vdev_v21(struct rkisp_isp_stats_vdev *stats_vdev) { + int i; + for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++) + rkisp_free_buffer(stats_vdev->dev, &stats_vdev->stats_buf[i]); }