mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
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:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user