media: rockchip: isp: merge dual dhaz config chang to user for unite mode

Change-Id: If90e930f55e7dc3fccd06f4e37609a7ef0dfcdf4
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2022-12-02 10:50:30 +08:00
committed by Tao Huang
parent 05374081e5
commit 78b5218880
2 changed files with 7 additions and 84 deletions

View File

@@ -2802,8 +2802,7 @@ isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev,
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 || !(ctrl & ISP3X_DHAZ_ENMUX))) {
if (arg->soft_wr_en) {
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);
@@ -2817,7 +2816,6 @@ isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev,
value = arg->hist_wr[i * 3] & 0x3ff;
isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4, id);
}
isp3_param_write(params_vdev, ctrl, ISP3X_DHAZ_CTRL, id);
value = ISP_PACK_4BYTE(arg->dc_min_th, arg->dc_max_th,
arg->yhist_th, arg->yblk_th);
@@ -2896,6 +2894,12 @@ isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev,
}
value = ISP_PACK_2SHORT(arg->sigma_lut[i * 2], 0);
isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4, id);
if (dev->hw_dev->is_unite &&
dev->hw_dev->is_single &&
ctrl & ISP3X_DHAZ_ENMUX)
ctrl |= ISP3X_SELF_FORCE_UPD;
isp3_param_write(params_vdev, ctrl, ISP3X_DHAZ_CTRL, id);
}
static void

View File

@@ -53,15 +53,6 @@ static u32 isp3_stats_read(struct rkisp_isp_stats_vdev *stats_vdev,
return val;
}
static void isp3_stats_write(struct rkisp_isp_stats_vdev *stats_vdev,
u32 addr, u32 value, u32 id)
{
if (id == ISP3_LEFT)
rkisp_write(stats_vdev->dev, addr, value, false);
else
rkisp_next_write(stats_vdev->dev, addr, value, false);
}
static int
rkisp_stats_get_rawawb_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
struct rkisp3x_isp_stat_buffer *pbuf, u32 id)
@@ -970,75 +961,6 @@ static struct rkisp_stats_ops_v3x __maybe_unused stats_ddr_ops_v3x = {
.get_dhaz_stats = rkisp_stats_get_dhaz_stats,
};
static void
rkisp_merge_dual_dhaz_params(struct rkisp_isp_stats_vdev *stats_vdev,
struct rkisp3x_isp_stat_buffer *left_stat,
struct rkisp3x_isp_stat_buffer *right_stat)
{
struct rkisp_device *dev = stats_vdev->dev;
struct isp3x_dhaz_cfg *dhaz_cfg;
struct isp3x_dhaz_stat *l_dhaz;
struct isp3x_dhaz_stat *r_dhaz;
u32 i, val, hist_out0, hist_out1, hist_out2, pic_sumh;
u32 num = isp3_stats_read(stats_vdev, ISP3X_DHAZ_IIR0, 0) & 0x1f;
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)))
return;
dhaz_cfg = &dev->params_vdev.isp3x_params->others.dhaz_cfg;
l_dhaz = &left_stat->params.dhaz;
r_dhaz = &right_stat->params.dhaz;
if (!num || (!l_dhaz->dhaz_pic_sumh && !r_dhaz->dhaz_pic_sumh)) {
v4l2_err(stats_vdev->vnode.vdev.v4l2_dev,
"%s 0 params, num:%d sumh:%d %d\n", __func__,
num, l_dhaz->dhaz_pic_sumh, r_dhaz->dhaz_pic_sumh);
return;
}
val = ISP_PACK_2SHORT((l_dhaz->dhaz_adp_wt + r_dhaz->dhaz_adp_wt) / 2,
(l_dhaz->dhaz_adp_air_base + r_dhaz->dhaz_adp_air_base) / 2);
isp3_stats_write(stats_vdev, ISP3X_DHAZ_ADT_WR0, val, 0);
isp3_stats_write(stats_vdev, ISP3X_DHAZ_ADT_WR0, val, 1);
val = ISP_PACK_2SHORT((l_dhaz->dhaz_adp_tmax + r_dhaz->dhaz_adp_tmax) / 2,
(l_dhaz->dhaz_adp_gratio + r_dhaz->dhaz_adp_gratio) / 2);
isp3_stats_write(stats_vdev, ISP3X_DHAZ_ADT_WR1, val, 0);
isp3_stats_write(stats_vdev, ISP3X_DHAZ_ADT_WR1, val, 1);
num = min_t(u32, num, left_stat->frame_id + 1);
pic_sumh = l_dhaz->dhaz_pic_sumh + r_dhaz->dhaz_pic_sumh;
for (i = 0; i < ISP3X_DHAZ_HIST_WR_NUM / 3; i++) {
hist_out0 = (l_dhaz->h_rgb_iir[i * 3] * l_dhaz->dhaz_pic_sumh +
r_dhaz->h_rgb_iir[i * 3] * r_dhaz->dhaz_pic_sumh) / pic_sumh;
hist_out0 = (dhaz_cfg->hist_wr[i * 3] * (num - 1) + hist_out0) / num;
dhaz_cfg->hist_wr[i * 3] = hist_out0;
hist_out1 = (l_dhaz->h_rgb_iir[i * 3 + 1] * l_dhaz->dhaz_pic_sumh +
r_dhaz->h_rgb_iir[i * 3 + 1] * r_dhaz->dhaz_pic_sumh) / pic_sumh;
hist_out1 = (dhaz_cfg->hist_wr[i * 3 + 1] * (num - 1) + hist_out1) / num;
dhaz_cfg->hist_wr[i * 3 + 1] = hist_out1;
hist_out2 = (l_dhaz->h_rgb_iir[i * 3 + 2] * l_dhaz->dhaz_pic_sumh +
r_dhaz->h_rgb_iir[i * 3 + 2] * r_dhaz->dhaz_pic_sumh) / pic_sumh;
hist_out2 = (dhaz_cfg->hist_wr[i * 3 + 2] * (num - 1) + hist_out2) / num;
dhaz_cfg->hist_wr[i * 3 + 2] = hist_out2;
val = hist_out0 | hist_out1 << 10 | hist_out2 << 20;
isp3_stats_write(stats_vdev, ISP3X_DHAZ_HIST_WR0 + i * 4, val, 0);
isp3_stats_write(stats_vdev, ISP3X_DHAZ_HIST_WR0 + i * 4, val, 1);
}
val = (l_dhaz->h_rgb_iir[i * 3] * l_dhaz->dhaz_pic_sumh +
r_dhaz->h_rgb_iir[i * 3] * r_dhaz->dhaz_pic_sumh) / pic_sumh;
val = (dhaz_cfg->hist_wr[i * 3] * (num - 1) + val) / num;
dhaz_cfg->hist_wr[i * 3] = val;
isp3_stats_write(stats_vdev, ISP3X_DHAZ_HIST_WR0 + i * 4, val, 0);
isp3_stats_write(stats_vdev, ISP3X_DHAZ_HIST_WR0 + i * 4, val, 1);
}
static void
rkisp_stats_send_meas_v3x(struct rkisp_isp_stats_vdev *stats_vdev,
struct rkisp_isp_readout_work *meas_work)
@@ -1117,8 +1039,6 @@ rkisp_stats_send_meas_v3x(struct rkisp_isp_stats_vdev *stats_vdev,
}
if (stats_vdev->dev->hw_dev->is_unite) {
struct rkisp3x_isp_stat_buffer *left_stat = cur_stat_buf;
size *= 2;
if (cur_buf) {
cur_stat_buf++;
@@ -1148,7 +1068,6 @@ rkisp_stats_send_meas_v3x(struct rkisp_isp_stats_vdev *stats_vdev,
ret |= ops->get_bls_stats(stats_vdev, cur_stat_buf, 1);
ret |= ops->get_dhaz_stats(stats_vdev, cur_stat_buf, 1);
}
rkisp_merge_dual_dhaz_params(stats_vdev, left_stat, cur_stat_buf);
}
if (cur_buf && !ret) {