From f2ea0aef2c47af25b46b632ef61fd98fe919781c Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Sun, 14 Nov 2021 16:46:13 +0800 Subject: [PATCH] media: rockchip: isp: fix dhaz config with dual unite isp Change-Id: I6c566165a92dea1c3cbc40f039110ea93794c47e Signed-off-by: Cai YiWei --- .../media/platform/rockchip/isp/isp_params_v3x.c | 14 ++++++++++---- .../media/platform/rockchip/isp/isp_stats_v3x.c | 3 +-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/isp_params_v3x.c b/drivers/media/platform/rockchip/isp/isp_params_v3x.c index 92972148456d..f7159d95152d 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v3x.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v3x.c @@ -2702,6 +2702,7 @@ static void isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev, const struct isp3x_dhaz_cfg *arg, u32 id) { + struct rkisp_device *dev = params_vdev->dev; u32 i, value, ctrl; ctrl = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL, id); @@ -2713,9 +2714,12 @@ isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev, (arg->hist_en & 0x1) << 8 | (arg->dc_en & 0x1) << 4 | (arg->round_en & 0x1) << 26; - if (arg->soft_wr_en) { + if (arg->soft_wr_en) ctrl |= (arg->soft_wr_en & 0x1) << 25; - + /* merge dual unite isp params at frame end */ + if (arg->soft_wr_en && + (!dev->hw_dev->is_unite || + (dev->hw_dev->is_unite && !(ctrl & ISP3X_DHAZ_ENMUX)))) { value = ISP_PACK_2SHORT(arg->adp_wt_wr, arg->adp_air_wr); isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADT_WR0, id); value = ISP_PACK_2SHORT(arg->adp_tmax_wr, arg->adp_gratio_wr); @@ -4075,8 +4079,10 @@ static void rkisp_save_first_param_v3x(struct rkisp_isp_params_vdev *params_vdev static void rkisp_clear_first_param_v3x(struct rkisp_isp_params_vdev *params_vdev) { - params_vdev->isp3x_params->module_cfg_update = 0; - params_vdev->isp3x_params->module_en_update = 0; + u32 mult = params_vdev->dev->hw_dev->is_unite ? ISP3_UNITE_MAX : 1; + u32 size = sizeof(struct isp3x_isp_params_cfg) * mult; + + memset(params_vdev->isp3x_params, 0, size); } static void rkisp_deinit_mesh_buf(struct rkisp_isp_params_vdev *params_vdev, diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v3x.c b/drivers/media/platform/rockchip/isp/isp_stats_v3x.c index 19fa92d05ccc..0c8fa91fe5bc 100644 --- a/drivers/media/platform/rockchip/isp/isp_stats_v3x.c +++ b/drivers/media/platform/rockchip/isp/isp_stats_v3x.c @@ -971,8 +971,7 @@ rkisp_merge_dual_dhaz_params(struct rkisp_isp_stats_vdev *stats_vdev, if (!left_stat || !right_stat || !(left_stat->meas_type & ISP3X_STAT_DHAZ) || !(right_stat->meas_type & ISP3X_STAT_DHAZ) || - !(isp3_stats_read(stats_vdev, ISP3X_DHAZ_CTRL, 0) & BIT(25)) || - !(isp3_stats_read(stats_vdev, ISP3X_DHAZ_CTRL, 0) & BIT(4))) + !(isp3_stats_read(stats_vdev, ISP3X_DHAZ_CTRL, 0) & BIT(25))) return; dhaz_cfg = &dev->params_vdev.isp3x_params->others.dhaz_cfg;