From e8b2b58cee3fdde32e26f272947b2e4080c4248d Mon Sep 17 00:00:00 2001 From: Cai YiWei Date: Mon, 6 Sep 2021 16:17:53 +0800 Subject: [PATCH] media: rockchip: isp: params and stats for dual isp unite Change-Id: I8d950102877ea37423baced71b1fec50aa9a92f6 Signed-off-by: Cai YiWei --- .../platform/rockchip/isp/isp_params_v3x.c | 3709 +++++++++-------- .../platform/rockchip/isp/isp_params_v3x.h | 158 +- .../platform/rockchip/isp/isp_stats_v3x.c | 748 ++-- .../platform/rockchip/isp/isp_stats_v3x.h | 24 +- drivers/media/platform/rockchip/isp/procfs.c | 250 +- include/uapi/linux/rkisp2-config.h | 2 + include/uapi/linux/rkisp3-config.h | 10 +- 7 files changed, 2689 insertions(+), 2212 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/isp_params_v3x.c b/drivers/media/platform/rockchip/isp/isp_params_v3x.c index 71dd3779e5f2..93ff468fde07 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v3x.c +++ b/drivers/media/platform/rockchip/isp/isp_params_v3x.c @@ -15,6 +15,49 @@ #define ISP3X_NOBIG_OVERFLOW_SIZE (2688 * 1536) #define ISP3X_AUTO_BIGMODE_WIDTH 2688 +static inline void +isp3_param_write(struct rkisp_isp_params_vdev *params_vdev, + u32 value, u32 addr, u32 id) +{ + if (id == ISP3_LEFT) + rkisp_write(params_vdev->dev, addr, value, false); + else + rkisp_next_write(params_vdev->dev, addr, value, false); +} + +static inline u32 +isp3_param_read(struct rkisp_isp_params_vdev *params_vdev, + u32 addr, u32 id) +{ + u32 val; + + if (id == ISP3_LEFT) + val = rkisp_read(params_vdev->dev, addr, false); + else + val = rkisp_next_read(params_vdev->dev, addr, false); + return val; +} + +static inline void +isp3_param_set_bits(struct rkisp_isp_params_vdev *params_vdev, + u32 reg, u32 bit_mask, u32 id) +{ + if (id == ISP3_LEFT) + rkisp_set_bits(params_vdev->dev, reg, 0, bit_mask, false); + else + rkisp_next_set_bits(params_vdev->dev, reg, 0, bit_mask, false); +} + +static inline void +isp3_param_clear_bits(struct rkisp_isp_params_vdev *params_vdev, + u32 reg, u32 bit_mask, u32 id) +{ + if (id == ISP3_LEFT) + rkisp_clear_bits(params_vdev->dev, reg, bit_mask, false); + else + rkisp_next_clear_bits(params_vdev->dev, reg, bit_mask, false); +} + static inline size_t isp_param_get_insize(struct rkisp_isp_params_vdev *params_vdev) { @@ -26,19 +69,19 @@ isp_param_get_insize(struct rkisp_isp_params_vdev *params_vdev) static void isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_dpcc_cfg *arg) + const struct isp2x_dpcc_cfg *arg, u32 id) { u32 value; int i; - value = rkisp_ioread32(params_vdev, ISP3X_DPCC0_MODE); + value = isp3_param_read(params_vdev, ISP3X_DPCC0_MODE, id); value &= ISP_DPCC_EN; value |= (arg->stage1_enable & 0x01) << 2 | (arg->grayscale_mode & 0x01) << 1; - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_MODE); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_MODE); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_MODE); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_MODE, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_MODE, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_MODE, id); value = (arg->sw_rk_out_sel & 0x03) << 5 | (arg->sw_dpcc_output_sel & 0x01) << 4 | @@ -46,17 +89,17 @@ isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev, (arg->stage1_g_3x3 & 0x01) << 2 | (arg->stage1_incl_rb_center & 0x01) << 1 | (arg->stage1_incl_green_center & 0x01); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_OUTPUT_MODE); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_OUTPUT_MODE); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_OUTPUT_MODE); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_OUTPUT_MODE, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_OUTPUT_MODE, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_OUTPUT_MODE, id); value = (arg->stage1_use_fix_set & 0x01) << 3 | (arg->stage1_use_set_3 & 0x01) << 2 | (arg->stage1_use_set_2 & 0x01) << 1 | (arg->stage1_use_set_1 & 0x01); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_SET_USE); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_SET_USE); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_SET_USE); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_SET_USE, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_SET_USE, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_SET_USE, id); value = (arg->sw_rk_red_blue1_en & 0x01) << 13 | (arg->rg_red_blue1_enable & 0x01) << 12 | @@ -70,9 +113,9 @@ isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev, (arg->ro_green1_enable & 0x01) << 2 | (arg->lc_green1_enable & 0x01) << 1 | (arg->pg_green1_enable & 0x01); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_METHODS_SET_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_METHODS_SET_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_METHODS_SET_1); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_METHODS_SET_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_METHODS_SET_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_METHODS_SET_1, id); value = (arg->sw_rk_red_blue2_en & 0x01) << 13 | (arg->rg_red_blue2_enable & 0x01) << 12 | @@ -86,9 +129,9 @@ isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev, (arg->ro_green2_enable & 0x01) << 2 | (arg->lc_green2_enable & 0x01) << 1 | (arg->pg_green2_enable & 0x01); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_METHODS_SET_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_METHODS_SET_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_METHODS_SET_2); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_METHODS_SET_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_METHODS_SET_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_METHODS_SET_2, id); value = (arg->sw_rk_red_blue3_en & 0x01) << 13 | (arg->rg_red_blue3_enable & 0x01) << 12 | @@ -102,89 +145,89 @@ isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev, (arg->ro_green3_enable & 0x01) << 2 | (arg->lc_green3_enable & 0x01) << 1 | (arg->pg_green3_enable & 0x01); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_METHODS_SET_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_METHODS_SET_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_METHODS_SET_3); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_METHODS_SET_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_METHODS_SET_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_METHODS_SET_3, id); value = ISP_PACK_4BYTE(arg->line_thr_1_g, arg->line_thr_1_rb, arg->sw_mindis1_g, arg->sw_mindis1_rb); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_LINE_THRESH_1); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_LINE_THRESH_1, id); value = ISP_PACK_4BYTE(arg->line_mad_fac_1_g, arg->line_mad_fac_1_rb, arg->sw_dis_scale_max1, arg->sw_dis_scale_min1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_LINE_MAD_FAC_1); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_LINE_MAD_FAC_1, id); value = ISP_PACK_4BYTE(arg->pg_fac_1_g, arg->pg_fac_1_rb, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_PG_FAC_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_PG_FAC_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_PG_FAC_1); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_PG_FAC_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_PG_FAC_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_PG_FAC_1, id); value = ISP_PACK_4BYTE(arg->rnd_thr_1_g, arg->rnd_thr_1_rb, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_RND_THRESH_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_RND_THRESH_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_RND_THRESH_1); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_THRESH_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_THRESH_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_RND_THRESH_1, id); value = ISP_PACK_4BYTE(arg->rg_fac_1_g, arg->rg_fac_1_rb, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_RG_FAC_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_RG_FAC_1); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_RG_FAC_1); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_RG_FAC_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_RG_FAC_1, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_RG_FAC_1, id); value = ISP_PACK_4BYTE(arg->line_thr_2_g, arg->line_thr_2_rb, arg->sw_mindis2_g, arg->sw_mindis2_rb); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_2); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_2, id); value = ISP_PACK_4BYTE(arg->line_mad_fac_2_g, arg->line_mad_fac_2_rb, arg->sw_dis_scale_max2, arg->sw_dis_scale_min2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_LINE_MAD_FAC_2); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_LINE_MAD_FAC_2, id); value = ISP_PACK_4BYTE(arg->pg_fac_2_g, arg->pg_fac_2_rb, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_PG_FAC_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_PG_FAC_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_PG_FAC_2); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_PG_FAC_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_PG_FAC_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_PG_FAC_2, id); value = ISP_PACK_4BYTE(arg->rnd_thr_2_g, arg->rnd_thr_2_rb, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_RND_THRESH_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_RND_THRESH_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_RND_THRESH_2); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_THRESH_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_THRESH_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_RND_THRESH_2, id); value = ISP_PACK_4BYTE(arg->rg_fac_2_g, arg->rg_fac_2_rb, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_RG_FAC_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_RG_FAC_2); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_RG_FAC_2); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_RG_FAC_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_RG_FAC_2, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_RG_FAC_2, id); value = ISP_PACK_4BYTE(arg->line_thr_3_g, arg->line_thr_3_rb, arg->sw_mindis3_g, arg->sw_mindis3_rb); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_LINE_THRESH_3); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_LINE_THRESH_3, id); value = ISP_PACK_4BYTE(arg->line_mad_fac_3_g, arg->line_mad_fac_3_rb, arg->sw_dis_scale_max3, arg->sw_dis_scale_min3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_LINE_MAD_FAC_3); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_LINE_MAD_FAC_3, id); value = ISP_PACK_4BYTE(arg->pg_fac_3_g, arg->pg_fac_3_rb, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_PG_FAC_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_PG_FAC_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_PG_FAC_3); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_PG_FAC_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_PG_FAC_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_PG_FAC_3, id); value = ISP_PACK_4BYTE(arg->rnd_thr_3_g, arg->rnd_thr_3_rb, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_RND_THRESH_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_RND_THRESH_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_RND_THRESH_3); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_THRESH_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_THRESH_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_RND_THRESH_3, id); value = ISP_PACK_4BYTE(arg->rg_fac_3_g, arg->rg_fac_3_rb, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_RG_FAC_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_RG_FAC_3); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_RG_FAC_3); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_RG_FAC_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_RG_FAC_3, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_RG_FAC_3, id); value = (arg->ro_lim_3_rb & 0x03) << 10 | (arg->ro_lim_3_g & 0x03) << 8 | @@ -192,9 +235,9 @@ isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev, (arg->ro_lim_2_g & 0x03) << 4 | (arg->ro_lim_1_rb & 0x03) << 2 | (arg->ro_lim_1_g & 0x03); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_RO_LIMITS); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_RO_LIMITS); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_RO_LIMITS); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_RO_LIMITS, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_RO_LIMITS, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_RO_LIMITS, id); value = (arg->rnd_offs_3_rb & 0x03) << 10 | (arg->rnd_offs_3_g & 0x03) << 8 | @@ -202,9 +245,9 @@ isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev, (arg->rnd_offs_2_g & 0x03) << 4 | (arg->rnd_offs_1_rb & 0x03) << 2 | (arg->rnd_offs_1_g & 0x03); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_RND_OFFS); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_RND_OFFS); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_RND_OFFS); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_OFFS, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_OFFS, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_RND_OFFS, id); value = (arg->bpt_rb_3x3 & 0x01) << 11 | (arg->bpt_g_3x3 & 0x01) << 10 | @@ -216,88 +259,88 @@ isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev, (arg->bpt_use_set_1 & 0x01) << 4 | (arg->bpt_cor_en & 0x01) << 1 | (arg->bpt_det_en & 0x01); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_BPT_CTRL); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_BPT_CTRL); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_BPT_CTRL); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_BPT_CTRL, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_BPT_CTRL, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_BPT_CTRL, id); - rkisp_iowrite32(params_vdev, arg->bp_number, ISP3X_DPCC0_BPT_NUMBER); - rkisp_iowrite32(params_vdev, arg->bp_number, ISP3X_DPCC1_BPT_NUMBER); - rkisp_iowrite32(params_vdev, arg->bp_number, ISP3X_DPCC2_BPT_NUMBER); - rkisp_iowrite32(params_vdev, arg->bp_table_addr, ISP3X_DPCC0_BPT_ADDR); - rkisp_iowrite32(params_vdev, arg->bp_table_addr, ISP3X_DPCC1_BPT_ADDR); - rkisp_iowrite32(params_vdev, arg->bp_table_addr, ISP3X_DPCC2_BPT_ADDR); + isp3_param_write(params_vdev, arg->bp_number, ISP3X_DPCC0_BPT_NUMBER, id); + isp3_param_write(params_vdev, arg->bp_number, ISP3X_DPCC1_BPT_NUMBER, id); + isp3_param_write(params_vdev, arg->bp_number, ISP3X_DPCC2_BPT_NUMBER, id); + isp3_param_write(params_vdev, arg->bp_table_addr, ISP3X_DPCC0_BPT_ADDR, id); + isp3_param_write(params_vdev, arg->bp_table_addr, ISP3X_DPCC1_BPT_ADDR, id); + isp3_param_write(params_vdev, arg->bp_table_addr, ISP3X_DPCC2_BPT_ADDR, id); value = ISP_PACK_2SHORT(arg->bpt_h_addr, arg->bpt_v_addr); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_BPT_DATA); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_BPT_DATA); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_BPT_DATA); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_BPT_DATA, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_BPT_DATA, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_BPT_DATA, id); - rkisp_iowrite32(params_vdev, arg->bp_cnt, ISP3X_DPCC0_BP_CNT); - rkisp_iowrite32(params_vdev, arg->bp_cnt, ISP3X_DPCC1_BP_CNT); - rkisp_iowrite32(params_vdev, arg->bp_cnt, ISP3X_DPCC2_BP_CNT); + isp3_param_write(params_vdev, arg->bp_cnt, ISP3X_DPCC0_BP_CNT, id); + isp3_param_write(params_vdev, arg->bp_cnt, ISP3X_DPCC1_BP_CNT, id); + isp3_param_write(params_vdev, arg->bp_cnt, ISP3X_DPCC2_BP_CNT, id); - rkisp_iowrite32(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC0_PDAF_EN); - rkisp_iowrite32(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC1_PDAF_EN); - rkisp_iowrite32(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC2_PDAF_EN); + isp3_param_write(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC0_PDAF_EN, id); + isp3_param_write(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC1_PDAF_EN, id); + isp3_param_write(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC2_PDAF_EN, id); value = 0; for (i = 0; i < ISP3X_DPCC_PDAF_POINT_NUM; i++) value |= (arg->pdaf_point_en[i] & 0x01) << i; - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_PDAF_POINT_EN); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_PDAF_POINT_EN); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_PDAF_POINT_EN); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_POINT_EN, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_POINT_EN, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_PDAF_POINT_EN, id); value = ISP_PACK_2SHORT(arg->pdaf_offsetx, arg->pdaf_offsety); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_PDAF_OFFSET); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_PDAF_OFFSET); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_PDAF_OFFSET); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_OFFSET, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_OFFSET, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_PDAF_OFFSET, id); value = ISP_PACK_2SHORT(arg->pdaf_wrapx, arg->pdaf_wrapy); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_PDAF_WRAP); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_PDAF_WRAP); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_PDAF_WRAP); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_WRAP, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_WRAP, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_PDAF_WRAP, id); value = ISP_PACK_2SHORT(arg->pdaf_wrapx_num, arg->pdaf_wrapy_num); - rkisp_iowrite32(params_vdev, value, ISP_DPCC0_PDAF_SCOPE); - rkisp_iowrite32(params_vdev, value, ISP_DPCC1_PDAF_SCOPE); - rkisp_iowrite32(params_vdev, value, ISP_DPCC2_PDAF_SCOPE); + isp3_param_write(params_vdev, value, ISP_DPCC0_PDAF_SCOPE, id); + isp3_param_write(params_vdev, value, ISP_DPCC1_PDAF_SCOPE, id); + isp3_param_write(params_vdev, value, ISP_DPCC2_PDAF_SCOPE, id); for (i = 0; i < ISP3X_DPCC_PDAF_POINT_NUM / 2; i++) { value = ISP_PACK_4BYTE(arg->point[2 * i].x, arg->point[2 * i].y, arg->point[2 * i + 1].x, arg->point[2 * i + 1].y); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_PDAF_POINT_0 + 4 * i); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_PDAF_POINT_0 + 4 * i); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_PDAF_POINT_0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_POINT_0 + 4 * i, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_POINT_0 + 4 * i, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_PDAF_POINT_0 + 4 * i, id); } - rkisp_iowrite32(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC0_PDAF_FORWARD_MED); - rkisp_iowrite32(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC1_PDAF_FORWARD_MED); - rkisp_iowrite32(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC2_PDAF_FORWARD_MED); + isp3_param_write(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC0_PDAF_FORWARD_MED, id); + isp3_param_write(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC1_PDAF_FORWARD_MED, id); + isp3_param_write(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC2_PDAF_FORWARD_MED, id); } static void -isp_dpcc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_dpcc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 value; - value = rkisp_ioread32(params_vdev, ISP3X_DPCC0_MODE); + value = isp3_param_read(params_vdev, ISP3X_DPCC0_MODE, id); value &= ~ISP_DPCC_EN; if (en) value |= ISP_DPCC_EN; - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC0_MODE); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC1_MODE); - rkisp_iowrite32(params_vdev, value, ISP3X_DPCC2_MODE); + isp3_param_write(params_vdev, value, ISP3X_DPCC0_MODE, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC1_MODE, id); + isp3_param_write(params_vdev, value, ISP3X_DPCC2_MODE, id); } static void isp_bls_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_bls_cfg *arg) + const struct isp21_bls_cfg *arg, u32 id) { const struct isp2x_bls_fixed_val *pval; u32 new_control, value; - new_control = rkisp_ioread32(params_vdev, ISP3X_BLS_CTRL); + new_control = isp3_param_read(params_vdev, ISP3X_BLS_CTRL, id); new_control &= ISP_BLS_ENA; pval = &arg->bls1_val; @@ -306,29 +349,29 @@ isp_bls_config(struct rkisp_isp_params_vdev *params_vdev, switch (params_vdev->raw_type) { case RAW_BGGR: - rkisp_iowrite32(params_vdev, pval->r, ISP_BLS1_D_FIXED); - rkisp_iowrite32(params_vdev, pval->gr, ISP_BLS1_C_FIXED); - rkisp_iowrite32(params_vdev, pval->gb, ISP_BLS1_B_FIXED); - rkisp_iowrite32(params_vdev, pval->b, ISP_BLS1_A_FIXED); + isp3_param_write(params_vdev, pval->r, ISP_BLS1_D_FIXED, id); + isp3_param_write(params_vdev, pval->gr, ISP_BLS1_C_FIXED, id); + isp3_param_write(params_vdev, pval->gb, ISP_BLS1_B_FIXED, id); + isp3_param_write(params_vdev, pval->b, ISP_BLS1_A_FIXED, id); break; case RAW_GBRG: - rkisp_iowrite32(params_vdev, pval->r, ISP_BLS1_C_FIXED); - rkisp_iowrite32(params_vdev, pval->gr, ISP_BLS1_D_FIXED); - rkisp_iowrite32(params_vdev, pval->gb, ISP_BLS1_A_FIXED); - rkisp_iowrite32(params_vdev, pval->b, ISP_BLS1_B_FIXED); + isp3_param_write(params_vdev, pval->r, ISP_BLS1_C_FIXED, id); + isp3_param_write(params_vdev, pval->gr, ISP_BLS1_D_FIXED, id); + isp3_param_write(params_vdev, pval->gb, ISP_BLS1_A_FIXED, id); + isp3_param_write(params_vdev, pval->b, ISP_BLS1_B_FIXED, id); break; case RAW_GRBG: - rkisp_iowrite32(params_vdev, pval->r, ISP_BLS1_B_FIXED); - rkisp_iowrite32(params_vdev, pval->gr, ISP_BLS1_A_FIXED); - rkisp_iowrite32(params_vdev, pval->gb, ISP_BLS1_D_FIXED); - rkisp_iowrite32(params_vdev, pval->b, ISP_BLS1_C_FIXED); + isp3_param_write(params_vdev, pval->r, ISP_BLS1_B_FIXED, id); + isp3_param_write(params_vdev, pval->gr, ISP_BLS1_A_FIXED, id); + isp3_param_write(params_vdev, pval->gb, ISP_BLS1_D_FIXED, id); + isp3_param_write(params_vdev, pval->b, ISP_BLS1_C_FIXED, id); break; case RAW_RGGB: default: - rkisp_iowrite32(params_vdev, pval->r, ISP_BLS1_A_FIXED); - rkisp_iowrite32(params_vdev, pval->gr, ISP_BLS1_B_FIXED); - rkisp_iowrite32(params_vdev, pval->gb, ISP_BLS1_C_FIXED); - rkisp_iowrite32(params_vdev, pval->b, ISP_BLS1_D_FIXED); + isp3_param_write(params_vdev, pval->r, ISP_BLS1_A_FIXED, id); + isp3_param_write(params_vdev, pval->gr, ISP_BLS1_B_FIXED, id); + isp3_param_write(params_vdev, pval->gb, ISP_BLS1_C_FIXED, id); + isp3_param_write(params_vdev, pval->b, ISP_BLS1_D_FIXED, id); break; } } @@ -338,119 +381,128 @@ isp_bls_config(struct rkisp_isp_params_vdev *params_vdev, if (!arg->enable_auto) { switch (params_vdev->raw_type) { case RAW_BGGR: - rkisp_iowrite32(params_vdev, pval->r, ISP_BLS_D_FIXED); - rkisp_iowrite32(params_vdev, pval->gr, ISP_BLS_C_FIXED); - rkisp_iowrite32(params_vdev, pval->gb, ISP_BLS_B_FIXED); - rkisp_iowrite32(params_vdev, pval->b, ISP_BLS_A_FIXED); + isp3_param_write(params_vdev, pval->r, ISP_BLS_D_FIXED, id); + isp3_param_write(params_vdev, pval->gr, ISP_BLS_C_FIXED, id); + isp3_param_write(params_vdev, pval->gb, ISP_BLS_B_FIXED, id); + isp3_param_write(params_vdev, pval->b, ISP_BLS_A_FIXED, id); break; case RAW_GBRG: - rkisp_iowrite32(params_vdev, pval->r, ISP_BLS_C_FIXED); - rkisp_iowrite32(params_vdev, pval->gr, ISP_BLS_D_FIXED); - rkisp_iowrite32(params_vdev, pval->gb, ISP_BLS_A_FIXED); - rkisp_iowrite32(params_vdev, pval->b, ISP_BLS_B_FIXED); + isp3_param_write(params_vdev, pval->r, ISP_BLS_C_FIXED, id); + isp3_param_write(params_vdev, pval->gr, ISP_BLS_D_FIXED, id); + isp3_param_write(params_vdev, pval->gb, ISP_BLS_A_FIXED, id); + isp3_param_write(params_vdev, pval->b, ISP_BLS_B_FIXED, id); break; case RAW_GRBG: - rkisp_iowrite32(params_vdev, pval->r, ISP_BLS_B_FIXED); - rkisp_iowrite32(params_vdev, pval->gr, ISP_BLS_A_FIXED); - rkisp_iowrite32(params_vdev, pval->gb, ISP_BLS_D_FIXED); - rkisp_iowrite32(params_vdev, pval->b, ISP_BLS_C_FIXED); + isp3_param_write(params_vdev, pval->r, ISP_BLS_B_FIXED, id); + isp3_param_write(params_vdev, pval->gr, ISP_BLS_A_FIXED, id); + isp3_param_write(params_vdev, pval->gb, ISP_BLS_D_FIXED, id); + isp3_param_write(params_vdev, pval->b, ISP_BLS_C_FIXED, id); break; case RAW_RGGB: default: - rkisp_iowrite32(params_vdev, pval->r, ISP_BLS_A_FIXED); - rkisp_iowrite32(params_vdev, pval->gr, ISP_BLS_B_FIXED); - rkisp_iowrite32(params_vdev, pval->gb, ISP_BLS_C_FIXED); - rkisp_iowrite32(params_vdev, pval->b, ISP_BLS_D_FIXED); + isp3_param_write(params_vdev, pval->r, ISP_BLS_A_FIXED, id); + isp3_param_write(params_vdev, pval->gr, ISP_BLS_B_FIXED, id); + isp3_param_write(params_vdev, pval->gb, ISP_BLS_C_FIXED, id); + isp3_param_write(params_vdev, pval->b, ISP_BLS_D_FIXED, id); break; } } else { if (arg->en_windows & BIT(1)) { - rkisp_iowrite32(params_vdev, arg->bls_window2.h_offs, ISP3X_BLS_H2_START); + isp3_param_write(params_vdev, arg->bls_window2.h_offs, ISP3X_BLS_H2_START, id); value = arg->bls_window2.h_offs + arg->bls_window2.h_size; - rkisp_iowrite32(params_vdev, value, ISP3X_BLS_H2_STOP); - rkisp_iowrite32(params_vdev, arg->bls_window2.v_offs, ISP3X_BLS_V2_START); + isp3_param_write(params_vdev, value, ISP3X_BLS_H2_STOP, id); + isp3_param_write(params_vdev, arg->bls_window2.v_offs, ISP3X_BLS_V2_START, id); value = arg->bls_window2.v_offs + arg->bls_window2.v_size; - rkisp_iowrite32(params_vdev, value, ISP3X_BLS_V2_STOP); + isp3_param_write(params_vdev, value, ISP3X_BLS_V2_STOP, id); new_control |= ISP_BLS_WINDOW_2; } if (arg->en_windows & BIT(0)) { - rkisp_iowrite32(params_vdev, arg->bls_window1.h_offs, ISP3X_BLS_H1_START); + isp3_param_write(params_vdev, arg->bls_window1.h_offs, ISP3X_BLS_H1_START, id); value = arg->bls_window1.h_offs + arg->bls_window1.h_size; - rkisp_iowrite32(params_vdev, value, ISP3X_BLS_H1_STOP); - rkisp_iowrite32(params_vdev, arg->bls_window1.v_offs, ISP3X_BLS_V1_START); + isp3_param_write(params_vdev, value, ISP3X_BLS_H1_STOP, id); + isp3_param_write(params_vdev, arg->bls_window1.v_offs, ISP3X_BLS_V1_START, id); value = arg->bls_window1.v_offs + arg->bls_window1.v_size; - rkisp_iowrite32(params_vdev, value, ISP3X_BLS_V1_STOP); + isp3_param_write(params_vdev, value, ISP3X_BLS_V1_STOP, id); new_control |= ISP_BLS_WINDOW_1; } - rkisp_iowrite32(params_vdev, arg->bls_samples, ISP3X_BLS_SAMPLES); + isp3_param_write(params_vdev, arg->bls_samples, ISP3X_BLS_SAMPLES, id); new_control |= ISP_BLS_MODE_MEASURED; } - rkisp_iowrite32(params_vdev, new_control, ISP3X_BLS_CTRL); + isp3_param_write(params_vdev, new_control, ISP3X_BLS_CTRL, id); } static void -isp_bls_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_bls_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 new_control; - new_control = rkisp_ioread32(params_vdev, ISP3X_BLS_CTRL); + new_control = isp3_param_read(params_vdev, ISP3X_BLS_CTRL, id); if (en) new_control |= ISP_BLS_ENA; else new_control &= ~ISP_BLS_ENA; - rkisp_iowrite32(params_vdev, new_control, ISP3X_BLS_CTRL); + isp3_param_write(params_vdev, new_control, ISP3X_BLS_CTRL, id); } static void isp_sdg_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_sdg_cfg *arg) + const struct isp2x_sdg_cfg *arg, u32 id) { int i; - rkisp_iowrite32(params_vdev, arg->xa_pnts.gamma_dx0, ISP3X_ISP_GAMMA_DX_LO); - rkisp_iowrite32(params_vdev, arg->xa_pnts.gamma_dx1, ISP3X_ISP_GAMMA_DX_HI); + isp3_param_write(params_vdev, arg->xa_pnts.gamma_dx0, ISP3X_ISP_GAMMA_DX_LO, id); + isp3_param_write(params_vdev, arg->xa_pnts.gamma_dx1, ISP3X_ISP_GAMMA_DX_HI, id); for (i = 0; i < ISP3X_DEGAMMA_CURVE_SIZE; i++) { - rkisp_iowrite32(params_vdev, arg->curve_r.gamma_y[i], - ISP3X_ISP_GAMMA_R_Y_0 + i * 4); - rkisp_iowrite32(params_vdev, arg->curve_g.gamma_y[i], - ISP3X_ISP_GAMMA_G_Y_0 + i * 4); - rkisp_iowrite32(params_vdev, arg->curve_b.gamma_y[i], - ISP3X_ISP_GAMMA_B_Y_0 + i * 4); + isp3_param_write(params_vdev, arg->curve_r.gamma_y[i], + ISP3X_ISP_GAMMA_R_Y_0 + i * 4, id); + isp3_param_write(params_vdev, arg->curve_g.gamma_y[i], + ISP3X_ISP_GAMMA_G_Y_0 + i * 4, id); + isp3_param_write(params_vdev, arg->curve_b.gamma_y[i], + ISP3X_ISP_GAMMA_B_Y_0 + i * 4, id); } } static void -isp_sdg_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_sdg_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { if (en) { - isp_param_set_bits(params_vdev, - ISP3X_ISP_CTRL0, - CIF_ISP_CTRL_ISP_GAMMA_IN_ENA); + isp3_param_set_bits(params_vdev, + ISP3X_ISP_CTRL0, + CIF_ISP_CTRL_ISP_GAMMA_IN_ENA, id); } else { - isp_param_clear_bits(params_vdev, - ISP3X_ISP_CTRL0, - CIF_ISP_CTRL_ISP_GAMMA_IN_ENA); + isp3_param_clear_bits(params_vdev, + ISP3X_ISP_CTRL0, + CIF_ISP_CTRL_ISP_GAMMA_IN_ENA, id); } } static void __maybe_unused isp_lsc_matrix_cfg_sram(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_lsc_cfg *pconfig, bool is_direct) + const struct isp3x_lsc_cfg *pconfig, + bool is_direct, u32 id) { - int i, j; + struct rkisp_device *dev = params_vdev->dev; unsigned int sram_addr; unsigned int data; + int i, j; /* CIF_ISP_LSC_TABLE_ADDRESS_153 = ( 17 * 18 ) >> 1 */ sram_addr = CIF_ISP_LSC_TABLE_ADDRESS_0; - rkisp_write(params_vdev->dev, ISP3X_LSC_R_TABLE_ADDR, sram_addr, is_direct); - rkisp_write(params_vdev->dev, ISP3X_LSC_GR_TABLE_ADDR, sram_addr, is_direct); - rkisp_write(params_vdev->dev, ISP3X_LSC_GB_TABLE_ADDR, sram_addr, is_direct); - rkisp_write(params_vdev->dev, ISP3X_LSC_B_TABLE_ADDR, sram_addr, is_direct); + if (id == ISP3_LEFT) { + rkisp_write(dev, ISP3X_LSC_R_TABLE_ADDR, sram_addr, is_direct); + rkisp_write(dev, ISP3X_LSC_GR_TABLE_ADDR, sram_addr, is_direct); + rkisp_write(dev, ISP3X_LSC_GB_TABLE_ADDR, sram_addr, is_direct); + rkisp_write(dev, ISP3X_LSC_B_TABLE_ADDR, sram_addr, is_direct); + } else { + rkisp_next_write(dev, ISP3X_LSC_R_TABLE_ADDR, sram_addr, is_direct); + rkisp_next_write(dev, ISP3X_LSC_GR_TABLE_ADDR, sram_addr, is_direct); + rkisp_next_write(dev, ISP3X_LSC_GB_TABLE_ADDR, sram_addr, is_direct); + rkisp_next_write(dev, ISP3X_LSC_B_TABLE_ADDR, sram_addr, is_direct); + } /* program data tables (table size is 9 * 17 = 153) */ for (i = 0; i < CIF_ISP_LSC_SECTORS_MAX * CIF_ISP_LSC_SECTORS_MAX; @@ -462,38 +514,62 @@ isp_lsc_matrix_cfg_sram(struct rkisp_isp_params_vdev *params_vdev, for (j = 0; j < CIF_ISP_LSC_SECTORS_MAX - 1; j += 2) { data = ISP_ISP_LSC_TABLE_DATA( pconfig->r_data_tbl[i + j], pconfig->r_data_tbl[i + j + 1]); - rkisp_write(params_vdev->dev, ISP3X_LSC_R_TABLE_DATA, data, is_direct); + if (id == ISP3_LEFT) + rkisp_write(dev, ISP3X_LSC_R_TABLE_DATA, data, is_direct); + else + rkisp_next_write(dev, ISP3X_LSC_R_TABLE_DATA, data, is_direct); data = ISP_ISP_LSC_TABLE_DATA( pconfig->gr_data_tbl[i + j], pconfig->gr_data_tbl[i + j + 1]); - rkisp_write(params_vdev->dev, ISP3X_LSC_GR_TABLE_DATA, data, is_direct); + if (id == ISP3_LEFT) + rkisp_write(dev, ISP3X_LSC_GR_TABLE_DATA, data, is_direct); + else + rkisp_next_write(dev, ISP3X_LSC_GR_TABLE_DATA, data, is_direct); data = ISP_ISP_LSC_TABLE_DATA( pconfig->gb_data_tbl[i + j], pconfig->gb_data_tbl[i + j + 1]); - rkisp_write(params_vdev->dev, ISP3X_LSC_GB_TABLE_DATA, data, is_direct); + if (id == ISP3_LEFT) + rkisp_write(dev, ISP3X_LSC_GB_TABLE_DATA, data, is_direct); + else + rkisp_next_write(dev, ISP3X_LSC_GB_TABLE_DATA, data, is_direct); data = ISP_ISP_LSC_TABLE_DATA( pconfig->b_data_tbl[i + j], pconfig->b_data_tbl[i + j + 1]); - rkisp_write(params_vdev->dev, ISP3X_LSC_B_TABLE_DATA, data, is_direct); + if (id == ISP3_LEFT) + rkisp_write(dev, ISP3X_LSC_B_TABLE_DATA, data, is_direct); + else + rkisp_next_write(dev, ISP3X_LSC_B_TABLE_DATA, data, is_direct); } data = ISP_ISP_LSC_TABLE_DATA(pconfig->r_data_tbl[i + j], 0); - rkisp_write(params_vdev->dev, ISP3X_LSC_R_TABLE_DATA, data, is_direct); + if (id == ISP3_LEFT) + rkisp_write(dev, ISP3X_LSC_R_TABLE_DATA, data, is_direct); + else + rkisp_next_write(dev, ISP3X_LSC_R_TABLE_DATA, data, is_direct); data = ISP_ISP_LSC_TABLE_DATA(pconfig->gr_data_tbl[i + j], 0); - rkisp_write(params_vdev->dev, ISP3X_LSC_GR_TABLE_DATA, data, is_direct); + if (id == ISP3_LEFT) + rkisp_write(dev, ISP3X_LSC_GR_TABLE_DATA, data, is_direct); + else + rkisp_next_write(dev, ISP3X_LSC_GR_TABLE_DATA, data, is_direct); data = ISP_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i + j], 0); - rkisp_write(params_vdev->dev, ISP3X_LSC_GB_TABLE_DATA, data, is_direct); + if (id == ISP3_LEFT) + rkisp_write(dev, ISP3X_LSC_GB_TABLE_DATA, data, is_direct); + else + rkisp_next_write(dev, ISP3X_LSC_GB_TABLE_DATA, data, is_direct); data = ISP_ISP_LSC_TABLE_DATA(pconfig->b_data_tbl[i + j], 0); - rkisp_write(params_vdev->dev, ISP3X_LSC_B_TABLE_DATA, data, is_direct); + if (id == ISP3_LEFT) + rkisp_write(dev, ISP3X_LSC_B_TABLE_DATA, data, is_direct); + else + rkisp_next_write(dev, ISP3X_LSC_B_TABLE_DATA, data, is_direct); } } static void __maybe_unused isp_lsc_matrix_cfg_ddr(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_lsc_cfg *pconfig) + const struct isp3x_lsc_cfg *pconfig, u32 id) { struct rkisp_isp_params_val_v3x *priv_val; u32 data, buf_idx, *vaddr[4], index[4]; @@ -502,8 +578,8 @@ isp_lsc_matrix_cfg_ddr(struct rkisp_isp_params_vdev *params_vdev, memset(&index[0], 0, sizeof(index)); priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; - buf_idx = (priv_val->buf_lsclut_idx++) % ISP3X_LSC_LUT_BUF_NUM; - buf_vaddr = priv_val->buf_lsclut[buf_idx].vaddr; + buf_idx = (priv_val->buf_lsclut_idx[id]++) % ISP3X_LSC_LUT_BUF_NUM; + buf_vaddr = priv_val->buf_lsclut[id][buf_idx].vaddr; vaddr[0] = buf_vaddr; vaddr[1] = buf_vaddr + ISP3X_LSC_LUT_TBL_SIZE; @@ -547,15 +623,15 @@ isp_lsc_matrix_cfg_ddr(struct rkisp_isp_params_vdev *params_vdev, data = ISP_ISP_LSC_TABLE_DATA(pconfig->gb_data_tbl[i + j], 0); vaddr[3][index[3]++] = data; } - rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_lsclut[buf_idx]); - data = priv_val->buf_lsclut[buf_idx].dma_addr; - rkisp_iowrite32(params_vdev, data, ISP3X_MI_LUT_LSC_RD_BASE); - rkisp_iowrite32(params_vdev, ISP3X_LSC_LUT_BUF_SIZE, ISP3X_MI_LUT_LSC_RD_WSIZE); + rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_lsclut[id][buf_idx]); + data = priv_val->buf_lsclut[id][buf_idx].dma_addr; + isp3_param_write(params_vdev, data, ISP3X_MI_LUT_LSC_RD_BASE, id); + isp3_param_write(params_vdev, ISP3X_LSC_LUT_BUF_SIZE, ISP3X_MI_LUT_LSC_RD_WSIZE, id); } static void isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_lsc_cfg *arg) + const struct isp3x_lsc_cfg *arg, u32 id) { struct rkisp_isp_params_val_v3x *priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; @@ -565,57 +641,57 @@ isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev, int i; /* To config must be off , store the current status firstly */ - lsc_ctrl = rkisp_ioread32(params_vdev, ISP3X_LSC_CTRL); - isp_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN); + lsc_ctrl = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id); + isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN | BIT(2), id); if (!IS_HDR_RDBK(dev->rd_mode)) - isp_lsc_matrix_cfg_ddr(params_vdev, arg); + isp_lsc_matrix_cfg_ddr(params_vdev, arg, id); for (i = 0; i < ISP3X_LSC_SIZE_TBL_SIZE / 4; i++) { /* program x size tables */ data = CIF_ISP_LSC_SECT_SIZE(arg->x_size_tbl[i * 2], arg->x_size_tbl[i * 2 + 1]); - rkisp_iowrite32(params_vdev, data, ISP3X_LSC_XSIZE_01 + i * 4); + isp3_param_write(params_vdev, data, ISP3X_LSC_XSIZE_01 + i * 4, id); data = CIF_ISP_LSC_SECT_SIZE(arg->x_size_tbl[i * 2 + 8], arg->x_size_tbl[i * 2 + 9]); - rkisp_iowrite32(params_vdev, data, ISP3X_LSC_XSIZE_89 + i * 4); + isp3_param_write(params_vdev, data, ISP3X_LSC_XSIZE_89 + i * 4, id); /* program x grad tables */ data = CIF_ISP_LSC_SECT_SIZE(arg->x_grad_tbl[i * 2], arg->x_grad_tbl[i * 2 + 1]); - rkisp_iowrite32(params_vdev, data, ISP3X_LSC_XGRAD_01 + i * 4); + isp3_param_write(params_vdev, data, ISP3X_LSC_XGRAD_01 + i * 4, id); data = CIF_ISP_LSC_SECT_SIZE(arg->x_grad_tbl[i * 2 + 8], arg->x_grad_tbl[i * 2 + 9]); - rkisp_iowrite32(params_vdev, data, ISP3X_LSC_XGRAD_89 + i * 4); + isp3_param_write(params_vdev, data, ISP3X_LSC_XGRAD_89 + i * 4, id); /* program y size tables */ data = CIF_ISP_LSC_SECT_SIZE(arg->y_size_tbl[i * 2], arg->y_size_tbl[i * 2 + 1]); - rkisp_iowrite32(params_vdev, data, ISP3X_LSC_YSIZE_01 + i * 4); + isp3_param_write(params_vdev, data, ISP3X_LSC_YSIZE_01 + i * 4, id); data = CIF_ISP_LSC_SECT_SIZE(arg->y_size_tbl[i * 2 + 8], arg->y_size_tbl[i * 2 + 9]); - rkisp_iowrite32(params_vdev, data, ISP3X_LSC_YSIZE_89 + i * 4); + isp3_param_write(params_vdev, data, ISP3X_LSC_YSIZE_89 + i * 4, id); /* program y grad tables */ data = CIF_ISP_LSC_SECT_SIZE(arg->y_grad_tbl[i * 2], arg->y_grad_tbl[i * 2 + 1]); - rkisp_iowrite32(params_vdev, data, ISP3X_LSC_YGRAD_01 + i * 4); + isp3_param_write(params_vdev, data, ISP3X_LSC_YGRAD_01 + i * 4, id); data = CIF_ISP_LSC_SECT_SIZE(arg->y_grad_tbl[i * 2 + 8], arg->y_grad_tbl[i * 2 + 9]); - rkisp_iowrite32(params_vdev, data, ISP3X_LSC_YGRAD_89 + i * 4); + isp3_param_write(params_vdev, data, ISP3X_LSC_YGRAD_89 + i * 4, id); } /* restore the lsc ctrl status */ - if (lsc_ctrl & ISP_LSC_EN) { - if (!IS_HDR_RDBK(dev->rd_mode)) - lsc_ctrl |= ISP_LSC_LUT_EN; - isp_param_set_bits(params_vdev, ISP3X_LSC_CTRL, lsc_ctrl); - } + if (lsc_ctrl & ISP_LSC_EN && !IS_HDR_RDBK(dev->rd_mode)) + lsc_ctrl |= ISP_LSC_LUT_EN; + if (arg->sector_16x16) + lsc_ctrl |= BIT(2); + isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, lsc_ctrl, id); - priv_val->cur_lsccfg = *arg; + priv_val->cur_lsccfg[id] = *arg; } static void -isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { struct rkisp_device *dev = params_vdev->dev; u32 val = ISP_LSC_EN; @@ -624,74 +700,74 @@ isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) val |= ISP_LSC_LUT_EN; if (en) { - isp_param_set_bits(params_vdev, ISP3X_LSC_CTRL, val); + isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, val, id); } else { - isp_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN); - isp_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(8)); + isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN, id); + isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(8), id); } } static void isp_debayer_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_debayer_cfg *arg) + const struct isp2x_debayer_cfg *arg, u32 id) { u32 value; - value = rkisp_ioread32(params_vdev, ISP3X_DEBAYER_CONTROL); + value = isp3_param_read(params_vdev, ISP3X_DEBAYER_CONTROL, id); value &= ISP_DEBAYER_EN; value |= (arg->filter_c_en & 0x01) << 8 | (arg->filter_g_en & 0x01) << 4; - rkisp_iowrite32(params_vdev, value, ISP3X_DEBAYER_CONTROL); + isp3_param_write(params_vdev, value, ISP3X_DEBAYER_CONTROL, id); value = (arg->thed1 & 0x0F) << 12 | (arg->thed0 & 0x0F) << 8 | (arg->dist_scale & 0x0F) << 4 | (arg->max_ratio & 0x07) << 1 | (arg->clip_en & 0x01); - rkisp_iowrite32(params_vdev, value, ISP3X_DEBAYER_G_INTERP); + isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP, id); value = (arg->filter1_coe5 & 0x0F) << 16 | (arg->filter1_coe4 & 0x0F) << 12 | (arg->filter1_coe3 & 0x0F) << 8 | (arg->filter1_coe2 & 0x0F) << 4 | (arg->filter1_coe1 & 0x0F); - rkisp_iowrite32(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER1); + isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER1, id); value = (arg->filter2_coe5 & 0x0F) << 16 | (arg->filter2_coe4 & 0x0F) << 12 | (arg->filter2_coe3 & 0x0F) << 8 | (arg->filter2_coe2 & 0x0F) << 4 | (arg->filter2_coe1 & 0x0F); - rkisp_iowrite32(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER2); + isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER2, id); value = (arg->hf_offset & 0xFFFF) << 16 | (arg->gain_offset & 0x0F) << 8 | (arg->offset & 0x1F); - rkisp_iowrite32(params_vdev, value, ISP3X_DEBAYER_OFFSET); + isp3_param_write(params_vdev, value, ISP3X_DEBAYER_OFFSET, id); value = (arg->shift_num & 0x03) << 16 | (arg->order_max & 0x1F) << 8 | (arg->order_min & 0x1F); - rkisp_iowrite32(params_vdev, value, ISP3X_DEBAYER_C_FILTER); + isp3_param_write(params_vdev, value, ISP3X_DEBAYER_C_FILTER, id); } static void -isp_debayer_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_debayer_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { if (en) - isp_param_set_bits(params_vdev, - ISP3X_DEBAYER_CONTROL, - ISP3X_MODULE_EN); + isp3_param_set_bits(params_vdev, + ISP3X_DEBAYER_CONTROL, + ISP3X_MODULE_EN, id); else - isp_param_clear_bits(params_vdev, - ISP3X_DEBAYER_CONTROL, - ISP3X_MODULE_EN); + isp3_param_clear_bits(params_vdev, + ISP3X_DEBAYER_CONTROL, + ISP3X_MODULE_EN, id); } static void isp_awbgain_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_awb_gain_cfg *arg) + const struct isp21_awb_gain_cfg *arg, u32 id) { struct rkisp_device *dev = params_vdev->dev; @@ -705,176 +781,176 @@ isp_awbgain_config(struct rkisp_isp_params_vdev *params_vdev, return; } - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->gain0_green_b, arg->gain0_green_r), - ISP3X_ISP_AWB_GAIN0_G); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->gain0_blue, arg->gain0_red), - ISP3X_ISP_AWB_GAIN0_RB); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->gain0_green_b, arg->gain0_green_r), + ISP3X_ISP_AWB_GAIN0_G, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->gain0_blue, arg->gain0_red), + ISP3X_ISP_AWB_GAIN0_RB, id); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->gain1_green_b, arg->gain1_green_r), - ISP3X_ISP_AWB_GAIN1_G); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->gain1_blue, arg->gain1_red), - ISP3X_ISP_AWB_GAIN1_RB); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->gain1_green_b, arg->gain1_green_r), + ISP3X_ISP_AWB_GAIN1_G, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->gain1_blue, arg->gain1_red), + ISP3X_ISP_AWB_GAIN1_RB, id); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->gain2_green_b, arg->gain2_green_r), - ISP3X_ISP_AWB_GAIN2_G); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->gain2_blue, arg->gain2_red), - ISP3X_ISP_AWB_GAIN2_RB); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->gain2_green_b, arg->gain2_green_r), + ISP3X_ISP_AWB_GAIN2_G, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->gain2_blue, arg->gain2_red), + ISP3X_ISP_AWB_GAIN2_RB, id); } static void -isp_awbgain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_awbgain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { if (en) - isp_param_set_bits(params_vdev, ISP3X_ISP_CTRL0, - CIF_ISP_CTRL_ISP_AWB_ENA); + isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL0, + CIF_ISP_CTRL_ISP_AWB_ENA, id); else - isp_param_clear_bits(params_vdev, ISP3X_ISP_CTRL0, - CIF_ISP_CTRL_ISP_AWB_ENA); + isp3_param_clear_bits(params_vdev, ISP3X_ISP_CTRL0, + CIF_ISP_CTRL_ISP_AWB_ENA, id); } static void isp_ccm_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_ccm_cfg *arg) + const struct isp21_ccm_cfg *arg, u32 id) { u32 value; u32 i; - value = rkisp_ioread32(params_vdev, ISP3X_CCM_CTRL); + value = isp3_param_read(params_vdev, ISP3X_CCM_CTRL, id); value &= ISP_CCM_EN; value |= (arg->highy_adjust_dis & 0x01) << 1; - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_CTRL); + isp3_param_write(params_vdev, value, ISP3X_CCM_CTRL, id); value = ISP_PACK_2SHORT(arg->coeff0_r, arg->coeff1_r); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_COEFF0_R); + isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_R, id); value = ISP_PACK_2SHORT(arg->coeff2_r, arg->offset_r); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_COEFF1_R); + isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_R, id); value = ISP_PACK_2SHORT(arg->coeff0_g, arg->coeff1_g); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_COEFF0_G); + isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_G, id); value = ISP_PACK_2SHORT(arg->coeff2_g, arg->offset_g); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_COEFF1_G); + isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_G, id); value = ISP_PACK_2SHORT(arg->coeff0_b, arg->coeff1_b); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_COEFF0_B); + isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_B, id); value = ISP_PACK_2SHORT(arg->coeff2_b, arg->offset_b); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_COEFF1_B); + isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_B, id); value = ISP_PACK_2SHORT(arg->coeff0_y, arg->coeff1_y); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_COEFF0_Y); + isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_Y, id); value = ISP_PACK_2SHORT(arg->coeff2_y, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_COEFF1_Y); + isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_Y, id); for (i = 0; i < ISP3X_CCM_CURVE_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->alp_y[2 * i], arg->alp_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_ALP_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_CCM_ALP_Y0 + 4 * i, id); } value = ISP_PACK_2SHORT(arg->alp_y[2 * i], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_ALP_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_CCM_ALP_Y0 + 4 * i, id); value = arg->bound_bit & 0x0F; - rkisp_iowrite32(params_vdev, value, ISP3X_CCM_BOUND_BIT); + isp3_param_write(params_vdev, value, ISP3X_CCM_BOUND_BIT, id); } static void -isp_ccm_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_ccm_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { if (en) - isp_param_set_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN); + isp3_param_set_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN, id); else - isp_param_clear_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN); + isp3_param_clear_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN, id); } static void isp_goc_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_gammaout_cfg *arg) + const struct isp3x_gammaout_cfg *arg, u32 id) { int i; u32 value; - value = rkisp_ioread32(params_vdev, ISP3X_GAMMA_OUT_CTRL); + value = isp3_param_read(params_vdev, ISP3X_GAMMA_OUT_CTRL, id); value &= ISP3X_GAMMA_OUT_EN; value |= (arg->equ_segm & 0x1) << 1 | (arg->finalx4_dense_en & 0x1) << 2; - rkisp_iowrite32(params_vdev, value, ISP3X_GAMMA_OUT_CTRL); + isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_CTRL, id); - rkisp_iowrite32(params_vdev, arg->offset, ISP3X_GAMMA_OUT_OFFSET); + isp3_param_write(params_vdev, arg->offset, ISP3X_GAMMA_OUT_OFFSET, id); for (i = 0; i < ISP3X_GAMMA_OUT_MAX_SAMPLES / 2; i++) { value = ISP_PACK_2SHORT(arg->gamma_y[2 * i], arg->gamma_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_GAMMA_OUT_Y0 + i * 4); + isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_Y0 + i * 4, id); } - rkisp_iowrite32(params_vdev, arg->gamma_y[2 * i], ISP3X_GAMMA_OUT_Y0 + i * 4); + isp3_param_write(params_vdev, arg->gamma_y[2 * i], ISP3X_GAMMA_OUT_Y0 + i * 4, id); } static void -isp_goc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_goc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { if (en) - isp_param_set_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, - ISP3X_GAMMA_OUT_EN); + isp3_param_set_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, + ISP3X_GAMMA_OUT_EN, id); else - isp_param_clear_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, - ISP3X_GAMMA_OUT_EN); + isp3_param_clear_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, + ISP3X_GAMMA_OUT_EN, id); } static void isp_cproc_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_cproc_cfg *arg) + const struct isp2x_cproc_cfg *arg, u32 id) { - struct isp3x_isp_other_cfg *cur_other_cfg = - ¶ms_vdev->isp3x_params->others; + struct isp3x_isp_params_cfg *params = params_vdev->isp3x_params + id; + struct isp3x_isp_other_cfg *cur_other_cfg = ¶ms->others; struct isp2x_ie_cfg *cur_ie_config = &cur_other_cfg->ie_cfg; u32 effect = cur_ie_config->effect; u32 quantization = params_vdev->quantization; - rkisp_iowrite32(params_vdev, arg->contrast, ISP3X_CPROC_CONTRAST); - rkisp_iowrite32(params_vdev, arg->hue, ISP3X_CPROC_HUE); - rkisp_iowrite32(params_vdev, arg->sat, ISP3X_CPROC_SATURATION); - rkisp_iowrite32(params_vdev, arg->brightness, ISP3X_CPROC_BRIGHTNESS); + isp3_param_write(params_vdev, arg->contrast, ISP3X_CPROC_CONTRAST, id); + isp3_param_write(params_vdev, arg->hue, ISP3X_CPROC_HUE, id); + isp3_param_write(params_vdev, arg->sat, ISP3X_CPROC_SATURATION, id); + isp3_param_write(params_vdev, arg->brightness, ISP3X_CPROC_BRIGHTNESS, id); if (quantization != V4L2_QUANTIZATION_FULL_RANGE || effect != V4L2_COLORFX_NONE) { - isp_param_clear_bits(params_vdev, ISP3X_CPROC_CTRL, - CIF_C_PROC_YOUT_FULL | - CIF_C_PROC_YIN_FULL | - CIF_C_PROC_COUT_FULL); + isp3_param_clear_bits(params_vdev, ISP3X_CPROC_CTRL, + CIF_C_PROC_YOUT_FULL | + CIF_C_PROC_YIN_FULL | + CIF_C_PROC_COUT_FULL, id); } else { - isp_param_set_bits(params_vdev, ISP3X_CPROC_CTRL, - CIF_C_PROC_YOUT_FULL | - CIF_C_PROC_YIN_FULL | - CIF_C_PROC_COUT_FULL); + isp3_param_set_bits(params_vdev, ISP3X_CPROC_CTRL, + CIF_C_PROC_YOUT_FULL | + CIF_C_PROC_YIN_FULL | + CIF_C_PROC_COUT_FULL, id); } } static void -isp_cproc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_cproc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { if (en) - isp_param_set_bits(params_vdev, - ISP3X_CPROC_CTRL, CIF_C_PROC_CTR_ENABLE); + isp3_param_set_bits(params_vdev, ISP3X_CPROC_CTRL, + CIF_C_PROC_CTR_ENABLE, id); else - isp_param_clear_bits(params_vdev, - ISP3X_CPROC_CTRL, CIF_C_PROC_CTR_ENABLE); + isp3_param_clear_bits(params_vdev, ISP3X_CPROC_CTRL, + CIF_C_PROC_CTR_ENABLE, id); } static void isp_ie_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_ie_cfg *arg) + const struct isp2x_ie_cfg *arg, u32 id) { u32 eff_ctrl; - eff_ctrl = rkisp_ioread32(params_vdev, ISP3X_IMG_EFF_CTRL); + eff_ctrl = isp3_param_read(params_vdev, ISP3X_IMG_EFF_CTRL, id); eff_ctrl &= ~CIF_IMG_EFF_CTRL_MODE_MASK; if (params_vdev->quantization == V4L2_QUANTIZATION_FULL_RANGE) @@ -885,7 +961,7 @@ isp_ie_config(struct rkisp_isp_params_vdev *params_vdev, eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_SEPIA; break; case V4L2_COLORFX_SET_CBCR: - rkisp_iowrite32(params_vdev, arg->eff_tint, ISP3X_IMG_EFF_TINT); + isp3_param_write(params_vdev, arg->eff_tint, ISP3X_IMG_EFF_TINT, id); eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_SEPIA; break; /* @@ -894,26 +970,26 @@ isp_ie_config(struct rkisp_isp_params_vdev *params_vdev, */ case V4L2_COLORFX_AQUA: eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_COLOR_SEL; - rkisp_iowrite32(params_vdev, arg->color_sel, - ISP3X_IMG_EFF_COLOR_SEL); + isp3_param_write(params_vdev, arg->color_sel, + ISP3X_IMG_EFF_COLOR_SEL, id); break; case V4L2_COLORFX_EMBOSS: eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_EMBOSS; - rkisp_iowrite32(params_vdev, arg->eff_mat_1, - CIF_IMG_EFF_MAT_1); - rkisp_iowrite32(params_vdev, arg->eff_mat_2, - CIF_IMG_EFF_MAT_2); - rkisp_iowrite32(params_vdev, arg->eff_mat_3, - CIF_IMG_EFF_MAT_3); + isp3_param_write(params_vdev, arg->eff_mat_1, + CIF_IMG_EFF_MAT_1, id); + isp3_param_write(params_vdev, arg->eff_mat_2, + CIF_IMG_EFF_MAT_2, id); + isp3_param_write(params_vdev, arg->eff_mat_3, + CIF_IMG_EFF_MAT_3, id); break; case V4L2_COLORFX_SKETCH: eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_SKETCH; - rkisp_iowrite32(params_vdev, arg->eff_mat_3, - CIF_IMG_EFF_MAT_3); - rkisp_iowrite32(params_vdev, arg->eff_mat_4, - CIF_IMG_EFF_MAT_4); - rkisp_iowrite32(params_vdev, arg->eff_mat_5, - CIF_IMG_EFF_MAT_5); + isp3_param_write(params_vdev, arg->eff_mat_3, + CIF_IMG_EFF_MAT_3, id); + isp3_param_write(params_vdev, arg->eff_mat_4, + CIF_IMG_EFF_MAT_4, id); + isp3_param_write(params_vdev, arg->eff_mat_5, + CIF_IMG_EFF_MAT_5, id); break; case V4L2_COLORFX_BW: eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_BLACKWHITE; @@ -925,24 +1001,25 @@ isp_ie_config(struct rkisp_isp_params_vdev *params_vdev, break; } - rkisp_iowrite32(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL); + isp3_param_write(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL, id); } static void -isp_ie_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_ie_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { if (en) { - isp_param_set_bits(params_vdev, ISP3X_IMG_EFF_CTRL, - CIF_IMG_EFF_CTRL_CFG_UPD | CIF_IMG_EFF_CTRL_ENABLE); + isp3_param_set_bits(params_vdev, ISP3X_IMG_EFF_CTRL, + CIF_IMG_EFF_CTRL_CFG_UPD | + CIF_IMG_EFF_CTRL_ENABLE, id); } else { - isp_param_clear_bits(params_vdev, ISP3X_IMG_EFF_CTRL, - CIF_IMG_EFF_CTRL_ENABLE); + isp3_param_clear_bits(params_vdev, ISP3X_IMG_EFF_CTRL, + CIF_IMG_EFF_CTRL_ENABLE, id); } } static void isp_rawaf_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_rawaf_meas_cfg *arg) + const struct isp3x_rawaf_meas_cfg *arg, u32 id) { u32 i, var, ctrl; u16 h_size, v_size; @@ -965,17 +1042,17 @@ isp_rawaf_config(struct rkisp_isp_params_vdev *params_vdev, * (horizontal left row), value must be greater or equal 2 * (vertical top line), value must be greater or equal 1 */ - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(v_offs, h_offs), - ISP3X_RAWAF_OFFSET_WINA + i * 8); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(v_offs, h_offs), + ISP3X_RAWAF_OFFSET_WINA + i * 8, id); /* * value must be smaller than [width of picture -2] * value must be lower than (number of lines -2) */ - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(v_size, h_size), - ISP3X_RAWAF_SIZE_WINA + i * 8); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(v_size, h_size), + ISP3X_RAWAF_SIZE_WINA + i * 8, id); } var = 0; @@ -984,77 +1061,77 @@ isp_rawaf_config(struct rkisp_isp_params_vdev *params_vdev, var |= ISP3X_RAWAF_INTLINE0_EN << i; var |= ISP3X_RAWAF_INELINE0(arg->line_num[i]) << 4 * i; } - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_INT_LINE); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_INT_LINE, id); - var = rkisp_ioread32(params_vdev, ISP3X_RAWAF_THRES); + var = isp3_param_read(params_vdev, ISP3X_RAWAF_THRES, id); var &= ~0xFFFF; var |= arg->afm_thres; - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_THRES); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_THRES, id); var = (arg->lum_var_shift[1] & 0x7) << 20 | (arg->lum_var_shift[0] & 0x7) << 16 | (arg->afm_var_shift[1] & 0x7) << 4 | (arg->afm_var_shift[0] & 0x7); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_VAR_SHIFT); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_VAR_SHIFT, id); for (i = 0; i < ISP3X_RAWAF_GAMMA_NUM / 2; i++) { var = ISP_PACK_2SHORT(arg->gamma_y[2 * i], arg->gamma_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_GAMMA_Y0 + i * 4); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_GAMMA_Y0 + i * 4, id); } var = ISP_PACK_2SHORT(arg->gamma_y[16], 0); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_GAMMA_Y8); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_GAMMA_Y8, id); var = (arg->v2iir_var_shift & 0x7) << 12 | (arg->v1iir_var_shift & 0x7) << 8 | (arg->h2iir_var_shift & 0x7) << 4 | (arg->h1iir_var_shift & 0x7); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_HVIIR_VAR_SHIFT); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_HVIIR_VAR_SHIFT, id); var = ISP_PACK_2SHORT(arg->h_fv_thresh, arg->v_fv_thresh); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_HIIR_THRESH); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_HIIR_THRESH, id); for (i = 0; i < ISP3X_RAWAF_VFIR_COE_NUM; i++) { var = ISP_PACK_2SHORT(arg->v1fir_coe[i], arg->v2fir_coe[i]); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_V_FIR_COE0 + i * 4); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_V_FIR_COE0 + i * 4, id); } - rkisp_iowrite32(params_vdev, arg->highlit_thresh, ISP3X_RAWAF_HIGHLIT_THRESH); + isp3_param_write(params_vdev, arg->highlit_thresh, ISP3X_RAWAF_HIGHLIT_THRESH, id); - ctrl = rkisp_ioread32(params_vdev, ISP3X_RAWAF_CTRL); + ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL, id); ctrl &= ISP3X_RAWAF_EN; if (arg->hiir_en) { ctrl |= ISP3X_RAWAF_HIIR_EN; for (i = 0; i < ISP3X_RAWAF_HIIR_COE_NUM / 2; i++) { var = ISP_PACK_2SHORT(arg->h1iir1_coe[i * 2], arg->h1iir1_coe[i * 2 + 1]); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_H1_IIR1_COE01 + i * 4); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_H1_IIR1_COE01 + i * 4, id); var = ISP_PACK_2SHORT(arg->h1iir2_coe[i * 2], arg->h1iir2_coe[i * 2 + 1]); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_H1_IIR2_COE01 + i * 4); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_H1_IIR2_COE01 + i * 4, id); var = ISP_PACK_2SHORT(arg->h2iir1_coe[i * 2], arg->h2iir1_coe[i * 2 + 1]); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_H2_IIR1_COE01 + i * 4); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_H2_IIR1_COE01 + i * 4, id); var = ISP_PACK_2SHORT(arg->h2iir2_coe[i * 2], arg->h2iir2_coe[i * 2 + 1]); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_H2_IIR2_COE01 + i * 4); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_H2_IIR2_COE01 + i * 4, id); } } if (arg->viir_en) { ctrl |= ISP3X_RAWAF_VIIR_EN; for (i = 0; i < ISP3X_RAWAF_V2IIR_COE_NUM; i++) { var = ISP_PACK_2SHORT(arg->v1iir_coe[i], arg->v2iir_coe[i]); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_V_IIR_COE0 + i * 4); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_V_IIR_COE0 + i * 4, id); } for (; i < ISP3X_RAWAF_V1IIR_COE_NUM; i++) { var = ISP_PACK_2SHORT(arg->v1iir_coe[i], 0); - rkisp_iowrite32(params_vdev, var, ISP3X_RAWAF_V_IIR_COE0 + i * 4); + isp3_param_write(params_vdev, var, ISP3X_RAWAF_V_IIR_COE0 + i * 4, id); } } if (arg->ldg_en) { ctrl |= ISP3X_RAWAF_LDG_EN; for (i = 0; i < ISP3X_RAWAF_CURVE_NUM; i++) { - rkisp_iowrite32(params_vdev, - arg->curve_h[i].ldg_lumth | - arg->curve_h[i].ldg_gain << 8 | - arg->curve_h[i].ldg_gslp << 16, - ISP3X_RAWAF_H_CURVEL + i * 16); - rkisp_iowrite32(params_vdev, - arg->curve_v[i].ldg_lumth | - arg->curve_v[i].ldg_gain << 8 | - arg->curve_v[i].ldg_gslp << 16, - ISP3X_RAWAF_V_CURVEL + i * 16); + isp3_param_write(params_vdev, + arg->curve_h[i].ldg_lumth | + arg->curve_h[i].ldg_gain << 8 | + arg->curve_h[i].ldg_gslp << 16, + ISP3X_RAWAF_H_CURVEL + i * 16, id); + isp3_param_write(params_vdev, + arg->curve_v[i].ldg_lumth | + arg->curve_v[i].ldg_gain << 8 | + arg->curve_v[i].ldg_gslp << 16, + ISP3X_RAWAF_V_CURVEL + i * 16, id); } } ctrl |= (arg->y_mode & 0x1) << 13 | @@ -1067,18 +1144,18 @@ isp_rawaf_config(struct rkisp_isp_params_vdev *params_vdev, (arg->v1_fir_sel & 0x1) << 3 | (arg->gaus_en & 0x1) << 2 | (arg->gamma_en & 0x1) << 1; - rkisp_iowrite32(params_vdev, ctrl, ISP3X_RAWAF_CTRL); + isp3_param_write(params_vdev, ctrl, ISP3X_RAWAF_CTRL, id); - ctrl = rkisp_ioread32(params_vdev, ISP3X_VI_ISP_PATH); + ctrl = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id); ctrl &= ~(ISP3X_RAWAF_SEL(3)); ctrl |= ISP3X_RAWAF_SEL(arg->rawaf_sel); - rkisp_iowrite32(params_vdev, ctrl, ISP3X_VI_ISP_PATH); + isp3_param_write(params_vdev, ctrl, ISP3X_VI_ISP_PATH, id); } static void -isp_rawaf_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawaf_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { - u32 afm_ctrl = rkisp_ioread32(params_vdev, ISP3X_RAWAF_CTRL); + u32 afm_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL, id); afm_ctrl &= ~ISP3X_REG_WR_MASK; if (en) @@ -1086,35 +1163,38 @@ isp_rawaf_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) else afm_ctrl &= ~ISP3X_RAWAF_EN; - rkisp_iowrite32(params_vdev, afm_ctrl, ISP3X_RAWAF_CTRL); + isp3_param_write(params_vdev, afm_ctrl, ISP3X_RAWAF_CTRL, id); } static void isp_rawaelite_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawaelite_meas_cfg *arg) + const struct isp2x_rawaelite_meas_cfg *arg, u32 id) { struct rkisp_device *ispdev = params_vdev->dev; struct v4l2_rect *out_crop = &ispdev->isp_sdev.out_crop; + u32 width = out_crop->width; u32 block_hsize, block_vsize, value; u32 wnd_num_idx = 0; const u32 ae_wnd_num[] = {1, 5}; - value = rkisp_ioread32(params_vdev, ISP3X_RAWAE_LITE_CTRL); + value = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL, id); value &= ~(ISP3X_RAWAE_LITE_WNDNUM); if (arg->wnd_num) { value |= ISP3X_RAWAE_LITE_WNDNUM; wnd_num_idx = 1; } value &= ~ISP3X_REG_WR_MASK; - rkisp_iowrite32(params_vdev, value, ISP3X_RAWAE_LITE_CTRL); + isp3_param_write(params_vdev, value, ISP3X_RAWAE_LITE_CTRL, id); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs), - ISP3X_RAWAE_LITE_OFFSET); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs), + ISP3X_RAWAE_LITE_OFFSET, id); block_hsize = arg->win.h_size / ae_wnd_num[wnd_num_idx]; value = block_hsize * ae_wnd_num[wnd_num_idx] + arg->win.h_offs; - if (value + 1 > out_crop->width) + if (ispdev->hw_dev->is_unite) + width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL; + if (value + 1 > width) block_hsize -= 1; block_vsize = arg->win.v_size / ae_wnd_num[wnd_num_idx]; value = block_vsize * ae_wnd_num[wnd_num_idx] + arg->win.v_offs; @@ -1122,37 +1202,39 @@ isp_rawaelite_config(struct rkisp_isp_params_vdev *params_vdev, block_vsize -= 1; if (block_vsize % 2) block_vsize -= 1; - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(block_hsize, block_vsize), - ISP3X_RAWAE_LITE_BLK_SIZ); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(block_hsize, block_vsize), + ISP3X_RAWAE_LITE_BLK_SIZ, id); - value = rkisp_ioread32(params_vdev, ISP3X_VI_ISP_PATH); + value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id); value &= ~(ISP3X_RAWAE012_SEL(3)); value |= ISP3X_RAWAE012_SEL(arg->rawae_sel); - rkisp_iowrite32(params_vdev, value, ISP3X_VI_ISP_PATH); + isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id); } static void -isp_rawaelite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawaelite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 exp_ctrl; - exp_ctrl = rkisp_ioread32(params_vdev, ISP3X_RAWAE_LITE_CTRL); + exp_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL, id); exp_ctrl &= ~ISP3X_REG_WR_MASK; if (en) exp_ctrl |= ISP3X_RAWAE_LITE_EN; else exp_ctrl &= ~ISP3X_RAWAE_LITE_EN; - rkisp_iowrite32(params_vdev, exp_ctrl, ISP3X_RAWAE_LITE_CTRL); + isp3_param_write(params_vdev, exp_ctrl, ISP3X_RAWAE_LITE_CTRL, id); } static void isp_rawaebig_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawaebig_meas_cfg *arg, u32 blk_no) + const struct isp2x_rawaebig_meas_cfg *arg, + u32 blk_no, u32 id) { struct rkisp_device *ispdev = params_vdev->dev; struct v4l2_rect *out_crop = &ispdev->isp_sdev.out_crop; + u32 width = out_crop->width; u32 block_hsize, block_vsize; u32 addr, i, value, h_size, v_size; u32 wnd_num_idx = 0; @@ -1174,7 +1256,7 @@ isp_rawaebig_config(struct rkisp_isp_params_vdev *params_vdev, } /* avoid to override the old enable value */ - value = rkisp_ioread32(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL); + value = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id); value &= ISP3X_RAWAE_BIG_EN; wnd_num_idx = arg->wnd_num; @@ -1189,15 +1271,17 @@ isp_rawaebig_config(struct rkisp_isp_params_vdev *params_vdev, if (arg->subwin_en[3]) value |= ISP3X_RAWAE_BIG_WND4_EN; - rkisp_iowrite32(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL); + isp3_param_write(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL, id); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs), - addr + ISP3X_RAWAE_BIG_OFFSET); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs), + addr + ISP3X_RAWAE_BIG_OFFSET, id); block_hsize = arg->win.h_size / ae_wnd_num[wnd_num_idx]; value = block_hsize * ae_wnd_num[wnd_num_idx] + arg->win.h_offs; - if (value + 1 > out_crop->width) + if (ispdev->hw_dev->is_unite) + width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL; + if (value + 1 > width) block_hsize -= 1; block_vsize = arg->win.v_size / ae_wnd_num[wnd_num_idx]; value = block_vsize * ae_wnd_num[wnd_num_idx] + arg->win.v_offs; @@ -1205,38 +1289,38 @@ isp_rawaebig_config(struct rkisp_isp_params_vdev *params_vdev, block_vsize -= 1; if (block_vsize % 2) block_vsize -= 1; - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(block_hsize, block_vsize), - addr + ISP3X_RAWAE_BIG_BLK_SIZE); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(block_hsize, block_vsize), + addr + ISP3X_RAWAE_BIG_BLK_SIZE, id); for (i = 0; i < ISP3X_RAWAEBIG_SUBWIN_NUM; i++) { - rkisp_iowrite32(params_vdev, + isp3_param_write(params_vdev, ISP_PACK_2SHORT(arg->subwin[i].h_offs, arg->subwin[i].v_offs), - addr + ISP3X_RAWAE_BIG_WND1_OFFSET + 8 * i); + addr + ISP3X_RAWAE_BIG_WND1_OFFSET + 8 * i, id); v_size = arg->subwin[i].v_size + arg->subwin[i].v_offs; h_size = arg->subwin[i].h_size + arg->subwin[i].h_offs; - rkisp_iowrite32(params_vdev, + isp3_param_write(params_vdev, ISP_PACK_2SHORT(h_size, v_size), - addr + ISP3X_RAWAE_BIG_WND1_SIZE + 8 * i); + addr + ISP3X_RAWAE_BIG_WND1_SIZE + 8 * i, id); } if (blk_no == 0) { - value = rkisp_ioread32(params_vdev, ISP3X_VI_ISP_PATH); + value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id); value &= ~(ISP3X_RAWAE3_SEL(3)); value |= ISP3X_RAWAE3_SEL(arg->rawae_sel); - rkisp_iowrite32(params_vdev, value, ISP3X_VI_ISP_PATH); + isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id); } else { - value = rkisp_ioread32(params_vdev, ISP3X_VI_ISP_PATH); + value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id); value &= ~(ISP3X_RAWAE012_SEL(3)); value |= ISP3X_RAWAE012_SEL(arg->rawae_sel); - rkisp_iowrite32(params_vdev, value, ISP3X_VI_ISP_PATH); + isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id); } } static void isp_rawaebig_enable(struct rkisp_isp_params_vdev *params_vdev, - bool en, u32 blk_no) + bool en, u32 blk_no, u32 id) { u32 exp_ctrl; u32 addr; @@ -1254,954 +1338,953 @@ isp_rawaebig_enable(struct rkisp_isp_params_vdev *params_vdev, break; } - exp_ctrl = rkisp_ioread32(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL); + exp_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id); exp_ctrl &= ~ISP3X_REG_WR_MASK; if (en) exp_ctrl |= ISP3X_MODULE_EN; else exp_ctrl &= ~ISP3X_MODULE_EN; - rkisp_iowrite32(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL); + isp3_param_write(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL, id); } static void isp_rawae1_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawaebig_meas_cfg *arg) + const struct isp2x_rawaebig_meas_cfg *arg, u32 id) { - isp_rawaebig_config(params_vdev, arg, 1); + isp_rawaebig_config(params_vdev, arg, 1, id); } static void -isp_rawae1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawae1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { - isp_rawaebig_enable(params_vdev, en, 1); + isp_rawaebig_enable(params_vdev, en, 1, id); } static void isp_rawae2_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawaebig_meas_cfg *arg) + const struct isp2x_rawaebig_meas_cfg *arg, u32 id) { - isp_rawaebig_config(params_vdev, arg, 2); + isp_rawaebig_config(params_vdev, arg, 2, id); } static void -isp_rawae2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawae2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { - isp_rawaebig_enable(params_vdev, en, 2); + isp_rawaebig_enable(params_vdev, en, 2, id); } static void isp_rawae3_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawaebig_meas_cfg *arg) + const struct isp2x_rawaebig_meas_cfg *arg, u32 id) { - isp_rawaebig_config(params_vdev, arg, 0); + isp_rawaebig_config(params_vdev, arg, 0, id); } static void -isp_rawae3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawae3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { - isp_rawaebig_enable(params_vdev, en, 0); + isp_rawaebig_enable(params_vdev, en, 0, id); } static void isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_rawawb_meas_cfg *arg) + const struct isp3x_rawawb_meas_cfg *arg, u32 id) { u32 i, value; - rkisp_iowrite32(params_vdev, - (arg->sw_rawawb_blk_measure_enable & 0x1) | - (arg->sw_rawawb_blk_measure_mode & 0x1) << 1 | - (arg->sw_rawawb_blk_measure_xytype & 0x1) << 2 | - (arg->sw_rawawb_blk_rtdw_measure_en & 0x1) << 3 | - (arg->sw_rawawb_blk_measure_illu_idx & 0x7) << 4 | - (arg->sw_rawawb_blk_with_luma_wei_en & 0x1) << 8, - ISP3X_RAWAWB_BLK_CTRL); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_h_offs, arg->sw_rawawb_v_offs), - ISP3X_RAWAWB_WIN_OFFS); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_h_size, arg->sw_rawawb_v_size), - ISP3X_RAWAWB_WIN_SIZE); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_r_max, arg->sw_rawawb_g_max), - ISP3X_RAWAWB_LIMIT_RG_MAX); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_b_max, arg->sw_rawawb_y_max), - ISP3X_RAWAWB_LIMIT_BY_MAX); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_r_min, arg->sw_rawawb_g_min), - ISP3X_RAWAWB_LIMIT_RG_MIN); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_b_min, arg->sw_rawawb_y_min), - ISP3X_RAWAWB_LIMIT_BY_MIN); - - rkisp_iowrite32(params_vdev, - (arg->sw_rawawb_wp_luma_wei_en0 & 0x1) | - (arg->sw_rawawb_wp_luma_wei_en1 & 0x1) << 1 | - (arg->sw_rawawb_wp_blk_wei_en0 & 0x1) << 2 | - (arg->sw_rawawb_wp_blk_wei_en1 & 0x1) << 3 | - (arg->sw_rawawb_wp_hist_xytype & 0x1) << 4, - ISP3X_RAWAWB_WEIGHT_CURVE_CTRL); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_wp_luma_weicurve_y0, - arg->sw_rawawb_wp_luma_weicurve_y1, - arg->sw_rawawb_wp_luma_weicurve_y2, - arg->sw_rawawb_wp_luma_weicurve_y3), - ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR03); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_wp_luma_weicurve_y4, - arg->sw_rawawb_wp_luma_weicurve_y5, - arg->sw_rawawb_wp_luma_weicurve_y6, - arg->sw_rawawb_wp_luma_weicurve_y7), - ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR47); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_wp_luma_weicurve_y8, - ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR8); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_wp_luma_weicurve_w0, - arg->sw_rawawb_wp_luma_weicurve_w1, - arg->sw_rawawb_wp_luma_weicurve_w2, - arg->sw_rawawb_wp_luma_weicurve_w3), - ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR03); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_wp_luma_weicurve_w4, - arg->sw_rawawb_wp_luma_weicurve_w5, - arg->sw_rawawb_wp_luma_weicurve_w6, - arg->sw_rawawb_wp_luma_weicurve_w7), - ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR47); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_wp_luma_weicurve_w8, - arg->sw_rawawb_pre_wbgain_inv_r), - ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR8); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_pre_wbgain_inv_g, - arg->sw_rawawb_pre_wbgain_inv_b), - ISP3X_RAWAWB_PRE_WBGAIN_INV); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_0, - arg->sw_rawawb_vertex0_v_0), - ISP3X_RAWAWB_UV_DETC_VERTEX0_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_0, - arg->sw_rawawb_vertex1_v_0), - ISP3X_RAWAWB_UV_DETC_VERTEX1_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_0, - arg->sw_rawawb_vertex2_v_0), - ISP3X_RAWAWB_UV_DETC_VERTEX2_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_0, - arg->sw_rawawb_vertex3_v_0), - ISP3X_RAWAWB_UV_DETC_VERTEX3_0); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope01_0, - ISP3X_RAWAWB_UV_DETC_ISLOPE01_0); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope12_0, - ISP3X_RAWAWB_UV_DETC_ISLOPE12_0); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope23_0, - ISP3X_RAWAWB_UV_DETC_ISLOPE23_0); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope30_0, - ISP3X_RAWAWB_UV_DETC_ISLOPE30_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_1, - arg->sw_rawawb_vertex0_v_1), - ISP3X_RAWAWB_UV_DETC_VERTEX0_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_1, - arg->sw_rawawb_vertex1_v_1), - ISP3X_RAWAWB_UV_DETC_VERTEX1_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_1, - arg->sw_rawawb_vertex2_v_1), - ISP3X_RAWAWB_UV_DETC_VERTEX2_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_1, - arg->sw_rawawb_vertex3_v_1), - ISP3X_RAWAWB_UV_DETC_VERTEX3_1); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope01_1, - ISP3X_RAWAWB_UV_DETC_ISLOPE01_1); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope12_1, - ISP3X_RAWAWB_UV_DETC_ISLOPE12_1); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope23_1, - ISP3X_RAWAWB_UV_DETC_ISLOPE23_1); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope30_1, - ISP3X_RAWAWB_UV_DETC_ISLOPE30_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_2, - arg->sw_rawawb_vertex0_v_2), - ISP3X_RAWAWB_UV_DETC_VERTEX0_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_2, - arg->sw_rawawb_vertex1_v_2), - ISP3X_RAWAWB_UV_DETC_VERTEX1_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_2, - arg->sw_rawawb_vertex2_v_2), - ISP3X_RAWAWB_UV_DETC_VERTEX2_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_2, - arg->sw_rawawb_vertex3_v_2), - ISP3X_RAWAWB_UV_DETC_VERTEX3_2); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope01_2, - ISP3X_RAWAWB_UV_DETC_ISLOPE01_2); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope12_2, - ISP3X_RAWAWB_UV_DETC_ISLOPE12_2); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope23_2, - ISP3X_RAWAWB_UV_DETC_ISLOPE23_2); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope30_2, - ISP3X_RAWAWB_UV_DETC_ISLOPE30_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_3, - arg->sw_rawawb_vertex0_v_3), - ISP3X_RAWAWB_UV_DETC_VERTEX0_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_3, - arg->sw_rawawb_vertex1_v_3), - ISP3X_RAWAWB_UV_DETC_VERTEX1_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_3, - arg->sw_rawawb_vertex2_v_3), - ISP3X_RAWAWB_UV_DETC_VERTEX2_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_3, - arg->sw_rawawb_vertex3_v_3), - ISP3X_RAWAWB_UV_DETC_VERTEX3_3); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope01_3, - ISP3X_RAWAWB_UV_DETC_ISLOPE01_3); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope12_3, - ISP3X_RAWAWB_UV_DETC_ISLOPE12_3); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope23_3, - ISP3X_RAWAWB_UV_DETC_ISLOPE23_3); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope30_3, - ISP3X_RAWAWB_UV_DETC_ISLOPE30_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_4, - arg->sw_rawawb_vertex0_v_4), - ISP3X_RAWAWB_UV_DETC_VERTEX0_4); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_4, - arg->sw_rawawb_vertex1_v_4), - ISP3X_RAWAWB_UV_DETC_VERTEX1_4); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_4, - arg->sw_rawawb_vertex2_v_4), - ISP3X_RAWAWB_UV_DETC_VERTEX2_4); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_4, - arg->sw_rawawb_vertex3_v_4), - ISP3X_RAWAWB_UV_DETC_VERTEX3_4); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope01_4, - ISP3X_RAWAWB_UV_DETC_ISLOPE01_4); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope12_4, - ISP3X_RAWAWB_UV_DETC_ISLOPE12_4); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope23_4, - ISP3X_RAWAWB_UV_DETC_ISLOPE23_4); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope30_4, - ISP3X_RAWAWB_UV_DETC_ISLOPE30_4); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_5, - arg->sw_rawawb_vertex0_v_5), - ISP3X_RAWAWB_UV_DETC_VERTEX0_5); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_5, - arg->sw_rawawb_vertex1_v_5), - ISP3X_RAWAWB_UV_DETC_VERTEX1_5); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_5, - arg->sw_rawawb_vertex2_v_5), - ISP3X_RAWAWB_UV_DETC_VERTEX2_5); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_5, - arg->sw_rawawb_vertex3_v_5), - ISP3X_RAWAWB_UV_DETC_VERTEX3_5); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope01_5, - ISP3X_RAWAWB_UV_DETC_ISLOPE01_5); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope12_5, - ISP3X_RAWAWB_UV_DETC_ISLOPE10_5); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope23_5, - ISP3X_RAWAWB_UV_DETC_ISLOPE23_5); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope30_5, - ISP3X_RAWAWB_UV_DETC_ISLOPE30_5); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_6, - arg->sw_rawawb_vertex0_v_6), - ISP3X_RAWAWB_UV_DETC_VERTEX0_6); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_6, - arg->sw_rawawb_vertex1_v_6), - ISP3X_RAWAWB_UV_DETC_VERTEX1_6); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_6, - arg->sw_rawawb_vertex2_v_6), - ISP3X_RAWAWB_UV_DETC_VERTEX2_6); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_6, - arg->sw_rawawb_vertex3_v_6), - ISP3X_RAWAWB_UV_DETC_VERTEX3_6); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope01_6, - ISP3X_RAWAWB_UV_DETC_ISLOPE01_6); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope12_6, - ISP3X_RAWAWB_UV_DETC_ISLOPE10_6); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope23_6, - ISP3X_RAWAWB_UV_DETC_ISLOPE23_6); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_islope30_6, - ISP3X_RAWAWB_UV_DETC_ISLOPE30_6); - - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat0_y, - arg->sw_rawawb_rgb2ryuvmat1_y), - ISP3X_RAWAWB_YUV_RGB2ROTY_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat2_y, - arg->sw_rawawb_rgb2ryuvofs_y), - ISP3X_RAWAWB_YUV_RGB2ROTY_1); - - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat0_u, - arg->sw_rawawb_rgb2ryuvmat1_u), - ISP3X_RAWAWB_YUV_RGB2ROTU_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat2_u, - arg->sw_rawawb_rgb2ryuvofs_u), - ISP3X_RAWAWB_YUV_RGB2ROTU_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat0_v, - arg->sw_rawawb_rgb2ryuvmat1_v), - ISP3X_RAWAWB_YUV_RGB2ROTV_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat2_v, - arg->sw_rawawb_rgb2ryuvofs_v), - ISP3X_RAWAWB_YUV_RGB2ROTV_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls0_y, - arg->sw_rawawb_vec_x21_ls0_y), - ISP3X_RAWAWB_YUV_X_COOR_Y_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls0_u, - arg->sw_rawawb_vec_x21_ls0_u), - ISP3X_RAWAWB_YUV_X_COOR_U_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls0_v, - arg->sw_rawawb_vec_x21_ls0_v), - ISP3X_RAWAWB_YUV_X_COOR_V_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_dis_x1x2_ls0, - 0, - arg->sw_rawawb_rotu0_ls0, - arg->sw_rawawb_rotu1_ls0), - ISP3X_RAWAWB_YUV_X1X2_DIS_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_rotu2_ls0, - arg->sw_rawawb_rotu3_ls0, - arg->sw_rawawb_rotu4_ls0, - arg->sw_rawawb_rotu5_ls0), - ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th0_ls0, - arg->sw_rawawb_th1_ls0), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th2_ls0, - arg->sw_rawawb_th3_ls0), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th4_ls0, - arg->sw_rawawb_th5_ls0), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls1_y, - arg->sw_rawawb_vec_x21_ls1_y), - ISP3X_RAWAWB_YUV_X_COOR_Y_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls1_u, - arg->sw_rawawb_vec_x21_ls1_u), - ISP3X_RAWAWB_YUV_X_COOR_U_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls1_v, - arg->sw_rawawb_vec_x21_ls1_v), - ISP3X_RAWAWB_YUV_X_COOR_V_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_dis_x1x2_ls1, - 0, - arg->sw_rawawb_rotu0_ls1, - arg->sw_rawawb_rotu1_ls1), - ISP3X_RAWAWB_YUV_X1X2_DIS_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_rotu2_ls1, - arg->sw_rawawb_rotu3_ls1, - arg->sw_rawawb_rotu4_ls1, - arg->sw_rawawb_rotu5_ls1), - ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th0_ls1, - arg->sw_rawawb_th1_ls1), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th2_ls1, - arg->sw_rawawb_th3_ls1), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th4_ls1, - arg->sw_rawawb_th5_ls1), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls2_y, - arg->sw_rawawb_vec_x21_ls2_y), - ISP3X_RAWAWB_YUV_X_COOR_Y_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls2_u, - arg->sw_rawawb_vec_x21_ls2_u), - ISP3X_RAWAWB_YUV_X_COOR_U_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls2_v, - arg->sw_rawawb_vec_x21_ls2_v), - ISP3X_RAWAWB_YUV_X_COOR_V_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_dis_x1x2_ls2, - 0, - arg->sw_rawawb_rotu0_ls2, - arg->sw_rawawb_rotu1_ls2), - ISP3X_RAWAWB_YUV_X1X2_DIS_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_rotu2_ls2, - arg->sw_rawawb_rotu3_ls2, - arg->sw_rawawb_rotu4_ls2, - arg->sw_rawawb_rotu5_ls2), - ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th0_ls2, - arg->sw_rawawb_th1_ls2), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th2_ls2, - arg->sw_rawawb_th3_ls2), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th4_ls2, - arg->sw_rawawb_th5_ls2), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls3_y, - arg->sw_rawawb_vec_x21_ls3_y), - ISP3X_RAWAWB_YUV_X_COOR_Y_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls3_u, - arg->sw_rawawb_vec_x21_ls3_u), - ISP3X_RAWAWB_YUV_X_COOR_U_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls3_v, - arg->sw_rawawb_vec_x21_ls3_v), - ISP3X_RAWAWB_YUV_X_COOR_V_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_dis_x1x2_ls3, - 0, - arg->sw_rawawb_rotu0_ls3, - arg->sw_rawawb_rotu1_ls3), - ISP3X_RAWAWB_YUV_X1X2_DIS_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->sw_rawawb_rotu2_ls3, - arg->sw_rawawb_rotu3_ls3, - arg->sw_rawawb_rotu4_ls3, - arg->sw_rawawb_rotu5_ls3), - ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th0_ls3, - arg->sw_rawawb_th1_ls3), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th2_ls3, - arg->sw_rawawb_th3_ls3), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_th4_ls3, - arg->sw_rawawb_th5_ls3), - ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_wt0, - arg->sw_rawawb_wt1), - ISP3X_RAWAWB_RGB2XY_WT01); - - rkisp_iowrite32(params_vdev, - arg->sw_rawawb_wt2, - ISP3X_RAWAWB_RGB2XY_WT2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_mat0_x, - arg->sw_rawawb_mat0_y), - ISP3X_RAWAWB_RGB2XY_MAT0_XY); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_mat1_x, - arg->sw_rawawb_mat1_y), - ISP3X_RAWAWB_RGB2XY_MAT1_XY); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_mat2_x, - arg->sw_rawawb_mat2_y), - ISP3X_RAWAWB_RGB2XY_MAT2_XY); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_0, - arg->sw_rawawb_nor_x1_0), - ISP3X_RAWAWB_XY_DETC_NOR_X_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_0, - arg->sw_rawawb_nor_y1_0), - ISP3X_RAWAWB_XY_DETC_NOR_Y_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_0, - arg->sw_rawawb_big_x1_0), - ISP3X_RAWAWB_XY_DETC_BIG_X_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_0, - arg->sw_rawawb_big_y1_0), - ISP3X_RAWAWB_XY_DETC_BIG_Y_0); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_1, - arg->sw_rawawb_nor_x1_1), - ISP3X_RAWAWB_XY_DETC_NOR_X_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_1, - arg->sw_rawawb_nor_y1_1), - ISP3X_RAWAWB_XY_DETC_NOR_Y_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_1, - arg->sw_rawawb_big_x1_1), - ISP3X_RAWAWB_XY_DETC_BIG_X_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_1, - arg->sw_rawawb_big_y1_1), - ISP3X_RAWAWB_XY_DETC_BIG_Y_1); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_2, - arg->sw_rawawb_nor_x1_2), - ISP3X_RAWAWB_XY_DETC_NOR_X_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_2, - arg->sw_rawawb_nor_y1_2), - ISP3X_RAWAWB_XY_DETC_NOR_Y_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_2, - arg->sw_rawawb_big_x1_2), - ISP3X_RAWAWB_XY_DETC_BIG_X_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_2, - arg->sw_rawawb_big_y1_2), - ISP3X_RAWAWB_XY_DETC_BIG_Y_2); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_3, - arg->sw_rawawb_nor_x1_3), - ISP3X_RAWAWB_XY_DETC_NOR_X_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_3, - arg->sw_rawawb_nor_y1_3), - ISP3X_RAWAWB_XY_DETC_NOR_Y_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_3, - arg->sw_rawawb_big_x1_3), - ISP3X_RAWAWB_XY_DETC_BIG_X_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_3, - arg->sw_rawawb_big_y1_3), - ISP3X_RAWAWB_XY_DETC_BIG_Y_3); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_4, - arg->sw_rawawb_nor_x1_4), - ISP3X_RAWAWB_XY_DETC_NOR_X_4); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_4, - arg->sw_rawawb_nor_y1_4), - ISP3X_RAWAWB_XY_DETC_NOR_Y_4); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_4, - arg->sw_rawawb_big_x1_4), - ISP3X_RAWAWB_XY_DETC_BIG_X_4); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_4, - arg->sw_rawawb_big_y1_4), - ISP3X_RAWAWB_XY_DETC_BIG_Y_4); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_5, - arg->sw_rawawb_nor_x1_5), - ISP3X_RAWAWB_XY_DETC_NOR_X_5); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_5, - arg->sw_rawawb_nor_y1_5), - ISP3X_RAWAWB_XY_DETC_NOR_Y_5); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_5, - arg->sw_rawawb_big_x1_5), - ISP3X_RAWAWB_XY_DETC_BIG_X_5); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_5, - arg->sw_rawawb_big_y1_5), - ISP3X_RAWAWB_XY_DETC_BIG_Y_5); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_6, - arg->sw_rawawb_nor_x1_6), - ISP3X_RAWAWB_XY_DETC_NOR_X_6); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_6, - arg->sw_rawawb_nor_y1_6), - ISP3X_RAWAWB_XY_DETC_NOR_Y_6); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_6, - arg->sw_rawawb_big_x1_6), - ISP3X_RAWAWB_XY_DETC_BIG_X_6); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_6, - arg->sw_rawawb_big_y1_6), - ISP3X_RAWAWB_XY_DETC_BIG_Y_6); - - rkisp_iowrite32(params_vdev, - (arg->sw_rawawb_exc_wp_region0_excen0 & 0x1) << 0 | - (arg->sw_rawawb_exc_wp_region0_excen1 & 0x1) << 1 | - (arg->sw_rawawb_exc_wp_region0_measen & 0x1) << 2 | - (arg->sw_rawawb_exc_wp_region0_domain & 0x1) << 3 | - (arg->sw_rawawb_exc_wp_region1_excen0 & 0x1) << 4 | - (arg->sw_rawawb_exc_wp_region1_excen1 & 0x1) << 5 | - (arg->sw_rawawb_exc_wp_region1_measen & 0x1) << 6 | - (arg->sw_rawawb_exc_wp_region1_domain & 0x1) << 7 | - (arg->sw_rawawb_exc_wp_region2_excen0 & 0x1) << 8 | - (arg->sw_rawawb_exc_wp_region2_excen1 & 0x1) << 9 | - (arg->sw_rawawb_exc_wp_region2_measen & 0x1) << 10 | - (arg->sw_rawawb_exc_wp_region2_domain & 0x1) << 11 | - (arg->sw_rawawb_exc_wp_region3_excen0 & 0x1) << 12 | - (arg->sw_rawawb_exc_wp_region3_excen1 & 0x1) << 13 | - (arg->sw_rawawb_exc_wp_region3_measen & 0x1) << 14 | - (arg->sw_rawawb_exc_wp_region3_domain & 0x1) << 15 | - (arg->sw_rawawb_exc_wp_region4_excen0 & 0x1) << 16 | - (arg->sw_rawawb_exc_wp_region4_excen1 & 0x1) << 17 | - (arg->sw_rawawb_exc_wp_region4_domain & 0x1) << 19 | - (arg->sw_rawawb_exc_wp_region5_excen0 & 0x1) << 20 | - (arg->sw_rawawb_exc_wp_region5_excen1 & 0x1) << 21 | - (arg->sw_rawawb_exc_wp_region5_domain & 0x1) << 23 | - (arg->sw_rawawb_exc_wp_region6_excen0 & 0x1) << 24 | - (arg->sw_rawawb_exc_wp_region6_excen1 & 0x1) << 25 | - (arg->sw_rawawb_exc_wp_region6_domain & 0x1) << 27 | - (arg->sw_rawawb_multiwindow_en & 0x1) << 31, - ISP3X_RAWAWB_MULTIWINDOW_EXC_CTRL); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow0_h_offs, - arg->sw_rawawb_multiwindow0_v_offs), - ISP3X_RAWAWB_MULTIWINDOW0_OFFS); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow0_h_size, - arg->sw_rawawb_multiwindow0_v_size), - ISP3X_RAWAWB_MULTIWINDOW0_SIZE); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow1_h_offs, - arg->sw_rawawb_multiwindow1_v_offs), - ISP3X_RAWAWB_MULTIWINDOW1_OFFS); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow1_h_size, - arg->sw_rawawb_multiwindow1_v_size), - ISP3X_RAWAWB_MULTIWINDOW1_SIZE); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow2_h_offs, - arg->sw_rawawb_multiwindow2_v_offs), - ISP3X_RAWAWB_MULTIWINDOW2_OFFS); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow2_h_size, - arg->sw_rawawb_multiwindow2_v_size), - ISP3X_RAWAWB_MULTIWINDOW2_SIZE); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow3_h_offs, - arg->sw_rawawb_multiwindow3_v_offs), - ISP3X_RAWAWB_MULTIWINDOW3_OFFS); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow3_h_size, - arg->sw_rawawb_multiwindow3_v_size), - ISP3X_RAWAWB_MULTIWINDOW3_SIZE); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region0_xu0, - arg->sw_rawawb_exc_wp_region0_xu1), - ISP3X_RAWAWB_EXC_WP_REGION0_XU); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region0_yv0, - arg->sw_rawawb_exc_wp_region0_yv1), - ISP3X_RAWAWB_EXC_WP_REGION0_YV); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region1_xu0, - arg->sw_rawawb_exc_wp_region1_xu1), - ISP3X_RAWAWB_EXC_WP_REGION1_XU); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region1_yv0, - arg->sw_rawawb_exc_wp_region1_yv1), - ISP3X_RAWAWB_EXC_WP_REGION1_YV); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region2_xu0, - arg->sw_rawawb_exc_wp_region2_xu1), - ISP3X_RAWAWB_EXC_WP_REGION2_XU); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region2_yv0, - arg->sw_rawawb_exc_wp_region2_yv1), - ISP3X_RAWAWB_EXC_WP_REGION2_YV); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region3_xu0, - arg->sw_rawawb_exc_wp_region3_xu1), - ISP3X_RAWAWB_EXC_WP_REGION3_XU); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region3_yv0, - arg->sw_rawawb_exc_wp_region3_yv1), - ISP3X_RAWAWB_EXC_WP_REGION3_YV); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region4_xu0, - arg->sw_rawawb_exc_wp_region4_xu1), - ISP3X_RAWAWB_EXC_WP_REGION4_XU); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region4_yv0, - arg->sw_rawawb_exc_wp_region4_yv1), - ISP3X_RAWAWB_EXC_WP_REGION4_YV); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region5_xu0, - arg->sw_rawawb_exc_wp_region5_xu1), - ISP3X_RAWAWB_EXC_WP_REGION5_XU); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region5_yv0, - arg->sw_rawawb_exc_wp_region5_yv1), - ISP3X_RAWAWB_EXC_WP_REGION5_YV); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region6_xu0, - arg->sw_rawawb_exc_wp_region6_xu1), - ISP3X_RAWAWB_EXC_WP_REGION6_XU); - - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region6_yv0, - arg->sw_rawawb_exc_wp_region6_yv1), - ISP3X_RAWAWB_EXC_WP_REGION6_YV); + isp3_param_write(params_vdev, + (arg->sw_rawawb_blk_measure_enable & 0x1) | + (arg->sw_rawawb_blk_measure_mode & 0x1) << 1 | + (arg->sw_rawawb_blk_measure_xytype & 0x1) << 2 | + (arg->sw_rawawb_blk_rtdw_measure_en & 0x1) << 3 | + (arg->sw_rawawb_blk_measure_illu_idx & 0x7) << 4 | + (arg->sw_rawawb_blk_with_luma_wei_en & 0x1) << 8, + ISP3X_RAWAWB_BLK_CTRL, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_h_offs, arg->sw_rawawb_v_offs), + ISP3X_RAWAWB_WIN_OFFS, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_h_size, arg->sw_rawawb_v_size), + ISP3X_RAWAWB_WIN_SIZE, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_r_max, arg->sw_rawawb_g_max), + ISP3X_RAWAWB_LIMIT_RG_MAX, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_b_max, arg->sw_rawawb_y_max), + ISP3X_RAWAWB_LIMIT_BY_MAX, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_r_min, arg->sw_rawawb_g_min), + ISP3X_RAWAWB_LIMIT_RG_MIN, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_b_min, arg->sw_rawawb_y_min), + ISP3X_RAWAWB_LIMIT_BY_MIN, id); + + isp3_param_write(params_vdev, + (arg->sw_rawawb_wp_luma_wei_en0 & 0x1) | + (arg->sw_rawawb_wp_luma_wei_en1 & 0x1) << 1 | + (arg->sw_rawawb_wp_blk_wei_en0 & 0x1) << 2 | + (arg->sw_rawawb_wp_blk_wei_en1 & 0x1) << 3 | + (arg->sw_rawawb_wp_hist_xytype & 0x1) << 4, + ISP3X_RAWAWB_WEIGHT_CURVE_CTRL, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_wp_luma_weicurve_y0, + arg->sw_rawawb_wp_luma_weicurve_y1, + arg->sw_rawawb_wp_luma_weicurve_y2, + arg->sw_rawawb_wp_luma_weicurve_y3), + ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR03, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_wp_luma_weicurve_y4, + arg->sw_rawawb_wp_luma_weicurve_y5, + arg->sw_rawawb_wp_luma_weicurve_y6, + arg->sw_rawawb_wp_luma_weicurve_y7), + ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR47, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_wp_luma_weicurve_y8, + ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR8, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_wp_luma_weicurve_w0, + arg->sw_rawawb_wp_luma_weicurve_w1, + arg->sw_rawawb_wp_luma_weicurve_w2, + arg->sw_rawawb_wp_luma_weicurve_w3), + ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR03, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_wp_luma_weicurve_w4, + arg->sw_rawawb_wp_luma_weicurve_w5, + arg->sw_rawawb_wp_luma_weicurve_w6, + arg->sw_rawawb_wp_luma_weicurve_w7), + ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR47, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_wp_luma_weicurve_w8, + arg->sw_rawawb_pre_wbgain_inv_r), + ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR8, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_pre_wbgain_inv_g, + arg->sw_rawawb_pre_wbgain_inv_b), + ISP3X_RAWAWB_PRE_WBGAIN_INV, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_0, + arg->sw_rawawb_vertex0_v_0), + ISP3X_RAWAWB_UV_DETC_VERTEX0_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_0, + arg->sw_rawawb_vertex1_v_0), + ISP3X_RAWAWB_UV_DETC_VERTEX1_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_0, + arg->sw_rawawb_vertex2_v_0), + ISP3X_RAWAWB_UV_DETC_VERTEX2_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_0, + arg->sw_rawawb_vertex3_v_0), + ISP3X_RAWAWB_UV_DETC_VERTEX3_0, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope01_0, + ISP3X_RAWAWB_UV_DETC_ISLOPE01_0, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope12_0, + ISP3X_RAWAWB_UV_DETC_ISLOPE12_0, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope23_0, + ISP3X_RAWAWB_UV_DETC_ISLOPE23_0, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope30_0, + ISP3X_RAWAWB_UV_DETC_ISLOPE30_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_1, + arg->sw_rawawb_vertex0_v_1), + ISP3X_RAWAWB_UV_DETC_VERTEX0_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_1, + arg->sw_rawawb_vertex1_v_1), + ISP3X_RAWAWB_UV_DETC_VERTEX1_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_1, + arg->sw_rawawb_vertex2_v_1), + ISP3X_RAWAWB_UV_DETC_VERTEX2_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_1, + arg->sw_rawawb_vertex3_v_1), + ISP3X_RAWAWB_UV_DETC_VERTEX3_1, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope01_1, + ISP3X_RAWAWB_UV_DETC_ISLOPE01_1, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope12_1, + ISP3X_RAWAWB_UV_DETC_ISLOPE12_1, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope23_1, + ISP3X_RAWAWB_UV_DETC_ISLOPE23_1, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope30_1, + ISP3X_RAWAWB_UV_DETC_ISLOPE30_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_2, + arg->sw_rawawb_vertex0_v_2), + ISP3X_RAWAWB_UV_DETC_VERTEX0_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_2, + arg->sw_rawawb_vertex1_v_2), + ISP3X_RAWAWB_UV_DETC_VERTEX1_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_2, + arg->sw_rawawb_vertex2_v_2), + ISP3X_RAWAWB_UV_DETC_VERTEX2_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_2, + arg->sw_rawawb_vertex3_v_2), + ISP3X_RAWAWB_UV_DETC_VERTEX3_2, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope01_2, + ISP3X_RAWAWB_UV_DETC_ISLOPE01_2, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope12_2, + ISP3X_RAWAWB_UV_DETC_ISLOPE12_2, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope23_2, + ISP3X_RAWAWB_UV_DETC_ISLOPE23_2, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope30_2, + ISP3X_RAWAWB_UV_DETC_ISLOPE30_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_3, + arg->sw_rawawb_vertex0_v_3), + ISP3X_RAWAWB_UV_DETC_VERTEX0_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_3, + arg->sw_rawawb_vertex1_v_3), + ISP3X_RAWAWB_UV_DETC_VERTEX1_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_3, + arg->sw_rawawb_vertex2_v_3), + ISP3X_RAWAWB_UV_DETC_VERTEX2_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_3, + arg->sw_rawawb_vertex3_v_3), + ISP3X_RAWAWB_UV_DETC_VERTEX3_3, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope01_3, + ISP3X_RAWAWB_UV_DETC_ISLOPE01_3, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope12_3, + ISP3X_RAWAWB_UV_DETC_ISLOPE12_3, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope23_3, + ISP3X_RAWAWB_UV_DETC_ISLOPE23_3, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope30_3, + ISP3X_RAWAWB_UV_DETC_ISLOPE30_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_4, + arg->sw_rawawb_vertex0_v_4), + ISP3X_RAWAWB_UV_DETC_VERTEX0_4, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_4, + arg->sw_rawawb_vertex1_v_4), + ISP3X_RAWAWB_UV_DETC_VERTEX1_4, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_4, + arg->sw_rawawb_vertex2_v_4), + ISP3X_RAWAWB_UV_DETC_VERTEX2_4, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_4, + arg->sw_rawawb_vertex3_v_4), + ISP3X_RAWAWB_UV_DETC_VERTEX3_4, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope01_4, + ISP3X_RAWAWB_UV_DETC_ISLOPE01_4, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope12_4, + ISP3X_RAWAWB_UV_DETC_ISLOPE12_4, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope23_4, + ISP3X_RAWAWB_UV_DETC_ISLOPE23_4, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope30_4, + ISP3X_RAWAWB_UV_DETC_ISLOPE30_4, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_5, + arg->sw_rawawb_vertex0_v_5), + ISP3X_RAWAWB_UV_DETC_VERTEX0_5, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_5, + arg->sw_rawawb_vertex1_v_5), + ISP3X_RAWAWB_UV_DETC_VERTEX1_5, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_5, + arg->sw_rawawb_vertex2_v_5), + ISP3X_RAWAWB_UV_DETC_VERTEX2_5, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_5, + arg->sw_rawawb_vertex3_v_5), + ISP3X_RAWAWB_UV_DETC_VERTEX3_5, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope01_5, + ISP3X_RAWAWB_UV_DETC_ISLOPE01_5, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope12_5, + ISP3X_RAWAWB_UV_DETC_ISLOPE10_5, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope23_5, + ISP3X_RAWAWB_UV_DETC_ISLOPE23_5, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope30_5, + ISP3X_RAWAWB_UV_DETC_ISLOPE30_5, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex0_u_6, + arg->sw_rawawb_vertex0_v_6), + ISP3X_RAWAWB_UV_DETC_VERTEX0_6, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex1_u_6, + arg->sw_rawawb_vertex1_v_6), + ISP3X_RAWAWB_UV_DETC_VERTEX1_6, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex2_u_6, + arg->sw_rawawb_vertex2_v_6), + ISP3X_RAWAWB_UV_DETC_VERTEX2_6, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_vertex3_u_6, + arg->sw_rawawb_vertex3_v_6), + ISP3X_RAWAWB_UV_DETC_VERTEX3_6, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope01_6, + ISP3X_RAWAWB_UV_DETC_ISLOPE01_6, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope12_6, + ISP3X_RAWAWB_UV_DETC_ISLOPE10_6, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope23_6, + ISP3X_RAWAWB_UV_DETC_ISLOPE23_6, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_islope30_6, + ISP3X_RAWAWB_UV_DETC_ISLOPE30_6, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat0_y, + arg->sw_rawawb_rgb2ryuvmat1_y), + ISP3X_RAWAWB_YUV_RGB2ROTY_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat2_y, + arg->sw_rawawb_rgb2ryuvofs_y), + ISP3X_RAWAWB_YUV_RGB2ROTY_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat0_u, + arg->sw_rawawb_rgb2ryuvmat1_u), + ISP3X_RAWAWB_YUV_RGB2ROTU_0, id); + + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat2_u, + arg->sw_rawawb_rgb2ryuvofs_u), + ISP3X_RAWAWB_YUV_RGB2ROTU_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat0_v, + arg->sw_rawawb_rgb2ryuvmat1_v), + ISP3X_RAWAWB_YUV_RGB2ROTV_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_rgb2ryuvmat2_v, + arg->sw_rawawb_rgb2ryuvofs_v), + ISP3X_RAWAWB_YUV_RGB2ROTV_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls0_y, + arg->sw_rawawb_vec_x21_ls0_y), + ISP3X_RAWAWB_YUV_X_COOR_Y_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls0_u, + arg->sw_rawawb_vec_x21_ls0_u), + ISP3X_RAWAWB_YUV_X_COOR_U_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls0_v, + arg->sw_rawawb_vec_x21_ls0_v), + ISP3X_RAWAWB_YUV_X_COOR_V_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_dis_x1x2_ls0, + 0, + arg->sw_rawawb_rotu0_ls0, + arg->sw_rawawb_rotu1_ls0), + ISP3X_RAWAWB_YUV_X1X2_DIS_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_rotu2_ls0, + arg->sw_rawawb_rotu3_ls0, + arg->sw_rawawb_rotu4_ls0, + arg->sw_rawawb_rotu5_ls0), + ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th0_ls0, + arg->sw_rawawb_th1_ls0), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th2_ls0, + arg->sw_rawawb_th3_ls0), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th4_ls0, + arg->sw_rawawb_th5_ls0), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls1_y, + arg->sw_rawawb_vec_x21_ls1_y), + ISP3X_RAWAWB_YUV_X_COOR_Y_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls1_u, + arg->sw_rawawb_vec_x21_ls1_u), + ISP3X_RAWAWB_YUV_X_COOR_U_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls1_v, + arg->sw_rawawb_vec_x21_ls1_v), + ISP3X_RAWAWB_YUV_X_COOR_V_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_dis_x1x2_ls1, + 0, + arg->sw_rawawb_rotu0_ls1, + arg->sw_rawawb_rotu1_ls1), + ISP3X_RAWAWB_YUV_X1X2_DIS_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_rotu2_ls1, + arg->sw_rawawb_rotu3_ls1, + arg->sw_rawawb_rotu4_ls1, + arg->sw_rawawb_rotu5_ls1), + ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th0_ls1, + arg->sw_rawawb_th1_ls1), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th2_ls1, + arg->sw_rawawb_th3_ls1), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th4_ls1, + arg->sw_rawawb_th5_ls1), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls2_y, + arg->sw_rawawb_vec_x21_ls2_y), + ISP3X_RAWAWB_YUV_X_COOR_Y_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls2_u, + arg->sw_rawawb_vec_x21_ls2_u), + ISP3X_RAWAWB_YUV_X_COOR_U_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls2_v, + arg->sw_rawawb_vec_x21_ls2_v), + ISP3X_RAWAWB_YUV_X_COOR_V_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_dis_x1x2_ls2, + 0, + arg->sw_rawawb_rotu0_ls2, + arg->sw_rawawb_rotu1_ls2), + ISP3X_RAWAWB_YUV_X1X2_DIS_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_rotu2_ls2, + arg->sw_rawawb_rotu3_ls2, + arg->sw_rawawb_rotu4_ls2, + arg->sw_rawawb_rotu5_ls2), + ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th0_ls2, + arg->sw_rawawb_th1_ls2), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th2_ls2, + arg->sw_rawawb_th3_ls2), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th4_ls2, + arg->sw_rawawb_th5_ls2), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls3_y, + arg->sw_rawawb_vec_x21_ls3_y), + ISP3X_RAWAWB_YUV_X_COOR_Y_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls3_u, + arg->sw_rawawb_vec_x21_ls3_u), + ISP3X_RAWAWB_YUV_X_COOR_U_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_coor_x1_ls3_v, + arg->sw_rawawb_vec_x21_ls3_v), + ISP3X_RAWAWB_YUV_X_COOR_V_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_dis_x1x2_ls3, + 0, + arg->sw_rawawb_rotu0_ls3, + arg->sw_rawawb_rotu1_ls3), + ISP3X_RAWAWB_YUV_X1X2_DIS_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->sw_rawawb_rotu2_ls3, + arg->sw_rawawb_rotu3_ls3, + arg->sw_rawawb_rotu4_ls3, + arg->sw_rawawb_rotu5_ls3), + ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th0_ls3, + arg->sw_rawawb_th1_ls3), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th2_ls3, + arg->sw_rawawb_th3_ls3), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_th4_ls3, + arg->sw_rawawb_th5_ls3), + ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_wt0, + arg->sw_rawawb_wt1), + ISP3X_RAWAWB_RGB2XY_WT01, id); + + isp3_param_write(params_vdev, + arg->sw_rawawb_wt2, + ISP3X_RAWAWB_RGB2XY_WT2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_mat0_x, + arg->sw_rawawb_mat0_y), + ISP3X_RAWAWB_RGB2XY_MAT0_XY, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_mat1_x, + arg->sw_rawawb_mat1_y), + ISP3X_RAWAWB_RGB2XY_MAT1_XY, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_mat2_x, + arg->sw_rawawb_mat2_y), + ISP3X_RAWAWB_RGB2XY_MAT2_XY, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_0, + arg->sw_rawawb_nor_x1_0), + ISP3X_RAWAWB_XY_DETC_NOR_X_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_0, + arg->sw_rawawb_nor_y1_0), + ISP3X_RAWAWB_XY_DETC_NOR_Y_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_0, + arg->sw_rawawb_big_x1_0), + ISP3X_RAWAWB_XY_DETC_BIG_X_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_0, + arg->sw_rawawb_big_y1_0), + ISP3X_RAWAWB_XY_DETC_BIG_Y_0, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_1, + arg->sw_rawawb_nor_x1_1), + ISP3X_RAWAWB_XY_DETC_NOR_X_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_1, + arg->sw_rawawb_nor_y1_1), + ISP3X_RAWAWB_XY_DETC_NOR_Y_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_1, + arg->sw_rawawb_big_x1_1), + ISP3X_RAWAWB_XY_DETC_BIG_X_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_1, + arg->sw_rawawb_big_y1_1), + ISP3X_RAWAWB_XY_DETC_BIG_Y_1, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_2, + arg->sw_rawawb_nor_x1_2), + ISP3X_RAWAWB_XY_DETC_NOR_X_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_2, + arg->sw_rawawb_nor_y1_2), + ISP3X_RAWAWB_XY_DETC_NOR_Y_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_2, + arg->sw_rawawb_big_x1_2), + ISP3X_RAWAWB_XY_DETC_BIG_X_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_2, + arg->sw_rawawb_big_y1_2), + ISP3X_RAWAWB_XY_DETC_BIG_Y_2, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_3, + arg->sw_rawawb_nor_x1_3), + ISP3X_RAWAWB_XY_DETC_NOR_X_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_3, + arg->sw_rawawb_nor_y1_3), + ISP3X_RAWAWB_XY_DETC_NOR_Y_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_3, + arg->sw_rawawb_big_x1_3), + ISP3X_RAWAWB_XY_DETC_BIG_X_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_3, + arg->sw_rawawb_big_y1_3), + ISP3X_RAWAWB_XY_DETC_BIG_Y_3, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_4, + arg->sw_rawawb_nor_x1_4), + ISP3X_RAWAWB_XY_DETC_NOR_X_4, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_4, + arg->sw_rawawb_nor_y1_4), + ISP3X_RAWAWB_XY_DETC_NOR_Y_4, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_4, + arg->sw_rawawb_big_x1_4), + ISP3X_RAWAWB_XY_DETC_BIG_X_4, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_4, + arg->sw_rawawb_big_y1_4), + ISP3X_RAWAWB_XY_DETC_BIG_Y_4, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_5, + arg->sw_rawawb_nor_x1_5), + ISP3X_RAWAWB_XY_DETC_NOR_X_5, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_5, + arg->sw_rawawb_nor_y1_5), + ISP3X_RAWAWB_XY_DETC_NOR_Y_5, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_5, + arg->sw_rawawb_big_x1_5), + ISP3X_RAWAWB_XY_DETC_BIG_X_5, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_5, + arg->sw_rawawb_big_y1_5), + ISP3X_RAWAWB_XY_DETC_BIG_Y_5, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_x0_6, + arg->sw_rawawb_nor_x1_6), + ISP3X_RAWAWB_XY_DETC_NOR_X_6, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_nor_y0_6, + arg->sw_rawawb_nor_y1_6), + ISP3X_RAWAWB_XY_DETC_NOR_Y_6, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_x0_6, + arg->sw_rawawb_big_x1_6), + ISP3X_RAWAWB_XY_DETC_BIG_X_6, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_big_y0_6, + arg->sw_rawawb_big_y1_6), + ISP3X_RAWAWB_XY_DETC_BIG_Y_6, id); + + isp3_param_write(params_vdev, + (arg->sw_rawawb_exc_wp_region0_excen0 & 0x1) << 0 | + (arg->sw_rawawb_exc_wp_region0_excen1 & 0x1) << 1 | + (arg->sw_rawawb_exc_wp_region0_measen & 0x1) << 2 | + (arg->sw_rawawb_exc_wp_region0_domain & 0x1) << 3 | + (arg->sw_rawawb_exc_wp_region1_excen0 & 0x1) << 4 | + (arg->sw_rawawb_exc_wp_region1_excen1 & 0x1) << 5 | + (arg->sw_rawawb_exc_wp_region1_measen & 0x1) << 6 | + (arg->sw_rawawb_exc_wp_region1_domain & 0x1) << 7 | + (arg->sw_rawawb_exc_wp_region2_excen0 & 0x1) << 8 | + (arg->sw_rawawb_exc_wp_region2_excen1 & 0x1) << 9 | + (arg->sw_rawawb_exc_wp_region2_measen & 0x1) << 10 | + (arg->sw_rawawb_exc_wp_region2_domain & 0x1) << 11 | + (arg->sw_rawawb_exc_wp_region3_excen0 & 0x1) << 12 | + (arg->sw_rawawb_exc_wp_region3_excen1 & 0x1) << 13 | + (arg->sw_rawawb_exc_wp_region3_measen & 0x1) << 14 | + (arg->sw_rawawb_exc_wp_region3_domain & 0x1) << 15 | + (arg->sw_rawawb_exc_wp_region4_excen0 & 0x1) << 16 | + (arg->sw_rawawb_exc_wp_region4_excen1 & 0x1) << 17 | + (arg->sw_rawawb_exc_wp_region4_domain & 0x1) << 19 | + (arg->sw_rawawb_exc_wp_region5_excen0 & 0x1) << 20 | + (arg->sw_rawawb_exc_wp_region5_excen1 & 0x1) << 21 | + (arg->sw_rawawb_exc_wp_region5_domain & 0x1) << 23 | + (arg->sw_rawawb_exc_wp_region6_excen0 & 0x1) << 24 | + (arg->sw_rawawb_exc_wp_region6_excen1 & 0x1) << 25 | + (arg->sw_rawawb_exc_wp_region6_domain & 0x1) << 27 | + (arg->sw_rawawb_multiwindow_en & 0x1) << 31, + ISP3X_RAWAWB_MULTIWINDOW_EXC_CTRL, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow0_h_offs, + arg->sw_rawawb_multiwindow0_v_offs), + ISP3X_RAWAWB_MULTIWINDOW0_OFFS, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow0_h_size, + arg->sw_rawawb_multiwindow0_v_size), + ISP3X_RAWAWB_MULTIWINDOW0_SIZE, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow1_h_offs, + arg->sw_rawawb_multiwindow1_v_offs), + ISP3X_RAWAWB_MULTIWINDOW1_OFFS, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow1_h_size, + arg->sw_rawawb_multiwindow1_v_size), + ISP3X_RAWAWB_MULTIWINDOW1_SIZE, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow2_h_offs, + arg->sw_rawawb_multiwindow2_v_offs), + ISP3X_RAWAWB_MULTIWINDOW2_OFFS, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow2_h_size, + arg->sw_rawawb_multiwindow2_v_size), + ISP3X_RAWAWB_MULTIWINDOW2_SIZE, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow3_h_offs, + arg->sw_rawawb_multiwindow3_v_offs), + ISP3X_RAWAWB_MULTIWINDOW3_OFFS, id); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_multiwindow3_h_size, + arg->sw_rawawb_multiwindow3_v_size), + ISP3X_RAWAWB_MULTIWINDOW3_SIZE, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region0_xu0, + arg->sw_rawawb_exc_wp_region0_xu1), + ISP3X_RAWAWB_EXC_WP_REGION0_XU, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region0_yv0, + arg->sw_rawawb_exc_wp_region0_yv1), + ISP3X_RAWAWB_EXC_WP_REGION0_YV, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region1_xu0, + arg->sw_rawawb_exc_wp_region1_xu1), + ISP3X_RAWAWB_EXC_WP_REGION1_XU, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region1_yv0, + arg->sw_rawawb_exc_wp_region1_yv1), + ISP3X_RAWAWB_EXC_WP_REGION1_YV, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region2_xu0, + arg->sw_rawawb_exc_wp_region2_xu1), + ISP3X_RAWAWB_EXC_WP_REGION2_XU, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region2_yv0, + arg->sw_rawawb_exc_wp_region2_yv1), + ISP3X_RAWAWB_EXC_WP_REGION2_YV, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region3_xu0, + arg->sw_rawawb_exc_wp_region3_xu1), + ISP3X_RAWAWB_EXC_WP_REGION3_XU, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region3_yv0, + arg->sw_rawawb_exc_wp_region3_yv1), + ISP3X_RAWAWB_EXC_WP_REGION3_YV, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region4_xu0, + arg->sw_rawawb_exc_wp_region4_xu1), + ISP3X_RAWAWB_EXC_WP_REGION4_XU, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region4_yv0, + arg->sw_rawawb_exc_wp_region4_yv1), + ISP3X_RAWAWB_EXC_WP_REGION4_YV, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region5_xu0, + arg->sw_rawawb_exc_wp_region5_xu1), + ISP3X_RAWAWB_EXC_WP_REGION5_XU, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region5_yv0, + arg->sw_rawawb_exc_wp_region5_yv1), + ISP3X_RAWAWB_EXC_WP_REGION5_YV, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region6_xu0, + arg->sw_rawawb_exc_wp_region6_xu1), + ISP3X_RAWAWB_EXC_WP_REGION6_XU, id); + + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->sw_rawawb_exc_wp_region6_yv0, + arg->sw_rawawb_exc_wp_region6_yv1), + ISP3X_RAWAWB_EXC_WP_REGION6_YV, id); for (i = 0; i < ISP3X_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, - ISP3X_RAWAWB_WRAM_DATA_BASE); + 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); } /* avoid to override the old enable value */ - value = rkisp_ioread32(params_vdev, ISP3X_RAWAWB_CTRL); + value = isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id); value &= ISP3X_MODULE_EN; - rkisp_iowrite32(params_vdev, - value | - (arg->sw_rawawb_uv_en0 & 0x1) << 1 | - (arg->sw_rawawb_xy_en0 & 0x1) << 2 | - (arg->sw_rawawb_3dyuv_en0 & 0x1) << 3 | - (arg->sw_rawawb_3dyuv_ls_idx0 & 0x7) << 4 | - (arg->sw_rawawb_3dyuv_ls_idx1 & 0x7) << 7 | - (arg->sw_rawawb_3dyuv_ls_idx2 & 0x7) << 10 | - (arg->sw_rawawb_3dyuv_ls_idx3 & 0x7) << 13 | - (arg->sw_rawawb_wind_size & 0x1) << 18 | - (arg->sw_rawlsc_bypass_en & 0x1) << 19 | - (arg->sw_rawawb_light_num & 0x7) << 20 | - (arg->sw_rawawb_uv_en1 & 0x1) << 24 | - (arg->sw_rawawb_xy_en1 & 0x1) << 25 | - (arg->sw_rawawb_3dyuv_en1 & 0x1) << 26, - ISP3X_RAWAWB_CTRL); + isp3_param_write(params_vdev, + value | + (arg->sw_rawawb_uv_en0 & 0x1) << 1 | + (arg->sw_rawawb_xy_en0 & 0x1) << 2 | + (arg->sw_rawawb_3dyuv_en0 & 0x1) << 3 | + (arg->sw_rawawb_3dyuv_ls_idx0 & 0x7) << 4 | + (arg->sw_rawawb_3dyuv_ls_idx1 & 0x7) << 7 | + (arg->sw_rawawb_3dyuv_ls_idx2 & 0x7) << 10 | + (arg->sw_rawawb_3dyuv_ls_idx3 & 0x7) << 13 | + (arg->sw_rawawb_wind_size & 0x1) << 18 | + (arg->sw_rawlsc_bypass_en & 0x1) << 19 | + (arg->sw_rawawb_light_num & 0x7) << 20 | + (arg->sw_rawawb_uv_en1 & 0x1) << 24 | + (arg->sw_rawawb_xy_en1 & 0x1) << 25 | + (arg->sw_rawawb_3dyuv_en1 & 0x1) << 26, + ISP3X_RAWAWB_CTRL, id); - value = rkisp_ioread32(params_vdev, ISP3X_VI_ISP_PATH); + value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id); value &= ~(ISP3X_RAWAWB_SEL(3)); value |= ISP3X_RAWAWB_SEL(arg->rawawb_sel); - rkisp_iowrite32(params_vdev, value, ISP3X_VI_ISP_PATH); + isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id); } static void -isp_rawawb_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawawb_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 awb_ctrl; - awb_ctrl = rkisp_ioread32(params_vdev, ISP3X_RAWAWB_CTRL); + awb_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id); awb_ctrl &= ~ISP3X_REG_WR_MASK; if (en) awb_ctrl |= ISP3X_MODULE_EN; else awb_ctrl &= ~ISP3X_MODULE_EN; - rkisp_iowrite32(params_vdev, awb_ctrl, ISP3X_RAWAWB_CTRL); + isp3_param_write(params_vdev, awb_ctrl, ISP3X_RAWAWB_CTRL, id); } static void isp_rawhstlite_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawhistlite_cfg *arg) + const struct isp2x_rawhistlite_cfg *arg, u32 id) { u32 i; u32 value; @@ -2209,62 +2292,62 @@ isp_rawhstlite_config(struct rkisp_isp_params_vdev *params_vdev, u32 block_hsize, block_vsize; /* avoid to override the old enable value */ - hist_ctrl = rkisp_ioread32(params_vdev, ISP3X_RAWHIST_LITE_CTRL); + hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL, id); hist_ctrl &= ISP3X_RAWHIST_EN; hist_ctrl = hist_ctrl | ISP3X_RAWHIST_MODE(arg->mode) | ISP3X_RAWHIST_DATASEL(arg->data_sel) | ISP3X_RAWHIST_WATERLINE(arg->waterline) | ISP3X_RAWHIST_STEPSIZE(arg->stepsize); - rkisp_iowrite32(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL); + isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL, id); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs), - ISP3X_RAWHIST_LITE_OFFS); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs), + ISP3X_RAWHIST_LITE_OFFS, id); block_hsize = arg->win.h_size / ISP3X_RAWHISTLITE_ROW_NUM - 1; block_vsize = arg->win.v_size / ISP3X_RAWHISTLITE_COLUMN_NUM - 1; block_hsize &= 0xFFFE; block_vsize &= 0xFFFE; - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(block_hsize, block_vsize), - ISP3X_RAWHIST_LITE_SIZE); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(block_hsize, block_vsize), + ISP3X_RAWHIST_LITE_SIZE, id); - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->rcc, arg->gcc, arg->bcc, arg->off), - ISP3X_RAWHIST_LITE_RAW2Y_CC); + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->rcc, arg->gcc, arg->bcc, arg->off), + ISP3X_RAWHIST_LITE_RAW2Y_CC, id); for (i = 0; i < (ISP3X_RAWHISTLITE_WEIGHT_REG_SIZE / 4); i++) { value = ISP_PACK_4BYTE(arg->weight[4 * i + 0], arg->weight[4 * i + 1], arg->weight[4 * i + 2], arg->weight[4 * i + 3]); - rkisp_iowrite32(params_vdev, value, - ISP3X_RAWHIST_LITE_WEIGHT + 4 * i); + isp3_param_write(params_vdev, value, + ISP3X_RAWHIST_LITE_WEIGHT + 4 * i, id); } value = ISP_PACK_4BYTE(arg->weight[4 * i + 0], 0, 0, 0); - rkisp_iowrite32(params_vdev, value, - ISP3X_RAWHIST_LITE_WEIGHT + 4 * i); + isp3_param_write(params_vdev, value, + ISP3X_RAWHIST_LITE_WEIGHT + 4 * i, id); } static void -isp_rawhstlite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawhstlite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 hist_ctrl; - hist_ctrl = rkisp_ioread32(params_vdev, ISP3X_RAWHIST_LITE_CTRL); + hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL, id); hist_ctrl &= ~(ISP3X_MODULE_EN | ISP3X_REG_WR_MASK); if (en) hist_ctrl |= ISP3X_MODULE_EN; - rkisp_iowrite32(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL); + isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL, id); } static void isp_rawhstbig_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawhistbig_cfg *arg, u32 blk_no) + const struct isp2x_rawhistbig_cfg *arg, u32 blk_no, u32 id) { u32 i, j; u32 value; @@ -2291,7 +2374,7 @@ isp_rawhstbig_config(struct rkisp_isp_params_vdev *params_vdev, wnd_num_idx = arg->wnd_num; memset(weight15x15, 0x00, sizeof(weight15x15)); /* avoid to override the old enable value */ - hist_ctrl = rkisp_ioread32(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL); + hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id); hist_ctrl &= ISP3X_RAWHIST_EN; hist_ctrl = hist_ctrl | ISP3X_RAWHIST_MODE(arg->mode) | @@ -2299,23 +2382,23 @@ isp_rawhstbig_config(struct rkisp_isp_params_vdev *params_vdev, ISP3X_RAWHIST_WATERLINE(arg->waterline) | ISP3X_RAWHIST_WND_NUM(arg->wnd_num) | ISP3X_RAWHIST_STEPSIZE(arg->stepsize); - rkisp_iowrite32(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL); + isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL, id); - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs), - addr + ISP3X_RAWHIST_BIG_OFFS); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs), + addr + ISP3X_RAWHIST_BIG_OFFS, id); block_hsize = arg->win.h_size / hist_wnd_num[wnd_num_idx] - 1; block_vsize = arg->win.v_size / hist_wnd_num[wnd_num_idx] - 1; block_hsize &= 0xFFFE; block_vsize &= 0xFFFE; - rkisp_iowrite32(params_vdev, - ISP_PACK_2SHORT(block_hsize, block_vsize), - addr + ISP3X_RAWHIST_BIG_SIZE); + isp3_param_write(params_vdev, + ISP_PACK_2SHORT(block_hsize, block_vsize), + addr + ISP3X_RAWHIST_BIG_SIZE, id); - rkisp_iowrite32(params_vdev, - ISP_PACK_4BYTE(arg->rcc, arg->gcc, arg->bcc, arg->off), - addr + ISP3X_RAWHIST_BIG_RAW2Y_CC); + isp3_param_write(params_vdev, + ISP_PACK_4BYTE(arg->rcc, arg->gcc, arg->bcc, arg->off), + addr + ISP3X_RAWHIST_BIG_RAW2Y_CC, id); for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) { for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) { @@ -2324,7 +2407,7 @@ isp_rawhstbig_config(struct rkisp_isp_params_vdev *params_vdev, } } - rkisp_iowrite32(params_vdev, ISP3X_RAWHIST_RAM_EN, ISP3X_RAWHIST_BIG_WRAM_CTRL); + isp3_param_write(params_vdev, ISP3X_RAWHIST_RAM_EN, ISP3X_RAWHIST_BIG_WRAM_CTRL, id); hist_weight_num = ISP3X_RAWHISTBIG_WEIGHT_REG_SIZE; for (i = 0; i < (hist_weight_num / 5); i++) { value = (weight15x15[5 * i + 0] & 0x3f) | @@ -2332,14 +2415,14 @@ isp_rawhstbig_config(struct rkisp_isp_params_vdev *params_vdev, (weight15x15[5 * i + 2] & 0x3f) << 12 | (weight15x15[5 * i + 3] & 0x3f) << 18 | (weight15x15[5 * i + 4] & 0x3f) << 24; - rkisp_iowrite32(params_vdev, value, - addr + ISP3X_RAWHIST_BIG_WEIGHT_BASE); + isp3_param_write(params_vdev, value, + addr + ISP3X_RAWHIST_BIG_WEIGHT_BASE, id); } } static void isp_rawhstbig_enable(struct rkisp_isp_params_vdev *params_vdev, - bool en, u32 blk_no) + bool en, u32 blk_no, u32 id) { u32 hist_ctrl; u32 addr; @@ -2357,110 +2440,112 @@ isp_rawhstbig_enable(struct rkisp_isp_params_vdev *params_vdev, break; } - hist_ctrl = rkisp_ioread32(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL); + hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id); hist_ctrl &= ~(ISP3X_RAWHIST_EN | ISP3X_REG_WR_MASK); if (en) hist_ctrl |= ISP3X_RAWHIST_EN; - rkisp_iowrite32(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL); + isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL, id); } static void isp_rawhst1_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawhistbig_cfg *arg) + const struct isp2x_rawhistbig_cfg *arg, u32 id) { - isp_rawhstbig_config(params_vdev, arg, 1); + isp_rawhstbig_config(params_vdev, arg, 1, id); } static void -isp_rawhst1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawhst1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { - isp_rawhstbig_enable(params_vdev, en, 1); + isp_rawhstbig_enable(params_vdev, en, 1, id); } static void isp_rawhst2_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawhistbig_cfg *arg) + const struct isp2x_rawhistbig_cfg *arg, u32 id) { - isp_rawhstbig_config(params_vdev, arg, 2); + isp_rawhstbig_config(params_vdev, arg, 2, id); } static void -isp_rawhst2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawhst2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { - isp_rawhstbig_enable(params_vdev, en, 2); + isp_rawhstbig_enable(params_vdev, en, 2, id); } static void isp_rawhst3_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawhistbig_cfg *arg) + const struct isp2x_rawhistbig_cfg *arg, u32 id) { - isp_rawhstbig_config(params_vdev, arg, 0); + isp_rawhstbig_config(params_vdev, arg, 0, id); } static void -isp_rawhst3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_rawhst3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { - isp_rawhstbig_enable(params_vdev, en, 0); + isp_rawhstbig_enable(params_vdev, en, 0, id); } static void isp_hdrmge_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_hdrmge_cfg *arg, enum rkisp_params_type type) + const struct isp3x_hdrmge_cfg *arg, + enum rkisp_params_type type, u32 id) { u32 value; int i; if (type == RKISP_PARAMS_SHD || type == RKISP_PARAMS_ALL) { value = ISP_PACK_2SHORT(arg->gain0, arg->gain0_inv); - rkisp_iowrite32(params_vdev, value, ISP3X_HDRMGE_GAIN0); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN0, id); value = ISP_PACK_2SHORT(arg->gain1, arg->gain1_inv); - rkisp_iowrite32(params_vdev, value, ISP3X_HDRMGE_GAIN1); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN1, id); value = arg->gain2; - rkisp_iowrite32(params_vdev, value, ISP3X_HDRMGE_GAIN2); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN2, id); if (arg->s_base) { value = rkisp_read_reg_cache(params_vdev->dev, ISP3X_HDRMGE_CTRL); value |= BIT(1); - rkisp_iowrite32(params_vdev, value, ISP3X_HDRMGE_CTRL); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_CTRL, id); } } if (type == RKISP_PARAMS_IMD || type == RKISP_PARAMS_ALL) { value = ISP_PACK_4BYTE(arg->ms_dif_0p8, arg->ms_diff_0p15, arg->lm_dif_0p9, arg->lm_dif_0p15); - rkisp_iowrite32(params_vdev, value, ISP3X_HDRMGE_LIGHTZ); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LIGHTZ, id); value = (arg->ms_scl & 0x7ff) | (arg->ms_thd0 & 0x3ff) << 12 | (arg->ms_thd1 & 0x3ff) << 22; - rkisp_iowrite32(params_vdev, value, ISP3X_HDRMGE_MS_DIFF); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_MS_DIFF, id); value = (arg->lm_scl & 0x7ff) | (arg->lm_thd0 & 0x3ff) << 12 | (arg->lm_thd1 & 0x3ff) << 22; - rkisp_iowrite32(params_vdev, value, ISP3X_HDRMGE_LM_DIFF); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LM_DIFF, id); for (i = 0; i < ISP3X_HDRMGE_L_CURVE_NUM; i++) { value = ISP_PACK_2SHORT(arg->curve.curve_0[i], arg->curve.curve_1[i]); - rkisp_iowrite32(params_vdev, value, ISP3X_HDRMGE_DIFF_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_DIFF_Y0 + 4 * i, id); } for (i = 0; i < ISP3X_HDRMGE_E_CURVE_NUM; i++) { value = arg->e_y[i]; - rkisp_iowrite32(params_vdev, value, ISP3X_HDRMGE_OVER_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_HDRMGE_OVER_Y0 + 4 * i, id); } } } static void -isp_hdrmge_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_hdrmge_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { } static void isp_hdrdrc_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_drc_cfg *arg, enum rkisp_params_type type) + const struct isp3x_drc_cfg *arg, + enum rkisp_params_type type, u32 id) { u32 i, value; @@ -2470,86 +2555,86 @@ isp_hdrdrc_config(struct rkisp_isp_params_vdev *params_vdev, value = (arg->offset_pow2 & 0x0F) << 28 | (arg->compres_scl & 0x1FFF) << 14 | (arg->position & 0x03FFF); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_CTRL1); + isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL1, id); value = (arg->delta_scalein & 0xFF) << 24 | (arg->hpdetail_ratio & 0xFFF) << 12 | (arg->lpdetail_ratio & 0xFFF); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_LPRATIO); + isp3_param_write(params_vdev, value, ISP3X_DRC_LPRATIO, id); value = ISP_PACK_4BYTE(arg->bilat_wt_off, 0, arg->weipre_frame, arg->weicur_pix); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_EXPLRATIO); + isp3_param_write(params_vdev, value, ISP3X_DRC_EXPLRATIO, id); value = (arg->force_sgm_inv0 & 0xFFFF) << 16 | (arg->motion_scl & 0xFF) << 8 | (arg->edge_scl & 0xFF); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_SIGMA); + isp3_param_write(params_vdev, value, ISP3X_DRC_SIGMA, id); value = ISP_PACK_2SHORT(arg->space_sgm_inv0, arg->space_sgm_inv1); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_SPACESGM); + isp3_param_write(params_vdev, value, ISP3X_DRC_SPACESGM, id); value = ISP_PACK_2SHORT(arg->range_sgm_inv0, arg->range_sgm_inv1); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_RANESGM); + isp3_param_write(params_vdev, value, ISP3X_DRC_RANESGM, id); value = (arg->weig_bilat & 0x1f) | (arg->weig_maxl & 0x1f) << 8 | (arg->bilat_soft_thd & 0x3fff) << 16; if (arg->enable_soft_thd) value |= BIT(31); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_BILAT); + isp3_param_write(params_vdev, value, ISP3X_DRC_BILAT, id); for (i = 0; i < ISP3X_DRC_Y_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->gain_y[2 * i], arg->gain_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i, id); } value = ISP_PACK_2SHORT(arg->gain_y[2 * i], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i, id); for (i = 0; i < ISP3X_DRC_Y_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->compres_y[2 * i], arg->compres_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i, id); } value = ISP_PACK_2SHORT(arg->compres_y[2 * i], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i, id); for (i = 0; i < ISP3X_DRC_Y_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->scale_y[2 * i], arg->scale_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i, id); } value = ISP_PACK_2SHORT(arg->scale_y[2 * i], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i, id); value = ISP_PACK_2SHORT(arg->min_ogain, arg->iir_weight); - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_IIRWG_GAIN); + isp3_param_write(params_vdev, value, ISP3X_DRC_IIRWG_GAIN, id); } static void -isp_hdrdrc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_hdrdrc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 value; bool real_en; - value = rkisp_ioread32(params_vdev, ISP3X_DRC_CTRL0); + value = isp3_param_read(params_vdev, ISP3X_DRC_CTRL0, id); real_en = !!(value & ISP3X_MODULE_EN); if ((en && real_en) || (!en && !real_en)) return; if (en) { value |= ISP3X_MODULE_EN; - rkisp_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, - ISP3X_ADRC_FST_FRAME, ISP3X_ADRC_FST_FRAME, false); + isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1, + ISP3X_ADRC_FST_FRAME, id); } else { value = 0; isp_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(12)); } - rkisp_iowrite32(params_vdev, value, ISP3X_DRC_CTRL0); + isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL0, id); } static void isp_gic_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_gic_cfg *arg) + const struct isp21_gic_cfg *arg, u32 id) { u32 value; s32 i; @@ -2557,12 +2642,12 @@ isp_gic_config(struct rkisp_isp_params_vdev *params_vdev, value = (arg->regmingradthrdark2 & 0x03FF) << 20 | (arg->regmingradthrdark1 & 0x03FF) << 10 | (arg->regminbusythre & 0x03FF); - rkisp_iowrite32(params_vdev, value, ISP3X_GIC_DIFF_PARA1); + isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA1, id); value = (arg->regdarkthre & 0x07FF) << 21 | (arg->regmaxcorvboth & 0x03FF) << 11 | (arg->regdarktthrehi & 0x07FF); - rkisp_iowrite32(params_vdev, value, ISP3X_GIC_DIFF_PARA2); + isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA2, id); value = (arg->regkgrad2dark & 0x0F) << 28 | (arg->regkgrad1dark & 0x0F) << 24 | @@ -2571,45 +2656,45 @@ isp_gic_config(struct rkisp_isp_params_vdev *params_vdev, (arg->regkgrad2 & 0x0F) << 8 | (arg->regkgrad1 & 0x0F) << 4 | (arg->reggbthre & 0x0F); - rkisp_iowrite32(params_vdev, value, ISP3X_GIC_DIFF_PARA3); + isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA3, id); value = (arg->regmaxcorv & 0x03FF) << 20 | (arg->regmingradthr2 & 0x03FF) << 10 | (arg->regmingradthr1 & 0x03FF); - rkisp_iowrite32(params_vdev, value, ISP3X_GIC_DIFF_PARA4); + isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA4, id); value = (arg->gr_ratio & 0x03) << 28 | (arg->noise_scale & 0x7F) << 12 | (arg->noise_base & 0xFFF); - rkisp_iowrite32(params_vdev, value, ISP3X_GIC_NOISE_PARA1); + isp3_param_write(params_vdev, value, ISP3X_GIC_NOISE_PARA1, id); - rkisp_iowrite32(params_vdev, arg->diff_clip, ISP3X_GIC_NOISE_PARA2); + isp3_param_write(params_vdev, arg->diff_clip, ISP3X_GIC_NOISE_PARA2, id); for (i = 0; i < ISP3X_GIC_SIGMA_Y_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->sigma_y[2 * i], arg->sigma_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i, id); } value = ISP_PACK_2SHORT(arg->sigma_y[2 * i], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i, id); } static void -isp_gic_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_gic_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 value = 0; if (en) value |= ISP3X_MODULE_EN; - rkisp_iowrite32(params_vdev, value, ISP3X_GIC_CONTROL); + isp3_param_write(params_vdev, value, ISP3X_GIC_CONTROL, id); } static void isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_dhaz_cfg *arg) + const struct isp3x_dhaz_cfg *arg, u32 id) { u32 i, value, ctrl; - ctrl = rkisp_ioread32(params_vdev, ISP3X_DHAZ_CTRL); + ctrl = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL, id); ctrl &= ISP3X_DHAZ_ENMUX; ctrl |= (arg->enhance_en & 0x1) << 20 | @@ -2622,177 +2707,176 @@ isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev, ctrl |= (arg->soft_wr_en & 0x1) << 25; value = ISP_PACK_2SHORT(arg->adp_wt_wr, arg->adp_air_wr); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ADT_WR0); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADT_WR0, id); value = ISP_PACK_2SHORT(arg->adp_tmax_wr, arg->adp_gratio_wr); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ADT_WR1); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADT_WR1, id); for (i = 0; i < ISP3X_DHAZ_HIST_WR_NUM / 3; i++) { value = (arg->hist_wr[i * 3] & 0x3ff) | (arg->hist_wr[i * 3 + 1] & 0x3ff) << 10 | (arg->hist_wr[i * 3 + 2] & 0x3ff) << 20; - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4, id); } value = arg->hist_wr[i * 3] & 0x3ff; - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4, id); } - rkisp_iowrite32(params_vdev, ctrl, ISP3X_DHAZ_CTRL); + 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); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ADP0); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP0, id); value = ISP_PACK_4BYTE(arg->bright_min, arg->bright_max, arg->wt_max, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ADP1); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP1, id); value = ISP_PACK_4BYTE(arg->air_min, arg->air_max, arg->dark_th, arg->tmax_base); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ADP2); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP2, id); value = ISP_PACK_2SHORT(arg->tmax_off, arg->tmax_max); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ADP_TMAX); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_TMAX, id); value = (arg->hist_min & 0xFFFF) << 16 | (arg->hist_th_off & 0xFF) << 8 | (arg->hist_k & 0x1F); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ADP_HIST0); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST0, id); value = ISP_PACK_2SHORT(arg->hist_scale, arg->hist_gratio); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ADP_HIST1); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST1, id); value = ISP_PACK_2SHORT(arg->enhance_chroma, arg->enhance_value); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ENHANCE); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENHANCE, id); value = (arg->iir_wt_sigma & 0x07FF) << 16 | (arg->iir_sigma & 0xFF) << 8 | (arg->stab_fnum & 0x1F); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_IIR0); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR0, id); value = (arg->iir_pre_wet & 0x0F) << 24 | (arg->iir_tmax_sigma & 0x7FF) << 8 | (arg->iir_air_sigma & 0xFF); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_IIR1); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR1, id); value = (arg->cfg_wt & 0x01FF) << 16 | (arg->cfg_air & 0xFF) << 8 | (arg->cfg_alpha & 0xFF); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_SOFT_CFG0); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG0, id); value = ISP_PACK_2SHORT(arg->cfg_tmax, arg->cfg_gratio); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_SOFT_CFG1); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG1, id); value = (arg->range_sima & 0x01FF) << 16 | (arg->space_sigma_pre & 0xFF) << 8 | (arg->space_sigma_cur & 0xFF); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_BF_SIGMA); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_SIGMA, id); value = ISP_PACK_2SHORT(arg->bf_weight, arg->dc_weitcur); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_BF_WET); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_WET, id); for (i = 0; i < ISP3X_DHAZ_ENH_CURVE_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->enh_curve[2 * i], arg->enh_curve[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i, id); } value = ISP_PACK_2SHORT(arg->enh_curve[2 * i], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i, id); value = ISP_PACK_4BYTE(arg->gaus_h0, arg->gaus_h1, arg->gaus_h2, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_GAUS); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAUS, id); for (i = 0; i < ISP3X_DHAZ_SIGMA_IDX_NUM / 4; i++) { value = ISP_PACK_4BYTE(arg->sigma_idx[i * 4], arg->sigma_idx[i * 4 + 1], arg->sigma_idx[i * 4 + 2], arg->sigma_idx[i * 4 + 3]); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4, id); } value = ISP_PACK_4BYTE(arg->sigma_idx[i * 4], arg->sigma_idx[i * 4 + 1], arg->sigma_idx[i * 4 + 2], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4, id); for (i = 0; i < ISP3X_DHAZ_SIGMA_LUT_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->sigma_lut[i * 2], arg->sigma_lut[i * 2 + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4, id); } value = ISP_PACK_2SHORT(arg->sigma_lut[i * 2], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4, id); } static void -isp_dhaz_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_dhaz_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 value; bool real_en; - value = rkisp_ioread32(params_vdev, ISP3X_DHAZ_CTRL); + value = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL, id); real_en = !!(value & ISP3X_DHAZ_ENMUX); if ((en && real_en) || (!en && !real_en)) return; if (en) { value |= ISP3X_SELF_FORCE_UPD | ISP3X_DHAZ_ENMUX; - rkisp_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, - ISP3X_DHAZ_FST_FRAME, ISP3X_DHAZ_FST_FRAME, false); + isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1, + ISP3X_DHAZ_FST_FRAME, id); } else { value &= ~ISP3X_DHAZ_ENMUX; isp_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(16)); } - - rkisp_iowrite32(params_vdev, value, ISP3X_DHAZ_CTRL); + isp3_param_write(params_vdev, value, ISP3X_DHAZ_CTRL, id); } static void isp_3dlut_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_3dlut_cfg *arg) + const struct isp2x_3dlut_cfg *arg, u32 id) { struct rkisp_isp_params_val_v3x *priv_val; u32 value, buf_idx, i; u32 *data; priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; - buf_idx = (priv_val->buf_3dlut_idx++) % ISP3X_3DLUT_BUF_NUM; + buf_idx = (priv_val->buf_3dlut_idx[id]++) % ISP3X_3DLUT_BUF_NUM; - data = (u32 *)priv_val->buf_3dlut[buf_idx].vaddr; + data = (u32 *)priv_val->buf_3dlut[id][buf_idx].vaddr; for (i = 0; i < arg->actual_size; i++) data[i] = (arg->lut_b[i] & 0x3FF) | (arg->lut_g[i] & 0xFFF) << 10 | (arg->lut_r[i] & 0x3FF) << 22; - rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_3dlut[buf_idx]); - value = priv_val->buf_3dlut[buf_idx].dma_addr; - rkisp_iowrite32(params_vdev, value, ISP3X_MI_LUT_3D_RD_BASE); - rkisp_iowrite32(params_vdev, arg->actual_size, ISP3X_MI_LUT_3D_RD_WSIZE); + rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_3dlut[id][buf_idx]); + value = priv_val->buf_3dlut[id][buf_idx].dma_addr; + isp3_param_write(params_vdev, value, ISP3X_MI_LUT_3D_RD_BASE, id); + isp3_param_write(params_vdev, arg->actual_size, ISP3X_MI_LUT_3D_RD_WSIZE, id); - value = rkisp_ioread32(params_vdev, ISP3X_3DLUT_CTRL); + value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL, id); value &= ISP3X_3DLUT_EN; if (value) - isp_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01); + isp3_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01, id); - rkisp_iowrite32(params_vdev, value, ISP3X_3DLUT_CTRL); + isp3_param_write(params_vdev, value, ISP3X_3DLUT_CTRL, id); } static void -isp_3dlut_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_3dlut_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 value; bool en_state; - value = rkisp_ioread32(params_vdev, ISP3X_3DLUT_CTRL); + value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL, id); en_state = (value & ISP3X_3DLUT_EN) ? true : false; if (en == en_state) return; if (en) { - isp_param_set_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01); - isp_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01); + isp3_param_set_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01, id); + isp3_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01, id); } else { - isp_param_clear_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01); - isp_param_clear_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01); - isp_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(20)); + isp3_param_clear_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01, id); + isp3_param_clear_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01, id); + isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(20), id); } } static void isp_ldch_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_ldch_cfg *arg) + const struct isp2x_ldch_cfg *arg, u32 id) { struct rkisp_device *dev = params_vdev->dev; struct rkisp_isp_params_val_v3x *priv_val; @@ -2802,7 +2886,7 @@ isp_ldch_config(struct rkisp_isp_params_vdev *params_vdev, priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; for (i = 0; i < ISP3X_MESH_BUF_NUM; i++) { - if (arg->buf_fd == priv_val->buf_ldch[i].dma_fd) + if (arg->buf_fd == priv_val->buf_ldch[id][i].dma_fd) break; } if (i == ISP3X_MESH_BUF_NUM) { @@ -2810,28 +2894,28 @@ isp_ldch_config(struct rkisp_isp_params_vdev *params_vdev, return; } - if (!priv_val->buf_ldch[i].vaddr) { + if (!priv_val->buf_ldch[id][i].vaddr) { dev_err(dev->dev, "no ldch buffer allocated\n"); return; } - buf_idx = priv_val->buf_ldch_idx; - head = (struct isp2x_mesh_head *)priv_val->buf_ldch[buf_idx].vaddr; + buf_idx = priv_val->buf_ldch_idx[id]; + head = (struct isp2x_mesh_head *)priv_val->buf_ldch[id][buf_idx].vaddr; head->stat = MESH_BUF_INIT; buf_idx = i; - head = (struct isp2x_mesh_head *)priv_val->buf_ldch[buf_idx].vaddr; + head = (struct isp2x_mesh_head *)priv_val->buf_ldch[id][buf_idx].vaddr; head->stat = MESH_BUF_CHIPINUSE; - priv_val->buf_ldch_idx = buf_idx; - rkisp_prepare_buffer(dev, &priv_val->buf_ldch[buf_idx]); - value = priv_val->buf_ldch[buf_idx].dma_addr + head->data_oft; - rkisp_iowrite32(params_vdev, value, ISP3X_MI_LUT_LDCH_RD_BASE); - rkisp_iowrite32(params_vdev, arg->hsize, ISP3X_MI_LUT_LDCH_RD_H_WSIZE); - rkisp_iowrite32(params_vdev, arg->vsize, ISP3X_MI_LUT_LDCH_RD_V_SIZE); + priv_val->buf_ldch_idx[id] = buf_idx; + rkisp_prepare_buffer(dev, &priv_val->buf_ldch[id][buf_idx]); + value = priv_val->buf_ldch[id][buf_idx].dma_addr + head->data_oft; + isp3_param_write(params_vdev, value, ISP3X_MI_LUT_LDCH_RD_BASE, id); + isp3_param_write(params_vdev, arg->hsize, ISP3X_MI_LUT_LDCH_RD_H_WSIZE, id); + isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_LDCH_RD_V_SIZE, id); } static void -isp_ldch_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_ldch_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { struct rkisp_device *dev = params_vdev->dev; struct rkisp_isp_params_val_v3x *priv_val; @@ -2839,24 +2923,24 @@ isp_ldch_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; if (en) { - buf_idx = priv_val->buf_ldch_idx; - if (!priv_val->buf_ldch[buf_idx].vaddr) { + buf_idx = priv_val->buf_ldch_idx[id]; + if (!priv_val->buf_ldch[id][buf_idx].vaddr) { dev_err(dev->dev, "no ldch buffer allocated\n"); return; } - isp_param_set_bits(params_vdev, ISP3X_LDCH_STS, 0x01); + isp3_param_set_bits(params_vdev, ISP3X_LDCH_STS, 0x01, id); } else { - isp_param_clear_bits(params_vdev, ISP3X_LDCH_STS, 0x01); + isp3_param_clear_bits(params_vdev, ISP3X_LDCH_STS, 0x01, id); } } static void isp_ynr_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_ynr_cfg *arg) + const struct isp3x_ynr_cfg *arg, u32 id) { u32 i, value; - value = rkisp_ioread32(params_vdev, ISP3X_YNR_GLOBAL_CTRL); + value = isp3_param_read(params_vdev, ISP3X_YNR_GLOBAL_CTRL, id); value &= ISP3X_MODULE_EN; value |= (arg->rnr_en & 0x1) << 26 | @@ -2869,106 +2953,106 @@ isp_ynr_config(struct rkisp_isp_params_vdev *params_vdev, (arg->lgft3x3_bypass & 0x1) << 3 | (arg->lbft5x5_bypass & 0x1) << 2 | (arg->bft3x3_bypass & 0x1) << 1; - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_GLOBAL_CTRL); + isp3_param_write(params_vdev, value, ISP3X_YNR_GLOBAL_CTRL, id); value = ISP_PACK_2SHORT(arg->rnr_max_r, arg->local_gainscale); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_RNR_MAX_R); + isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_MAX_R, id); value = ISP_PACK_2SHORT(arg->rnr_center_coorh, arg->rnr_center_coorv); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_RNR_CENTER_COOR); + isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_CENTER_COOR, id); value = ISP_PACK_2SHORT(arg->loclagain_adj_thresh, arg->localgain_adj); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_LOCAL_GAIN_CTRL); + isp3_param_write(params_vdev, value, ISP3X_YNR_LOCAL_GAIN_CTRL, id); value = ISP_PACK_2SHORT(arg->low_bf_inv0, arg->low_bf_inv1); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_LOWNR_CTRL0); + isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL0, id); value = ISP_PACK_2SHORT(arg->low_thred_adj, arg->low_peak_supress); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_LOWNR_CTRL1); + isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL1, id); value = ISP_PACK_2SHORT(arg->low_edge_adj_thresh, arg->low_dist_adj); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_LOWNR_CTRL2); + isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL2, id); value = (arg->low_bi_weight & 0xFF) << 24 | (arg->low_weight & 0xFF) << 16 | (arg->low_center_weight & 0xFFFF); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_LOWNR_CTRL3); + isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL3, id); value = ISP_PACK_2SHORT(arg->high_thred_adj, arg->hi_min_adj); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_HIGHNR_CTRL0); + isp3_param_write(params_vdev, value, ISP3X_YNR_HIGHNR_CTRL0, id); value = ISP_PACK_2SHORT(arg->hi_edge_thed, arg->high_retain_weight); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_HIGHNR_CTRL1); + isp3_param_write(params_vdev, value, ISP3X_YNR_HIGHNR_CTRL1, id); value = ISP_PACK_4BYTE(arg->base_filter_weight0, arg->base_filter_weight1, arg->base_filter_weight2, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_HIGHNR_BASE_FILTER_WEIGHT); + isp3_param_write(params_vdev, value, ISP3X_YNR_HIGHNR_BASE_FILTER_WEIGHT, id); value = ISP_PACK_2SHORT(arg->lbf_weight_thres, arg->frame_full_size); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_LOWNR_CTRL4); + isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL4, id); value = (arg->low_gauss1_coeff2 & 0xFFFF) << 16 | (arg->low_gauss1_coeff1 & 0xFF) << 8 | (arg->low_gauss1_coeff0 & 0xFF); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_GAUSS1_COEFF); + isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS1_COEFF, id); value = (arg->low_gauss2_coeff2 & 0xFFFF) << 16 | (arg->low_gauss2_coeff1 & 0xFF) << 8 | (arg->low_gauss2_coeff0 & 0xFF); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_GAUSS2_COEFF); + isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS2_COEFF, id); value = ISP_PACK_4BYTE(arg->direction_weight0, arg->direction_weight1, arg->direction_weight2, arg->direction_weight3); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_DIRECTION_W_0_3); + isp3_param_write(params_vdev, value, ISP3X_YNR_DIRECTION_W_0_3, id); value = ISP_PACK_4BYTE(arg->direction_weight4, arg->direction_weight5, arg->direction_weight6, arg->direction_weight7); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_DIRECTION_W_4_7); + isp3_param_write(params_vdev, value, ISP3X_YNR_DIRECTION_W_4_7, id); for (i = 0; i < ISP3X_YNR_XY_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->luma_points_x[2 * i], arg->luma_points_x[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i, id); } value = ISP_PACK_2SHORT(arg->luma_points_x[2 * i], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i, id); for (i = 0; i < ISP3X_YNR_XY_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->lsgm_y[2 * i], arg->lsgm_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i, id); } value = ISP_PACK_2SHORT(arg->lsgm_y[2 * i], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i, id); for (i = 0; i < ISP3X_YNR_XY_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->hsgm_y[2 * i], arg->hsgm_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_HSGM_Y_0_1 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_YNR_HSGM_Y_0_1 + 4 * i, id); } value = ISP_PACK_2SHORT(arg->hsgm_y[2 * i], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_HSGM_Y_0_1 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_YNR_HSGM_Y_0_1 + 4 * i, id); for (i = 0; i < ISP3X_YNR_XY_NUM / 4; i++) { value = ISP_PACK_4BYTE(arg->rnr_strength3[4 * i], arg->rnr_strength3[4 * i + 1], arg->rnr_strength3[4 * i + 2], arg->rnr_strength3[4 * i + 3]); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i, id); } value = ISP_PACK_4BYTE(arg->rnr_strength3[4 * i], 0, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i, id); } static void isp_ynr_enable(struct rkisp_isp_params_vdev *params_vdev, - bool en, const struct isp3x_ynr_cfg *arg) + bool en, const struct isp3x_ynr_cfg *arg, u32 id) { u32 ynr_ctrl, value = 0; bool real_en; @@ -2986,79 +3070,79 @@ isp_ynr_enable(struct rkisp_isp_params_vdev *params_vdev, (arg->bft3x3_bypass & 0x1) << 1; } - ynr_ctrl = rkisp_ioread32(params_vdev, ISP3X_YNR_GLOBAL_CTRL); + ynr_ctrl = isp3_param_read(params_vdev, ISP3X_YNR_GLOBAL_CTRL, id); real_en = !!(ynr_ctrl & ISP3X_MODULE_EN); if ((en && real_en) || (!en && !real_en)) return; if (en) { value |= ISP3X_MODULE_EN; - rkisp_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, - ISP3X_YNR_FST_FRAME, ISP3X_YNR_FST_FRAME, false); + isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1, + ISP3X_YNR_FST_FRAME, id); } - rkisp_iowrite32(params_vdev, value, ISP3X_YNR_GLOBAL_CTRL); + isp3_param_write(params_vdev, value, ISP3X_YNR_GLOBAL_CTRL, id); } static void isp_cnr_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_cnr_cfg *arg) + const struct isp3x_cnr_cfg *arg, u32 id) { u32 i, value; - value = rkisp_ioread32(params_vdev, ISP3X_CNR_CTRL); + value = isp3_param_read(params_vdev, ISP3X_CNR_CTRL, id); value &= ISP3X_MODULE_EN; value |= (arg->thumb_mix_cur_en & 0x1) << 4 | (arg->lq_bila_bypass & 0x1) << 3 | (arg->hq_bila_bypass & 0x1) << 2 | (arg->exgain_bypass & 0x1) << 1; - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_CTRL); + isp3_param_write(params_vdev, value, ISP3X_CNR_CTRL, id); value = (arg->global_gain & 0x3ff) | (arg->global_gain_alpha & 0xf) << 12; - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_EXGAIN); + isp3_param_write(params_vdev, value, ISP3X_CNR_EXGAIN, id); value = ISP_PACK_4BYTE(arg->gain_1sigma, arg->gain_offset, arg->gain_iso, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_GAIN_PARA); + isp3_param_write(params_vdev, value, ISP3X_CNR_GAIN_PARA, id); value = ISP_PACK_4BYTE(arg->gain_uvgain0, arg->gain_uvgain1, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_GAIN_UV_PARA); + isp3_param_write(params_vdev, value, ISP3X_CNR_GAIN_UV_PARA, id); - rkisp_iowrite32(params_vdev, arg->lmed3_alpha, ISP3X_CNR_LMED3); + isp3_param_write(params_vdev, arg->lmed3_alpha, ISP3X_CNR_LMED3, id); value = ISP_PACK_4BYTE(arg->lbf5_gain_c, arg->lbf5_gain_y, 0, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_LBF5_GAIN); + isp3_param_write(params_vdev, value, ISP3X_CNR_LBF5_GAIN, id); value = ISP_PACK_4BYTE(arg->lbf5_weit_d0, arg->lbf5_weit_d1, arg->lbf5_weit_d2, arg->lbf5_weit_d3); - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_LBF5_WEITD0_3); + isp3_param_write(params_vdev, value, ISP3X_CNR_LBF5_WEITD0_3, id); - rkisp_iowrite32(params_vdev, arg->lbf5_weit_d4, ISP3X_CNR_LBF5_WEITD4); + isp3_param_write(params_vdev, arg->lbf5_weit_d4, ISP3X_CNR_LBF5_WEITD4, id); - rkisp_iowrite32(params_vdev, arg->hmed3_alpha, ISP3X_CNR_HMED3); + isp3_param_write(params_vdev, arg->hmed3_alpha, ISP3X_CNR_HMED3, id); value = (arg->hbf5_weit_src & 0xFF) << 24 | (arg->hbf5_min_wgt & 0xFF) << 16 | (arg->hbf5_sigma & 0xFFFF); - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_HBF5); + isp3_param_write(params_vdev, value, ISP3X_CNR_HBF5, id); value = ISP_PACK_2SHORT(arg->lbf3_sigma, arg->lbf5_weit_src); - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_LBF3); + isp3_param_write(params_vdev, value, ISP3X_CNR_LBF3, id); for (i = 0; i < ISP3X_CNR_SIGMA_Y_NUM / 4; i++) { value = ISP_PACK_4BYTE(arg->sigma_y[i * 4], arg->sigma_y[i * 4 + 1], arg->sigma_y[i * 4 + 2], arg->sigma_y[i * 4 + 3]); - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_SIGMA0 + i * 4); + isp3_param_write(params_vdev, value, ISP3X_CNR_SIGMA0 + i * 4, id); } value = arg->sigma_y[i * 4]; - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_SIGMA0 + i * 4); + isp3_param_write(params_vdev, value, ISP3X_CNR_SIGMA0 + i * 4, id); } static void isp_cnr_enable(struct rkisp_isp_params_vdev *params_vdev, - bool en, const struct isp3x_cnr_cfg *arg) + bool en, const struct isp3x_cnr_cfg *arg, u32 id) { u32 cnr_ctrl, value = 0; bool real_en; @@ -3070,37 +3154,37 @@ isp_cnr_enable(struct rkisp_isp_params_vdev *params_vdev, (arg->exgain_bypass & 0x1) << 1; } - cnr_ctrl = rkisp_ioread32(params_vdev, ISP3X_CNR_CTRL); + cnr_ctrl = isp3_param_read(params_vdev, ISP3X_CNR_CTRL, id); real_en = !!(cnr_ctrl & ISP3X_MODULE_EN); if ((en && real_en) || (!en && !real_en)) return; if (en) { value |= ISP3X_MODULE_EN; - rkisp_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, - ISP3X_CNR_FST_FRAME, ISP3X_CNR_FST_FRAME, false); + isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1, + ISP3X_CNR_FST_FRAME, id); } - rkisp_iowrite32(params_vdev, value, ISP3X_CNR_CTRL); + isp3_param_write(params_vdev, value, ISP3X_CNR_CTRL, id); } static void isp_sharp_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_sharp_cfg *arg) + const struct isp3x_sharp_cfg *arg, u32 id) { u32 value; - value = rkisp_ioread32(params_vdev, ISP3X_SHARP_EN); + value = isp3_param_read(params_vdev, ISP3X_SHARP_EN, id); value &= ISP3X_MODULE_EN; value |= (arg->bypass & 0x1) << 1 | (arg->center_mode & 0x1) << 2 | (arg->exgain_bypass & 0x1) << 3; - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_EN); + isp3_param_write(params_vdev, value, ISP3X_SHARP_EN, id); value = ISP_PACK_4BYTE(arg->pbf_ratio, arg->gaus_ratio, arg->bf_ratio, arg->sharp_ratio); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_RATIO); + isp3_param_write(params_vdev, value, ISP3X_SHARP_RATIO, id); value = (arg->luma_dx[6] & 0x0F) << 24 | (arg->luma_dx[5] & 0x0F) << 20 | @@ -3109,165 +3193,165 @@ isp_sharp_config(struct rkisp_isp_params_vdev *params_vdev, (arg->luma_dx[2] & 0x0F) << 8 | (arg->luma_dx[1] & 0x0F) << 4 | (arg->luma_dx[0] & 0x0F); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_LUMA_DX); + isp3_param_write(params_vdev, value, ISP3X_SHARP_LUMA_DX, id); value = (arg->pbf_sigma_inv[2] & 0x3FF) << 20 | (arg->pbf_sigma_inv[1] & 0x3FF) << 10 | (arg->pbf_sigma_inv[0] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_0); + isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_0, id); value = (arg->pbf_sigma_inv[5] & 0x3FF) << 20 | (arg->pbf_sigma_inv[4] & 0x3FF) << 10 | (arg->pbf_sigma_inv[3] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_1); + isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_1, id); value = (arg->pbf_sigma_inv[7] & 0x3FF) << 10 | (arg->pbf_sigma_inv[6] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_2); + isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_2, id); value = (arg->bf_sigma_inv[2] & 0x3FF) << 20 | (arg->bf_sigma_inv[1] & 0x3FF) << 10 | (arg->bf_sigma_inv[0] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_0); + isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_0, id); value = (arg->bf_sigma_inv[5] & 0x3FF) << 20 | (arg->bf_sigma_inv[4] & 0x3FF) << 10 | (arg->bf_sigma_inv[3] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_1); + isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_1, id); value = (arg->bf_sigma_inv[7] & 0x3FF) << 10 | (arg->bf_sigma_inv[6] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_2); + isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_2, id); value = (arg->bf_sigma_shift & 0x0F) << 4 | (arg->pbf_sigma_shift & 0x0F); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_SIGMA_SHIFT); + isp3_param_write(params_vdev, value, ISP3X_SHARP_SIGMA_SHIFT, id); value = (arg->ehf_th[2] & 0x3FF) << 20 | (arg->ehf_th[1] & 0x3FF) << 10 | (arg->ehf_th[0] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_EHF_TH_0); + isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_0, id); value = (arg->ehf_th[5] & 0x3FF) << 20 | (arg->ehf_th[4] & 0x3FF) << 10 | (arg->ehf_th[3] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_EHF_TH_1); + isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_1, id); value = (arg->ehf_th[7] & 0x3FF) << 10 | (arg->ehf_th[6] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_EHF_TH_2); + isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_2, id); value = (arg->clip_hf[2] & 0x3FF) << 20 | (arg->clip_hf[1] & 0x3FF) << 10 | (arg->clip_hf[0] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_CLIP_HF_0); + isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_0, id); value = (arg->clip_hf[5] & 0x3FF) << 20 | (arg->clip_hf[4] & 0x3FF) << 10 | (arg->clip_hf[3] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_CLIP_HF_1); + isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_1, id); value = (arg->clip_hf[7] & 0x3FF) << 10 | (arg->clip_hf[6] & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_CLIP_HF_2); + isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_2, id); value = ISP_PACK_4BYTE(arg->pbf_coef0, arg->pbf_coef1, arg->pbf_coef2, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_PBF_COEF); + isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_COEF, id); value = ISP_PACK_4BYTE(arg->bf_coef0, arg->bf_coef1, arg->bf_coef2, 0); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_BF_COEF); + isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_COEF, id); value = ISP_PACK_4BYTE(arg->gaus_coef[0], arg->gaus_coef[1], arg->gaus_coef[2], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_GAUS_COEF0); + isp3_param_write(params_vdev, value, ISP3X_SHARP_GAUS_COEF0, id); value = ISP_PACK_4BYTE(arg->gaus_coef[3], arg->gaus_coef[4], arg->gaus_coef[5], 0); - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_GAUS_COEF1); + isp3_param_write(params_vdev, value, ISP3X_SHARP_GAUS_COEF1, id); } static void -isp_sharp_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_sharp_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 value; - value = rkisp_ioread32(params_vdev, ISP3X_SHARP_EN); + value = isp3_param_read(params_vdev, ISP3X_SHARP_EN, id); value &= ~ISP3X_MODULE_EN; if (en) value |= ISP3X_MODULE_EN; - rkisp_iowrite32(params_vdev, value, ISP3X_SHARP_EN); + isp3_param_write(params_vdev, value, ISP3X_SHARP_EN, id); } static void isp_baynr_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_baynr_cfg *arg) + const struct isp3x_baynr_cfg *arg, u32 id) { u32 i, value; - value = rkisp_ioread32(params_vdev, ISP3X_BAYNR_CTRL); + value = isp3_param_read(params_vdev, ISP3X_BAYNR_CTRL, id); value &= ISP3X_MODULE_EN; value |= (arg->lg2_mode & 0x3) << 12 | (arg->gauss_en & 0x1) << 8 | (arg->log_bypass & 0x1) << 4; - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_CTRL); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL, id); value = ISP_PACK_2SHORT(arg->dgain0, arg->dgain1); - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_DGAIN0); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_DGAIN0, id); - rkisp_iowrite32(params_vdev, arg->dgain2, ISP3X_BAYNR_DGAIN1); - rkisp_iowrite32(params_vdev, arg->pix_diff, ISP3X_BAYNR_PIXDIFF); + isp3_param_write(params_vdev, arg->dgain2, ISP3X_BAYNR_DGAIN1, id); + isp3_param_write(params_vdev, arg->pix_diff, ISP3X_BAYNR_PIXDIFF, id); value = ISP_PACK_2SHORT(arg->softthld, arg->diff_thld); - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_THLD); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_THLD, id); value = ISP_PACK_2SHORT(arg->reg_w1, arg->bltflt_streng); - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_W1_STRENG); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_W1_STRENG, id); for (i = 0; i < ISP3X_BAYNR_XY_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->sigma_x[2 * i], arg->sigma_x[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_SIGMAX01 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_SIGMAX01 + 4 * i, id); } for (i = 0; i < ISP3X_BAYNR_XY_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->sigma_y[2 * i], arg->sigma_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_SIGMAY01 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_SIGMAY01 + 4 * i, id); } value = (arg->weit_d2 & 0x3FF) << 20 | (arg->weit_d1 & 0x3FF) << 10 | (arg->weit_d0 & 0x3FF); - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_WRIT_D); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_WRIT_D, id); value = ISP_PACK_2SHORT(arg->lg2_off, arg->lg2_lgoff); - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_LG_OFF); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_LG_OFF, id); value = arg->dat_max & 0xfffff; - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_DAT_MAX); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_DAT_MAX, id); } static void -isp_baynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_baynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 value; - value = rkisp_ioread32(params_vdev, ISP3X_BAYNR_CTRL); + value = isp3_param_read(params_vdev, ISP3X_BAYNR_CTRL, id); value &= ~ISP3X_MODULE_EN; if (en) value |= ISP3X_MODULE_EN; - rkisp_iowrite32(params_vdev, value, ISP3X_BAYNR_CTRL); + isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL, id); } static void isp_bay3d_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_bay3d_cfg *arg) + const struct isp3x_bay3d_cfg *arg, u32 id) { struct rkisp_device *dev = params_vdev->dev; u32 i, value; - value = rkisp_ioread32(params_vdev, ISP3X_BAY3D_CTRL); + value = isp3_param_read(params_vdev, ISP3X_BAY3D_CTRL, id); value &= ISP3X_MODULE_EN; if (dev->rd_mode == HDR_NORMAL || @@ -3285,110 +3369,109 @@ isp_bay3d_config(struct rkisp_isp_params_vdev *params_vdev, (arg->lobypass_en & 0x1) << 3 | (arg->hibypass_en & 0x1) << 2 | (arg->bypass_en & 0x1) << 1; - rkisp_iowrite32(params_vdev, value, ISP3X_BAY3D_CTRL); + isp3_param_write(params_vdev, value, ISP3X_BAY3D_CTRL, id); value = ISP_PACK_2SHORT(arg->softwgt, arg->hidif_th); - rkisp_iowrite32(params_vdev, value, ISP3X_BAY3D_KALRATIO); + isp3_param_write(params_vdev, value, ISP3X_BAY3D_KALRATIO, id); - rkisp_iowrite32(params_vdev, arg->glbpk2, ISP3X_BAY3D_GLBPK2); + isp3_param_write(params_vdev, arg->glbpk2, ISP3X_BAY3D_GLBPK2, id); value = ISP_PACK_2SHORT(arg->wgtlmt, arg->wgtratio); - rkisp_iowrite32(params_vdev, value, ISP3X_BAY3D_WGTLMT); + isp3_param_write(params_vdev, value, ISP3X_BAY3D_WGTLMT, id); for (i = 0; i < ISP3X_BAY3D_XY_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->sig0_x[2 * i], arg->sig0_x[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_BAY3D_SIG0_X0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_X0 + 4 * i, id); value = ISP_PACK_2SHORT(arg->sig1_x[2 * i], arg->sig1_x[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_BAY3D_SIG1_X0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_X0 + 4 * i, id); } for (i = 0; i < ISP3X_BAY3D_XY_NUM / 2; i++) { value = ISP_PACK_2SHORT(arg->sig0_y[2 * i], arg->sig0_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_BAY3D_SIG0_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_Y0 + 4 * i, id); value = ISP_PACK_2SHORT(arg->sig1_y[2 * i], arg->sig1_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_BAY3D_SIG1_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_Y0 + 4 * i, id); value = ISP_PACK_2SHORT(arg->sig2_y[2 * i], arg->sig2_y[2 * i + 1]); - rkisp_iowrite32(params_vdev, value, ISP3X_BAY3D_SIG2_Y0 + 4 * i); + isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG2_Y0 + 4 * i, id); } } static void -isp_bay3d_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_bay3d_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { struct rkisp_device *ispdev = params_vdev->dev; struct rkisp_isp_params_val_v3x *priv_val; u32 value, bay3d_ctrl; priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; - bay3d_ctrl = rkisp_ioread32(params_vdev, ISP3X_BAY3D_CTRL); + bay3d_ctrl = isp3_param_read(params_vdev, ISP3X_BAY3D_CTRL, id); if ((en && (bay3d_ctrl & ISP3X_MODULE_EN)) || (!en && !(bay3d_ctrl & ISP3X_MODULE_EN))) return; if (en) { - if (!priv_val->buf_3dnr_iir.mem_priv) { + if (!priv_val->buf_3dnr_iir[id].mem_priv) { dev_err(ispdev->dev, "no bay3d buffer available\n"); return; } - value = priv_val->buf_3dnr_iir.size; - rkisp_iowrite32(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_SIZE); - value = priv_val->buf_3dnr_iir.dma_addr; - rkisp_iowrite32(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_BASE); - rkisp_iowrite32(params_vdev, value, ISP3X_MI_BAY3D_IIR_RD_BASE); + value = priv_val->buf_3dnr_iir[id].size; + isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_SIZE, id); + value = priv_val->buf_3dnr_iir[id].dma_addr; + isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_BASE, id); + isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_RD_BASE, id); - value = priv_val->buf_3dnr_cur.size; - rkisp_iowrite32(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_SIZE); - value = priv_val->buf_3dnr_cur.dma_addr; - rkisp_iowrite32(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_BASE); - rkisp_iowrite32(params_vdev, value, ISP3X_MI_BAY3D_CUR_RD_BASE); + value = priv_val->buf_3dnr_cur[id].size; + isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_SIZE, id); + value = priv_val->buf_3dnr_cur[id].dma_addr; + isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_BASE, id); + isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_RD_BASE, id); - value = priv_val->buf_3dnr_ds.size; - rkisp_iowrite32(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_SIZE); - value = priv_val->buf_3dnr_ds.dma_addr; - rkisp_iowrite32(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_BASE); - rkisp_iowrite32(params_vdev, value, ISP3X_MI_BAY3D_DS_RD_BASE); + value = priv_val->buf_3dnr_ds[id].size; + isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_SIZE, id); + value = priv_val->buf_3dnr_ds[id].dma_addr; + isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_BASE, id); + isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_RD_BASE, id); value = ISP3X_BAY3D_IIR_WR_AUTO_UPD | ISP3X_BAY3D_CUR_WR_AUTO_UPD | ISP3X_BAY3D_DS_WR_AUTO_UPD | ISP3X_BAY3D_IIRSELF_UPD | ISP3X_BAY3D_CURSELF_UPD | ISP3X_BAY3D_DSSELF_UPD | ISP3X_BAY3D_RDSELF_UPD; - rkisp_set_bits(params_vdev->dev, MI_WR_CTRL2, 0, value, false); + isp3_param_set_bits(params_vdev, MI_WR_CTRL2, value, id); - rkisp_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, 0, - ISP3X_RAW3D_FST_FRAME, false); + isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1, ISP3X_RAW3D_FST_FRAME, id); bay3d_ctrl |= ISP3X_MODULE_EN; } else { bay3d_ctrl &= ~ISP3X_MODULE_EN; - isp_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(4)); + isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(4), id); } - rkisp_iowrite32(params_vdev, bay3d_ctrl, ISP3X_BAY3D_CTRL); + isp3_param_write(params_vdev, bay3d_ctrl, ISP3X_BAY3D_CTRL, id); } static void isp_gain_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_gain_cfg *arg) + const struct isp3x_gain_cfg *arg, u32 id) { u32 val; val = arg->g0 & 0x3ffff; - rkisp_iowrite32(params_vdev, val, ISP3X_GAIN_G0); + isp3_param_write(params_vdev, val, ISP3X_GAIN_G0, id); val = ISP_PACK_2SHORT(arg->g1, arg->g2); - rkisp_iowrite32(params_vdev, val, ISP3X_GAIN_G1_G2); + isp3_param_write(params_vdev, val, ISP3X_GAIN_G1_G2, id); } static void -isp_gain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_gain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { struct rkisp_isp_params_val_v3x *priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; @@ -3400,24 +3483,24 @@ isp_gain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) priv_val->drc_en << 12 | priv_val->lsc_en << 8 | priv_val->bay3d_en << 4; - if (rkisp_ioread32(params_vdev, ISP3X_HDRMGE_CTRL) & BIT(0)) + if (isp3_param_read(params_vdev, ISP3X_HDRMGE_CTRL, id) & BIT(0)) val |= BIT(1); if (val) val |= ISP3X_MODULE_EN; } - rkisp_iowrite32(params_vdev, val, ISP3X_GAIN_CTRL); + isp3_param_write(params_vdev, val, ISP3X_GAIN_CTRL, id); /* gain disable, using global gain for cnr */ if (!val) { - isp_param_set_bits(params_vdev, ISP3X_CNR_CTRL, BIT(1)); - val = rkisp_ioread32(params_vdev, ISP3X_CNR_EXGAIN) & 0x3ff; - rkisp_iowrite32(params_vdev, val | 0x8000, ISP3X_CNR_EXGAIN); + isp3_param_set_bits(params_vdev, ISP3X_CNR_CTRL, BIT(1), id); + val = isp3_param_read(params_vdev, ISP3X_CNR_EXGAIN, id) & 0x3ff; + isp3_param_write(params_vdev, val | 0x8000, ISP3X_CNR_EXGAIN, id); } } static void isp_cac_config(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_cac_cfg *arg) + const struct isp3x_cac_cfg *arg, u32 id) { struct rkisp_device *dev = params_vdev->dev; struct rkisp_isp_params_val_v3x *priv_val; @@ -3426,24 +3509,24 @@ isp_cac_config(struct rkisp_isp_params_vdev *params_vdev, priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; - ctrl = rkisp_ioread32(params_vdev, ISP3X_CAC_CTRL); + ctrl = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id); ctrl &= ISP3X_CAC_EN; ctrl |= (arg->bypass_en & 0x1) << 1 | (arg->center_en & 0x1) << 3; val = (arg->psf_sft_bit & 0xff) | (arg->cfg_num & 0x7ff) << 8; - rkisp_iowrite32(params_vdev, val, ISP3X_CAC_PSF_PARA); + isp3_param_write(params_vdev, val, ISP3X_CAC_PSF_PARA, id); val = ISP_PACK_2SHORT(arg->center_width, arg->center_height); - rkisp_iowrite32(params_vdev, val, ISP3X_CAC_STRENGTH_CENTER); + isp3_param_write(params_vdev, val, ISP3X_CAC_STRENGTH_CENTER, id); for (i = 0; i < ISP3X_CAC_STRENGTH_NUM / 2; i++) { val = ISP_PACK_2SHORT(arg->strength[2 * i], arg->strength[2 * i + 1]); - rkisp_iowrite32(params_vdev, val, ISP3X_CAC_STRENGTH0 + i * 4); + isp3_param_write(params_vdev, val, ISP3X_CAC_STRENGTH0 + i * 4, id); } for (i = 0; i < ISP3X_MESH_BUF_NUM; i++) { - if (arg->buf_fd == priv_val->buf_cac[i].dma_fd) + if (arg->buf_fd == priv_val->buf_cac[id][i].dma_fd) break; } if (i == ISP3X_MESH_BUF_NUM) { @@ -3451,33 +3534,33 @@ isp_cac_config(struct rkisp_isp_params_vdev *params_vdev, return; } - val = priv_val->buf_cac_idx; - head = (struct isp2x_mesh_head *)priv_val->buf_cac[val].vaddr; + val = priv_val->buf_cac_idx[id]; + head = (struct isp2x_mesh_head *)priv_val->buf_cac[id][val].vaddr; head->stat = MESH_BUF_INIT; - head = (struct isp2x_mesh_head *)priv_val->buf_cac[i].vaddr; + head = (struct isp2x_mesh_head *)priv_val->buf_cac[id][i].vaddr; head->stat = MESH_BUF_CHIPINUSE; - priv_val->buf_cac_idx = i; - rkisp_prepare_buffer(dev, &priv_val->buf_cac[i]); - val = priv_val->buf_cac[i].dma_addr + head->data_oft; - rkisp_iowrite32(params_vdev, val, ISP3X_MI_LUT_CAC_RD_BASE); - rkisp_iowrite32(params_vdev, arg->hsize, ISP3X_MI_LUT_CAC_RD_H_WSIZE); - rkisp_iowrite32(params_vdev, arg->vsize, ISP3X_MI_LUT_CAC_RD_V_SIZE); + priv_val->buf_cac_idx[id] = i; + rkisp_prepare_buffer(dev, &priv_val->buf_cac[id][i]); + val = priv_val->buf_cac[id][i].dma_addr + head->data_oft; + isp3_param_write(params_vdev, val, ISP3X_MI_LUT_CAC_RD_BASE, id); + isp3_param_write(params_vdev, arg->hsize, ISP3X_MI_LUT_CAC_RD_H_WSIZE, id); + isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_CAC_RD_V_SIZE, id); if (ctrl & ISP3X_CAC_EN) ctrl |= ISP3X_CAC_LUT_EN; - rkisp_iowrite32(params_vdev, ctrl, ISP3X_CAC_CTRL); + isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL, id); } static void -isp_cac_enable(struct rkisp_isp_params_vdev *params_vdev, bool en) +isp_cac_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id) { u32 val; - val = rkisp_ioread32(params_vdev, ISP3X_CAC_CTRL); + val = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id); val &= ~ISP3X_CAC_EN; if (en) val |= ISP3X_CAC_EN | ISP3X_CAC_LUT_EN; - rkisp_iowrite32(params_vdev, val, ISP3X_CAC_CTRL); + isp3_param_write(params_vdev, val, ISP3X_CAC_CTRL, id); } struct rkisp_isp_params_ops_v3x isp_params_ops_v3x = { @@ -3552,7 +3635,7 @@ struct rkisp_isp_params_ops_v3x isp_params_ops_v3x = { static __maybe_unused void __isp_isr_other_config(struct rkisp_isp_params_vdev *params_vdev, const struct isp3x_isp_params_cfg *new_params, - enum rkisp_params_type type) + enum rkisp_params_type type, enum isp3x_unite_id id) { struct rkisp_isp_params_ops_v3x *ops = (struct rkisp_isp_params_ops_v3x *)params_vdev->priv_ops; @@ -3560,87 +3643,91 @@ void __isp_isr_other_config(struct rkisp_isp_params_vdev *params_vdev, if (type == RKISP_PARAMS_SHD) { if ((module_cfg_update & ISP3X_MODULE_HDRMGE)) - ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type); + ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type, id); if ((module_cfg_update & ISP3X_MODULE_DRC)) - ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type); + ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type, id); return; } + v4l2_dbg(4, rkisp_debug, ¶ms_vdev->dev->v4l2_dev, + "%s id:%d seq:%d module_cfg_update:0x%llx\n", + __func__, id, new_params->frame_id, module_cfg_update); + if ((module_cfg_update & ISP3X_MODULE_DPCC)) - ops->dpcc_config(params_vdev, &new_params->others.dpcc_cfg); + ops->dpcc_config(params_vdev, &new_params->others.dpcc_cfg, id); if ((module_cfg_update & ISP3X_MODULE_BLS)) - ops->bls_config(params_vdev, &new_params->others.bls_cfg); + ops->bls_config(params_vdev, &new_params->others.bls_cfg, id); if ((module_cfg_update & ISP3X_MODULE_SDG)) - ops->sdg_config(params_vdev, &new_params->others.sdg_cfg); + ops->sdg_config(params_vdev, &new_params->others.sdg_cfg, id); if ((module_cfg_update & ISP3X_MODULE_LSC)) - ops->lsc_config(params_vdev, &new_params->others.lsc_cfg); + ops->lsc_config(params_vdev, &new_params->others.lsc_cfg, id); if ((module_cfg_update & ISP3X_MODULE_AWB_GAIN)) - ops->awbgain_config(params_vdev, &new_params->others.awb_gain_cfg); + ops->awbgain_config(params_vdev, &new_params->others.awb_gain_cfg, id); if ((module_cfg_update & ISP3X_MODULE_DEBAYER)) - ops->debayer_config(params_vdev, &new_params->others.debayer_cfg); + ops->debayer_config(params_vdev, &new_params->others.debayer_cfg, id); if ((module_cfg_update & ISP3X_MODULE_CCM)) - ops->ccm_config(params_vdev, &new_params->others.ccm_cfg); + ops->ccm_config(params_vdev, &new_params->others.ccm_cfg, id); if ((module_cfg_update & ISP3X_MODULE_GOC)) - ops->goc_config(params_vdev, &new_params->others.gammaout_cfg); + ops->goc_config(params_vdev, &new_params->others.gammaout_cfg, id); if ((module_cfg_update & ISP3X_MODULE_CPROC)) - ops->cproc_config(params_vdev, &new_params->others.cproc_cfg); + ops->cproc_config(params_vdev, &new_params->others.cproc_cfg, id); if ((module_cfg_update & ISP3X_MODULE_IE)) - ops->ie_config(params_vdev, &new_params->others.ie_cfg); + ops->ie_config(params_vdev, &new_params->others.ie_cfg, id); if ((module_cfg_update & ISP3X_MODULE_HDRMGE)) - ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type); + ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type, id); if ((module_cfg_update & ISP3X_MODULE_DRC)) - ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type); + ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type, id); if ((module_cfg_update & ISP3X_MODULE_GIC)) - ops->gic_config(params_vdev, &new_params->others.gic_cfg); + ops->gic_config(params_vdev, &new_params->others.gic_cfg, id); if ((module_cfg_update & ISP3X_MODULE_DHAZ)) - ops->dhaz_config(params_vdev, &new_params->others.dhaz_cfg); + ops->dhaz_config(params_vdev, &new_params->others.dhaz_cfg, id); if ((module_cfg_update & ISP3X_MODULE_3DLUT)) - ops->isp3dlut_config(params_vdev, &new_params->others.isp3dlut_cfg); + ops->isp3dlut_config(params_vdev, &new_params->others.isp3dlut_cfg, id); if ((module_cfg_update & ISP3X_MODULE_LDCH)) - ops->ldch_config(params_vdev, &new_params->others.ldch_cfg); + ops->ldch_config(params_vdev, &new_params->others.ldch_cfg, id); if ((module_cfg_update & ISP3X_MODULE_YNR)) - ops->ynr_config(params_vdev, &new_params->others.ynr_cfg); + ops->ynr_config(params_vdev, &new_params->others.ynr_cfg, id); if ((module_cfg_update & ISP3X_MODULE_CNR)) - ops->cnr_config(params_vdev, &new_params->others.cnr_cfg); + ops->cnr_config(params_vdev, &new_params->others.cnr_cfg, id); if ((module_cfg_update & ISP3X_MODULE_SHARP)) - ops->sharp_config(params_vdev, &new_params->others.sharp_cfg); + ops->sharp_config(params_vdev, &new_params->others.sharp_cfg, id); if ((module_cfg_update & ISP3X_MODULE_BAYNR)) - ops->baynr_config(params_vdev, &new_params->others.baynr_cfg); + ops->baynr_config(params_vdev, &new_params->others.baynr_cfg, id); if ((module_cfg_update & ISP3X_MODULE_BAY3D)) - ops->bay3d_config(params_vdev, &new_params->others.bay3d_cfg); + ops->bay3d_config(params_vdev, &new_params->others.bay3d_cfg, id); if ((module_cfg_update & ISP3X_MODULE_CAC)) - ops->cac_config(params_vdev, &new_params->others.cac_cfg); + ops->cac_config(params_vdev, &new_params->others.cac_cfg, id); if ((module_cfg_update & ISP3X_MODULE_GAIN)) - ops->gain_config(params_vdev, &new_params->others.gain_cfg); + ops->gain_config(params_vdev, &new_params->others.gain_cfg, id); } static __maybe_unused void __isp_isr_other_en(struct rkisp_isp_params_vdev *params_vdev, const struct isp3x_isp_params_cfg *new_params, - enum rkisp_params_type type) + enum rkisp_params_type type, enum isp3x_unite_id id) { struct rkisp_isp_params_ops_v3x *ops = (struct rkisp_isp_params_ops_v3x *)params_vdev->priv_ops; @@ -3652,94 +3739,98 @@ void __isp_isr_other_en(struct rkisp_isp_params_vdev *params_vdev, if (type == RKISP_PARAMS_SHD) return; + v4l2_dbg(4, rkisp_debug, ¶ms_vdev->dev->v4l2_dev, + "%s id:%d seq:%d module_en_update:0x%llx module_ens:0x%llx\n", + __func__, id, new_params->frame_id, module_en_update, module_ens); + if (module_en_update & ISP3X_MODULE_DPCC) - ops->dpcc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_DPCC)); + ops->dpcc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_DPCC), id); if (module_en_update & ISP3X_MODULE_BLS) - ops->bls_enable(params_vdev, !!(module_ens & ISP3X_MODULE_BLS)); + ops->bls_enable(params_vdev, !!(module_ens & ISP3X_MODULE_BLS), id); if (module_en_update & ISP3X_MODULE_SDG) - ops->sdg_enable(params_vdev, !!(module_ens & ISP3X_MODULE_SDG)); + ops->sdg_enable(params_vdev, !!(module_ens & ISP3X_MODULE_SDG), id); if (module_en_update & ISP3X_MODULE_LSC) { - ops->lsc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_LSC)); + ops->lsc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_LSC), id); priv_val->lsc_en = !!(module_ens & ISP3X_MODULE_LSC); } if (module_en_update & ISP3X_MODULE_AWB_GAIN) - ops->awbgain_enable(params_vdev, !!(module_ens & ISP3X_MODULE_AWB_GAIN)); + ops->awbgain_enable(params_vdev, !!(module_ens & ISP3X_MODULE_AWB_GAIN), id); if (module_en_update & ISP3X_MODULE_DEBAYER) - ops->debayer_enable(params_vdev, !!(module_ens & ISP3X_MODULE_DEBAYER)); + ops->debayer_enable(params_vdev, !!(module_ens & ISP3X_MODULE_DEBAYER), id); if (module_en_update & ISP3X_MODULE_CCM) - ops->ccm_enable(params_vdev, !!(module_ens & ISP3X_MODULE_CCM)); + ops->ccm_enable(params_vdev, !!(module_ens & ISP3X_MODULE_CCM), id); if (module_en_update & ISP3X_MODULE_GOC) - ops->goc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_GOC)); + ops->goc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_GOC), id); if (module_en_update & ISP3X_MODULE_CPROC) - ops->cproc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_CPROC)); + ops->cproc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_CPROC), id); if (module_en_update & ISP3X_MODULE_IE) - ops->ie_enable(params_vdev, !!(module_ens & ISP3X_MODULE_IE)); + ops->ie_enable(params_vdev, !!(module_ens & ISP3X_MODULE_IE), id); if (module_en_update & ISP3X_MODULE_HDRMGE) { - ops->hdrmge_enable(params_vdev, !!(module_ens & ISP3X_MODULE_HDRMGE)); + ops->hdrmge_enable(params_vdev, !!(module_ens & ISP3X_MODULE_HDRMGE), id); priv_val->mge_en = !!(module_ens & ISP3X_MODULE_HDRMGE); } if (module_en_update & ISP3X_MODULE_DRC) { - ops->hdrdrc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_DRC)); + ops->hdrdrc_enable(params_vdev, !!(module_ens & ISP3X_MODULE_DRC), id); priv_val->drc_en = !!(module_ens & ISP3X_MODULE_DRC); } if (module_en_update & ISP3X_MODULE_GIC) - ops->gic_enable(params_vdev, !!(module_ens & ISP3X_MODULE_GIC)); + ops->gic_enable(params_vdev, !!(module_ens & ISP3X_MODULE_GIC), id); if (module_en_update & ISP3X_MODULE_DHAZ) { - ops->dhaz_enable(params_vdev, !!(module_ens & ISP3X_MODULE_DHAZ)); + ops->dhaz_enable(params_vdev, !!(module_ens & ISP3X_MODULE_DHAZ), id); priv_val->dhaz_en = !!(module_ens & ISP3X_MODULE_DHAZ); } if (module_en_update & ISP3X_MODULE_3DLUT) { - ops->isp3dlut_enable(params_vdev, !!(module_ens & ISP3X_MODULE_3DLUT)); + ops->isp3dlut_enable(params_vdev, !!(module_ens & ISP3X_MODULE_3DLUT), id); priv_val->lut3d_en = !!(module_ens & ISP3X_MODULE_3DLUT); } if (module_en_update & ISP3X_MODULE_LDCH) - ops->ldch_enable(params_vdev, !!(module_ens & ISP3X_MODULE_LDCH)); + ops->ldch_enable(params_vdev, !!(module_ens & ISP3X_MODULE_LDCH), id); if (module_en_update & ISP3X_MODULE_YNR) ops->ynr_enable(params_vdev, !!(module_ens & ISP3X_MODULE_YNR), - &new_params->others.ynr_cfg); + &new_params->others.ynr_cfg, id); if (module_en_update & ISP3X_MODULE_CNR) ops->cnr_enable(params_vdev, !!(module_ens & ISP3X_MODULE_CNR), - &new_params->others.cnr_cfg); + &new_params->others.cnr_cfg, id); if (module_en_update & ISP3X_MODULE_SHARP) - ops->sharp_enable(params_vdev, !!(module_ens & ISP3X_MODULE_SHARP)); + ops->sharp_enable(params_vdev, !!(module_ens & ISP3X_MODULE_SHARP), id); if (module_en_update & ISP3X_MODULE_BAYNR) - ops->baynr_enable(params_vdev, !!(module_ens & ISP3X_MODULE_BAYNR)); + ops->baynr_enable(params_vdev, !!(module_ens & ISP3X_MODULE_BAYNR), id); if (module_en_update & ISP3X_MODULE_BAY3D) { - ops->bay3d_enable(params_vdev, !!(module_ens & ISP3X_MODULE_BAY3D)); + ops->bay3d_enable(params_vdev, !!(module_ens & ISP3X_MODULE_BAY3D), id); priv_val->bay3d_en = !!(module_ens & ISP3X_MODULE_BAY3D); } if (module_en_update & ISP3X_MODULE_CAC) - ops->cac_enable(params_vdev, !!(module_ens & ISP3X_MODULE_CAC)); + ops->cac_enable(params_vdev, !!(module_ens & ISP3X_MODULE_CAC), id); if (module_en_update & ISP3X_MODULE_GAIN) - ops->gain_enable(params_vdev, !!(module_ens & ISP3X_MODULE_GAIN)); + ops->gain_enable(params_vdev, !!(module_ens & ISP3X_MODULE_GAIN), id); } static __maybe_unused void __isp_isr_meas_config(struct rkisp_isp_params_vdev *params_vdev, struct isp3x_isp_params_cfg *new_params, - enum rkisp_params_type type) + enum rkisp_params_type type, enum isp3x_unite_id id) { struct rkisp_isp_params_ops_v3x *ops = (struct rkisp_isp_params_ops_v3x *)params_vdev->priv_ops; @@ -3748,41 +3839,45 @@ void __isp_isr_meas_config(struct rkisp_isp_params_vdev *params_vdev, if (type == RKISP_PARAMS_SHD) return; + v4l2_dbg(4, rkisp_debug, ¶ms_vdev->dev->v4l2_dev, + "%s id:%d seq:%d module_cfg_update:0x%llx\n", + __func__, id, new_params->frame_id, module_cfg_update); + if ((module_cfg_update & ISP3X_MODULE_RAWAE0)) - ops->rawae0_config(params_vdev, &new_params->meas.rawae0); + ops->rawae0_config(params_vdev, &new_params->meas.rawae0, id); if ((module_cfg_update & ISP3X_MODULE_RAWAE1)) - ops->rawae1_config(params_vdev, &new_params->meas.rawae1); + ops->rawae1_config(params_vdev, &new_params->meas.rawae1, id); if ((module_cfg_update & ISP3X_MODULE_RAWAE2)) - ops->rawae2_config(params_vdev, &new_params->meas.rawae2); + ops->rawae2_config(params_vdev, &new_params->meas.rawae2, id); if ((module_cfg_update & ISP3X_MODULE_RAWAE3)) - ops->rawae3_config(params_vdev, &new_params->meas.rawae3); + ops->rawae3_config(params_vdev, &new_params->meas.rawae3, id); if ((module_cfg_update & ISP3X_MODULE_RAWHIST0)) - ops->rawhst0_config(params_vdev, &new_params->meas.rawhist0); + ops->rawhst0_config(params_vdev, &new_params->meas.rawhist0, id); if ((module_cfg_update & ISP3X_MODULE_RAWHIST1)) - ops->rawhst1_config(params_vdev, &new_params->meas.rawhist1); + ops->rawhst1_config(params_vdev, &new_params->meas.rawhist1, id); if ((module_cfg_update & ISP3X_MODULE_RAWHIST2)) - ops->rawhst2_config(params_vdev, &new_params->meas.rawhist2); + ops->rawhst2_config(params_vdev, &new_params->meas.rawhist2, id); if ((module_cfg_update & ISP3X_MODULE_RAWHIST3)) - ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3); + ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3, id); if ((module_cfg_update & ISP3X_MODULE_RAWAWB)) - ops->rawawb_config(params_vdev, &new_params->meas.rawawb); + ops->rawawb_config(params_vdev, &new_params->meas.rawawb, id); if ((module_cfg_update & ISP3X_MODULE_RAWAF)) - ops->rawaf_config(params_vdev, &new_params->meas.rawaf); + ops->rawaf_config(params_vdev, &new_params->meas.rawaf, id); } static __maybe_unused void __isp_isr_meas_en(struct rkisp_isp_params_vdev *params_vdev, struct isp3x_isp_params_cfg *new_params, - enum rkisp_params_type type) + enum rkisp_params_type type, enum isp3x_unite_id id) { struct rkisp_isp_params_ops_v3x *ops = (struct rkisp_isp_params_ops_v3x *)params_vdev->priv_ops; @@ -3792,35 +3887,39 @@ void __isp_isr_meas_en(struct rkisp_isp_params_vdev *params_vdev, if (type == RKISP_PARAMS_SHD) return; + v4l2_dbg(4, rkisp_debug, ¶ms_vdev->dev->v4l2_dev, + "%s id:%d seq:%d module_en_update:0x%llx module_ens:0x%llx\n", + __func__, id, new_params->frame_id, module_en_update, module_ens); + if (module_en_update & ISP3X_MODULE_RAWAE0) - ops->rawae0_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAE0)); + ops->rawae0_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAE0), id); if (module_en_update & ISP3X_MODULE_RAWAE1) - ops->rawae1_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAE1)); + ops->rawae1_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAE1), id); if (module_en_update & ISP3X_MODULE_RAWAE2) - ops->rawae2_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAE2)); + ops->rawae2_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAE2), id); if (module_en_update & ISP3X_MODULE_RAWAE3) - ops->rawae3_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAE3)); + ops->rawae3_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAE3), id); if (module_en_update & ISP3X_MODULE_RAWHIST0) - ops->rawhst0_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWHIST0)); + ops->rawhst0_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWHIST0), id); if (module_en_update & ISP3X_MODULE_RAWHIST1) - ops->rawhst1_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWHIST1)); + ops->rawhst1_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWHIST1), id); if (module_en_update & ISP3X_MODULE_RAWHIST2) - ops->rawhst2_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWHIST2)); + ops->rawhst2_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWHIST2), id); if (module_en_update & ISP3X_MODULE_RAWHIST3) - ops->rawhst3_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWHIST3)); + ops->rawhst3_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWHIST3), id); if (module_en_update & ISP3X_MODULE_RAWAWB) - ops->rawawb_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAWB)); + ops->rawawb_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAWB), id); if (module_en_update & ISP3X_MODULE_RAWAF) - ops->rawaf_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAF)); + ops->rawaf_enable(params_vdev, !!(module_ens & ISP3X_MODULE_RAWAF), id); } static __maybe_unused @@ -3831,8 +3930,8 @@ void __isp_config_hdrshd(struct rkisp_isp_params_vdev *params_vdev) struct rkisp_isp_params_val_v3x *priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; - ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD); - ops->hdrdrc_config(params_vdev, &priv_val->last_hdrdrc, RKISP_PARAMS_SHD); + ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD, 0); + ops->hdrdrc_config(params_vdev, &priv_val->last_hdrdrc, RKISP_PARAMS_SHD, 0); } static @@ -3841,7 +3940,9 @@ void rkisp_params_cfgsram_v3x(struct rkisp_isp_params_vdev *params_vdev) struct rkisp_isp_params_val_v3x *priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; - isp_lsc_matrix_cfg_sram(params_vdev, &priv_val->cur_lsccfg, true); + isp_lsc_matrix_cfg_sram(params_vdev, &priv_val->cur_lsccfg[0], true, 0); + if (params_vdev->dev->hw_dev->is_unite) + isp_lsc_matrix_cfg_sram(params_vdev, &priv_val->cur_lsccfg[1], true, 1); } static void @@ -3852,7 +3953,7 @@ rkisp_alloc_bay3d_buf(struct rkisp_isp_params_vdev *params_vdev, struct rkisp_isp_subdev *isp_sdev = &ispdev->isp_sdev; struct rkisp_isp_params_val_v3x *priv_val; u64 module_en_update, module_ens; - u32 w, h, size; + u32 w, h, size, id; module_en_update = new_params->module_en_update; module_ens = new_params->module_ens; @@ -3862,31 +3963,37 @@ rkisp_alloc_bay3d_buf(struct rkisp_isp_params_vdev *params_vdev, priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; w = ALIGN(isp_sdev->in_crop.width, 16); h = ALIGN(isp_sdev->in_crop.height, 16); - size = ALIGN((w + w / 8) * h * 2, 16); + if (ispdev->hw_dev->is_unite) + w = ALIGN(isp_sdev->in_crop.width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL, 16); - rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_iir); - priv_val->buf_3dnr_iir.size = size; - if (rkisp_alloc_buffer(ispdev, &priv_val->buf_3dnr_iir)) - goto err; + for (id = 0; id <= ispdev->hw_dev->is_unite; id++) { + size = ALIGN((w + w / 8) * h * 2, 16); - rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_cur); - priv_val->buf_3dnr_cur.size = size; - if (rkisp_alloc_buffer(ispdev, &priv_val->buf_3dnr_cur)) - goto free_iir; + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_iir[id]); + priv_val->buf_3dnr_iir[id].size = size; + if (rkisp_alloc_buffer(ispdev, &priv_val->buf_3dnr_iir[id])) + goto err; - size = 2 * ALIGN(w * h / 64, 16); - rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_ds); - priv_val->buf_3dnr_ds.size = size; - if (rkisp_alloc_buffer(ispdev, &priv_val->buf_3dnr_ds)) - goto free_cur; + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_cur[id]); + priv_val->buf_3dnr_cur[id].size = size; + if (rkisp_alloc_buffer(ispdev, &priv_val->buf_3dnr_cur[id])) + goto err; + + size = 2 * ALIGN(w * h / 64, 16); + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_ds[id]); + priv_val->buf_3dnr_ds[id].size = size; + if (rkisp_alloc_buffer(ispdev, &priv_val->buf_3dnr_ds[id])) + goto err; + } } return; -free_cur: - rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_cur); -free_iir: - rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_iir); err: + for (id = 0; id <= ispdev->hw_dev->is_unite; id++) { + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_iir[id]); + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_cur[id]); + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_ds[id]); + } dev_err(ispdev->dev, "can not alloc bay3d buffer\n"); } @@ -3915,10 +4022,21 @@ rkisp_params_first_cfg_v3x(struct rkisp_isp_params_vdev *params_vdev) priv_val->lsc_en = 0; priv_val->mge_en = 0; priv_val->lut3d_en = 0; - __isp_isr_other_config(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL); - __isp_isr_other_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL); - __isp_isr_meas_config(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL); - __isp_isr_meas_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL); + __isp_isr_other_config(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0); + __isp_isr_other_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0); + __isp_isr_meas_config(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0); + __isp_isr_meas_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0); + if (hw->is_unite) { + width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL; + size = width * out_crop->height; + __isp_isr_other_config(params_vdev, params_vdev->isp3x_params + 1, RKISP_PARAMS_ALL, 1); + __isp_isr_other_en(params_vdev, params_vdev->isp3x_params + 1, RKISP_PARAMS_ALL, 1); + __isp_isr_meas_config(params_vdev, params_vdev->isp3x_params + 1, RKISP_PARAMS_ALL, 1); + __isp_isr_meas_en(params_vdev, params_vdev->isp3x_params + 1, RKISP_PARAMS_ALL, 1); + if (width <= ISP3X_AUTO_BIGMODE_WIDTH && size > ISP3X_NOBIG_OVERFLOW_SIZE) + rkisp_next_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, 0, + ISP3X_BIGMODE_MANUAL | ISP3X_BIGMODE_FORCE_EN, false); + } if ((width <= ISP3X_AUTO_BIGMODE_WIDTH && size > ISP3X_NOBIG_OVERFLOW_SIZE) || !hw->is_single) rkisp_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, 0, ISP3X_BIGMODE_MANUAL | ISP3X_BIGMODE_FORCE_EN, false); @@ -3942,7 +4060,7 @@ static void rkisp_clear_first_param_v3x(struct rkisp_isp_params_vdev *params_vde } static void rkisp_deinit_mesh_buf(struct rkisp_isp_params_vdev *params_vdev, - u64 module_id) + u64 module_id, u32 id) { struct rkisp_isp_params_val_v3x *priv_val; struct rkisp_dummy_buffer *buf; @@ -3954,11 +4072,11 @@ static void rkisp_deinit_mesh_buf(struct rkisp_isp_params_vdev *params_vdev, switch (module_id) { case ISP3X_MODULE_CAC: - buf = priv_val->buf_cac; + buf = priv_val->buf_cac[id]; break; case ISP3X_MODULE_LDCH: default: - buf = priv_val->buf_ldch; + buf = priv_val->buf_ldch[id]; break; } @@ -3969,14 +4087,15 @@ static void rkisp_deinit_mesh_buf(struct rkisp_isp_params_vdev *params_vdev, static int rkisp_init_mesh_buf(struct rkisp_isp_params_vdev *params_vdev, struct rkisp_meshbuf_size *meshsize) { - struct device *dev = params_vdev->dev->dev; + struct rkisp_device *ispdev = params_vdev->dev; + struct device *dev = ispdev->dev; struct rkisp_isp_params_val_v3x *priv_val; struct isp2x_mesh_head *mesh_head; struct rkisp_dummy_buffer *buf; u32 mesh_w = meshsize->meas_width; u32 mesh_h = meshsize->meas_height; u32 mesh_size, buf_size; - int i, ret; + int i, ret, id = meshsize->unite_isp_id; priv_val = params_vdev->priv_val; if (!priv_val) { @@ -3986,16 +4105,16 @@ static int rkisp_init_mesh_buf(struct rkisp_isp_params_vdev *params_vdev, switch (meshsize->module_id) { case ISP3X_MODULE_CAC: - priv_val->buf_cac_idx = 0; - buf = priv_val->buf_cac; + priv_val->buf_cac_idx[id] = 0; + buf = priv_val->buf_cac[id]; mesh_w = (mesh_w + 62) / 64 * 9; mesh_h = (mesh_h + 62) / 64 * 2; mesh_size = mesh_w * 4 * mesh_h; break; case ISP3X_MODULE_LDCH: default: - priv_val->buf_ldch_idx = 0; - buf = priv_val->buf_ldch; + priv_val->buf_ldch_idx[id] = 0; + buf = priv_val->buf_ldch[id]; mesh_w = ((mesh_w + 15) / 16 + 2) / 2; mesh_h = (mesh_h + 7) / 8 + 1; mesh_size = mesh_w * 4 * mesh_h; @@ -4010,7 +4129,7 @@ static int rkisp_init_mesh_buf(struct rkisp_isp_params_vdev *params_vdev, buf->size = buf_size; ret = rkisp_alloc_buffer(params_vdev->dev, buf); if (ret) { - dev_err(dev, "can not alloc buffer\n"); + dev_err(dev, "%s failed\n", __func__); goto err; } @@ -4021,9 +4140,8 @@ static int rkisp_init_mesh_buf(struct rkisp_isp_params_vdev *params_vdev, } return 0; - err: - rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id); + rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id, id); return -ENOMEM; } @@ -4031,7 +4149,9 @@ static void rkisp_get_param_size_v3x(struct rkisp_isp_params_vdev *params_vdev, unsigned int sizes[]) { - sizes[0] = sizeof(struct isp3x_isp_params_cfg); + u32 mult = params_vdev->dev->hw_dev->is_unite ? ISP3_UNITE_MAX : 1; + + sizes[0] = sizeof(struct isp3x_isp_params_cfg) * mult; } static void @@ -4041,18 +4161,18 @@ rkisp_params_get_meshbuf_inf_v3x(struct rkisp_isp_params_vdev *params_vdev, struct rkisp_isp_params_val_v3x *priv_val; struct rkisp_meshbuf_info *meshbuf = meshbuf_inf; struct rkisp_dummy_buffer *buf; - int i; + int i, id = meshbuf->unite_isp_id; priv_val = params_vdev->priv_val; switch (meshbuf->module_id) { case ISP3X_MODULE_CAC: - priv_val->buf_cac_idx = 0; - buf = priv_val->buf_cac; + priv_val->buf_cac_idx[id] = 0; + buf = priv_val->buf_cac[id]; break; case ISP3X_MODULE_LDCH: default: - priv_val->buf_ldch_idx = 0; - buf = priv_val->buf_ldch; + priv_val->buf_ldch_idx[id] = 0; + buf = priv_val->buf_ldch[id]; break; } @@ -4074,7 +4194,9 @@ rkisp_params_set_meshbuf_size_v3x(struct rkisp_isp_params_vdev *params_vdev, { struct rkisp_meshbuf_size *meshsize = size; - rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id); + if (!params_vdev->dev->hw_dev->is_unite) + meshsize->unite_isp_id = 0; + rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id, meshsize->unite_isp_id); rkisp_init_mesh_buf(params_vdev, meshsize); } @@ -4083,18 +4205,25 @@ rkisp_params_stream_stop_v3x(struct rkisp_isp_params_vdev *params_vdev) { struct rkisp_device *ispdev = params_vdev->dev; struct rkisp_isp_params_val_v3x *priv_val; + u32 id; priv_val = (struct rkisp_isp_params_val_v3x *)params_vdev->priv_val; - rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_iir); - rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_cur); - rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_ds); + for (id = 0; id <= ispdev->hw_dev->is_unite; id++) { + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_iir[id]); + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_cur[id]); + rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_ds[id]); + } } static void rkisp_params_fop_release_v3x(struct rkisp_isp_params_vdev *params_vdev) { - rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_LDCH); - rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_CAC); + int id; + + for (id = 0; id <= params_vdev->dev->hw_dev->is_unite; id++) { + rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_LDCH, id); + rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_CAC, id); + } } /* Not called when the camera active, thus not isr protection. */ @@ -4104,13 +4233,17 @@ rkisp_params_disable_isp_v3x(struct rkisp_isp_params_vdev *params_vdev) params_vdev->isp3x_params->module_ens = 0; params_vdev->isp3x_params->module_en_update = 0x7ffffffffff; - __isp_isr_other_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL); - __isp_isr_meas_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL); + __isp_isr_other_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0); + __isp_isr_meas_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 0); + if (params_vdev->dev->hw_dev->is_unite) { + __isp_isr_other_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 1); + __isp_isr_meas_en(params_vdev, params_vdev->isp3x_params, RKISP_PARAMS_ALL, 1); + } } static void module_data_abandon(struct rkisp_isp_params_vdev *params_vdev, - struct isp3x_isp_params_cfg *params) + struct isp3x_isp_params_cfg *params, u32 id) { struct rkisp_isp_params_val_v3x *priv_val; struct isp2x_mesh_head *mesh_head; @@ -4121,9 +4254,9 @@ module_data_abandon(struct rkisp_isp_params_vdev *params_vdev, const struct isp2x_ldch_cfg *arg = ¶ms->others.ldch_cfg; for (i = 0; i < ISP3X_MESH_BUF_NUM; i++) { - if (arg->buf_fd == priv_val->buf_ldch[i].dma_fd && - priv_val->buf_ldch[i].vaddr) { - mesh_head = (struct isp2x_mesh_head *)priv_val->buf_ldch[i].vaddr; + if (arg->buf_fd == priv_val->buf_ldch[id][i].dma_fd && + priv_val->buf_ldch[id][i].vaddr) { + mesh_head = (struct isp2x_mesh_head *)priv_val->buf_ldch[id][i].vaddr; mesh_head->stat = MESH_BUF_CHIPINUSE; break; } @@ -4134,9 +4267,9 @@ module_data_abandon(struct rkisp_isp_params_vdev *params_vdev, const struct isp3x_cac_cfg *arg = ¶ms->others.cac_cfg; for (i = 0; i < ISP3X_MESH_BUF_NUM; i++) { - if (arg->buf_fd == priv_val->buf_cac[i].dma_fd && - priv_val->buf_cac[i].vaddr) { - mesh_head = (struct isp2x_mesh_head *)priv_val->buf_cac[i].vaddr; + if (arg->buf_fd == priv_val->buf_cac[id][i].dma_fd && + priv_val->buf_cac[id][i].vaddr) { + mesh_head = (struct isp2x_mesh_head *)priv_val->buf_cac[id][i].vaddr; mesh_head->stat = MESH_BUF_CHIPINUSE; break; } @@ -4169,12 +4302,19 @@ rkisp_params_cfg_v3x(struct rkisp_isp_params_vdev *params_vdev, break; else if (new_params->module_en_update) { /* update en immediately */ - __isp_isr_other_en(params_vdev, new_params, type); - __isp_isr_meas_en(params_vdev, new_params, type); + __isp_isr_other_en(params_vdev, new_params, type, 0); + __isp_isr_meas_en(params_vdev, new_params, type, 0); + if (hw_dev->is_unite) { + __isp_isr_other_en(params_vdev, new_params + 1, type, 1); + __isp_isr_meas_en(params_vdev, new_params + 1, type, 1); + } } if (new_params->module_cfg_update & - (ISP3X_MODULE_LDCH | ISP3X_MODULE_CAC)) - module_data_abandon(params_vdev, new_params); + (ISP3X_MODULE_LDCH | ISP3X_MODULE_CAC)) { + module_data_abandon(params_vdev, new_params, 0); + if (hw_dev->is_unite) + module_data_abandon(params_vdev, new_params, 1); + } vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); cur_buf = NULL; continue; @@ -4190,12 +4330,18 @@ rkisp_params_cfg_v3x(struct rkisp_isp_params_vdev *params_vdev, goto unlock; new_params = (struct isp3x_isp_params_cfg *)(cur_buf->vaddr[0]); - __isp_isr_other_config(params_vdev, new_params, type); - __isp_isr_other_en(params_vdev, new_params, type); - __isp_isr_meas_config(params_vdev, new_params, type); - __isp_isr_meas_en(params_vdev, new_params, type); + __isp_isr_other_config(params_vdev, new_params, type, 0); + __isp_isr_other_en(params_vdev, new_params, type, 0); + __isp_isr_meas_config(params_vdev, new_params, type, 0); + __isp_isr_meas_en(params_vdev, new_params, type, 0); if (!hw_dev->is_single && type != RKISP_PARAMS_SHD) __isp_config_hdrshd(params_vdev); + if (hw_dev->is_unite) { + __isp_isr_other_config(params_vdev, new_params + 1, type, 1); + __isp_isr_other_en(params_vdev, new_params + 1, type, 1); + __isp_isr_meas_config(params_vdev, new_params + 1, type, 1); + __isp_isr_meas_en(params_vdev, new_params + 1, type, 1); + } if (type != RKISP_PARAMS_IMD) { struct rkisp_isp_params_val_v3x *priv_val = @@ -4217,9 +4363,11 @@ unlock: static void rkisp_params_clear_fstflg(struct rkisp_isp_params_vdev *params_vdev) { + struct rkisp_device *dev = params_vdev->dev; + struct rkisp_hw_dev *hw_dev = dev->hw_dev; u32 value; - value = rkisp_ioread32(params_vdev, ISP3X_ISP_CTRL1); + value = rkisp_read(dev, ISP3X_ISP_CTRL1, false); if (value & ISP3X_YNR_FST_FRAME) rkisp_clear_bits(params_vdev->dev, ISP3X_ISP_CTRL1, ISP3X_YNR_FST_FRAME, false); @@ -4235,6 +4383,24 @@ rkisp_params_clear_fstflg(struct rkisp_isp_params_vdev *params_vdev) if (value & ISP3X_RAW3D_FST_FRAME) rkisp_clear_bits(params_vdev->dev, ISP3X_ISP_CTRL1, ISP3X_RAW3D_FST_FRAME, false); + if (hw_dev->is_unite) { + value = rkisp_next_read(dev, ISP3X_ISP_CTRL1, false); + if (value & ISP3X_YNR_FST_FRAME) + rkisp_next_clear_bits(params_vdev->dev, ISP3X_ISP_CTRL1, + ISP3X_YNR_FST_FRAME, false); + if (value & ISP3X_ADRC_FST_FRAME) + rkisp_next_clear_bits(params_vdev->dev, ISP3X_ISP_CTRL1, + ISP3X_ADRC_FST_FRAME, false); + if (value & ISP3X_DHAZ_FST_FRAME) + rkisp_next_clear_bits(params_vdev->dev, ISP3X_ISP_CTRL1, + ISP3X_DHAZ_FST_FRAME, false); + if (value & ISP3X_CNR_FST_FRAME) + rkisp_next_clear_bits(params_vdev->dev, ISP3X_ISP_CTRL1, + ISP3X_CNR_FST_FRAME, false); + if (value & ISP3X_RAW3D_FST_FRAME) + rkisp_next_clear_bits(params_vdev->dev, ISP3X_ISP_CTRL1, + ISP3X_RAW3D_FST_FRAME, false); + } } static void @@ -4281,39 +4447,45 @@ static struct rkisp_isp_params_ops rkisp_isp_params_ops_tbl = { int rkisp_init_params_vdev_v3x(struct rkisp_isp_params_vdev *params_vdev) { - struct device *dev = params_vdev->dev->dev; + struct rkisp_device *ispdev = params_vdev->dev; + struct device *dev = ispdev->dev; struct rkisp_isp_params_val_v3x *priv_val; - int i, ret; + int i, ret, id, size; priv_val = kzalloc(sizeof(*priv_val), GFP_KERNEL); if (!priv_val) return -ENOMEM; - params_vdev->isp3x_params = vmalloc(sizeof(*params_vdev->isp3x_params)); + size = sizeof(struct isp3x_isp_params_cfg); + if (ispdev->hw_dev->is_unite) + size *= 2; + params_vdev->isp3x_params = vmalloc(size); if (!params_vdev->isp3x_params) { kfree(priv_val); return -ENOMEM; } - priv_val->buf_3dlut_idx = 0; - for (i = 0; i < ISP3X_3DLUT_BUF_NUM; i++) { - priv_val->buf_3dlut[i].is_need_vaddr = true; - priv_val->buf_3dlut[i].size = ISP3X_3DLUT_BUF_SIZE; - ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); - if (ret) { - dev_err(dev, "can not alloc 3dlut buffer\n"); - goto err; + for (id = 0; id <= ispdev->hw_dev->is_unite; id++) { + priv_val->buf_3dlut_idx[id] = 0; + for (i = 0; i < ISP3X_3DLUT_BUF_NUM; i++) { + priv_val->buf_3dlut[id][i].is_need_vaddr = true; + priv_val->buf_3dlut[id][i].size = ISP3X_3DLUT_BUF_SIZE; + ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_3dlut[id][i]); + if (ret) { + dev_err(dev, "can not alloc 3dlut buffer\n"); + goto err; + } } - } - priv_val->buf_lsclut_idx = 0; - for (i = 0; i < ISP3X_LSC_LUT_BUF_NUM; i++) { - priv_val->buf_lsclut[i].is_need_vaddr = true; - priv_val->buf_lsclut[i].size = ISP3X_LSC_LUT_BUF_SIZE; - ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); - if (ret) { - dev_err(dev, "can not alloc lsclut buffer\n"); - goto err; + priv_val->buf_lsclut_idx[id] = 0; + for (i = 0; i < ISP3X_LSC_LUT_BUF_NUM; i++) { + priv_val->buf_lsclut[id][i].is_need_vaddr = true; + priv_val->buf_lsclut[id][i].size = ISP3X_LSC_LUT_BUF_SIZE; + ret = rkisp_alloc_buffer(params_vdev->dev, &priv_val->buf_lsclut[id][i]); + if (ret) { + dev_err(dev, "can not alloc lsclut buffer\n"); + goto err; + } } } @@ -4324,11 +4496,13 @@ int rkisp_init_params_vdev_v3x(struct rkisp_isp_params_vdev *params_vdev) return 0; err: - for (i = 0; i < ISP3X_3DLUT_BUF_NUM; i++) - rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); + for (id = 0; id <= ispdev->hw_dev->is_unite; id++) { + for (i = 0; i < ISP3X_3DLUT_BUF_NUM; i++) + rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[id][i]); - for (i = 0; i < ISP3X_LSC_LUT_BUF_NUM; i++) - rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); + for (i = 0; i < ISP3X_LSC_LUT_BUF_NUM; i++) + rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[id][i]); + } vfree(params_vdev->isp3x_params); return ret; @@ -4336,20 +4510,23 @@ err: void rkisp_uninit_params_vdev_v3x(struct rkisp_isp_params_vdev *params_vdev) { + struct rkisp_device *ispdev = params_vdev->dev; struct rkisp_isp_params_val_v3x *priv_val; - int i; + int i, id; priv_val = params_vdev->priv_val; if (!priv_val) return; - rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_LDCH); - rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_CAC); - for (i = 0; i < ISP3X_3DLUT_BUF_NUM; i++) - rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[i]); + for (id = 0; id <= ispdev->hw_dev->is_unite; id++) { + rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_LDCH, id); + rkisp_deinit_mesh_buf(params_vdev, ISP3X_MODULE_CAC, id); + for (i = 0; i < ISP3X_3DLUT_BUF_NUM; i++) + rkisp_free_buffer(params_vdev->dev, &priv_val->buf_3dlut[id][i]); - for (i = 0; i < ISP3X_LSC_LUT_BUF_NUM; i++) - rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[i]); + for (i = 0; i < ISP3X_LSC_LUT_BUF_NUM; i++) + rkisp_free_buffer(params_vdev->dev, &priv_val->buf_lsclut[id][i]); + } vfree(params_vdev->isp3x_params); kfree(priv_val); params_vdev->priv_val = NULL; diff --git a/drivers/media/platform/rockchip/isp/isp_params_v3x.h b/drivers/media/platform/rockchip/isp/isp_params_v3x.h index 2b8ebd3cc299..abeb92fec119 100644 --- a/drivers/media/platform/rockchip/isp/isp_params_v3x.h +++ b/drivers/media/platform/rockchip/isp/isp_params_v3x.h @@ -29,161 +29,163 @@ struct rkisp_isp_params_vdev; struct rkisp_isp_params_ops_v3x { void (*dpcc_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_dpcc_cfg *arg); + const struct isp2x_dpcc_cfg *arg, u32 id); void (*dpcc_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*bls_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_bls_cfg *arg); + const struct isp21_bls_cfg *arg, u32 id); void (*bls_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*sdg_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_sdg_cfg *arg); + const struct isp2x_sdg_cfg *arg, u32 id); void (*sdg_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*lsc_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_lsc_cfg *arg); + const struct isp3x_lsc_cfg *arg, u32 id); void (*lsc_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*awbgain_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_awb_gain_cfg *arg); + const struct isp21_awb_gain_cfg *arg, u32 id); void (*awbgain_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*debayer_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_debayer_cfg *arg); + const struct isp2x_debayer_cfg *arg, u32 id); void (*debayer_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*ccm_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_ccm_cfg *arg); + const struct isp21_ccm_cfg *arg, u32 id); void (*ccm_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*goc_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_gammaout_cfg *arg); + const struct isp3x_gammaout_cfg *arg, u32 id); void (*goc_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*cproc_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_cproc_cfg *arg); + const struct isp2x_cproc_cfg *arg, u32 id); void (*cproc_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*ie_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_ie_cfg *arg); + const struct isp2x_ie_cfg *arg, u32 id); void (*ie_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawaf_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_rawaf_meas_cfg *arg); + const struct isp3x_rawaf_meas_cfg *arg, u32 id); void (*rawaf_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawae0_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawaelite_meas_cfg *arg); + const struct isp2x_rawaelite_meas_cfg *arg, u32 id); void (*rawae0_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawae1_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawaebig_meas_cfg *arg); + const struct isp2x_rawaebig_meas_cfg *arg, u32 id); void (*rawae1_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawae2_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawaebig_meas_cfg *arg); + const struct isp2x_rawaebig_meas_cfg *arg, u32 id); void (*rawae2_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawae3_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawaebig_meas_cfg *arg); + const struct isp2x_rawaebig_meas_cfg *arg, u32 id); void (*rawae3_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawawb_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_rawawb_meas_cfg *arg); + const struct isp3x_rawawb_meas_cfg *arg, u32 id); void (*rawawb_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawhst0_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawhistlite_cfg *arg); + const struct isp2x_rawhistlite_cfg *arg, u32 id); void (*rawhst0_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawhst1_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawhistbig_cfg *arg); + const struct isp2x_rawhistbig_cfg *arg, u32 id); void (*rawhst1_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawhst2_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawhistbig_cfg *arg); + const struct isp2x_rawhistbig_cfg *arg, u32 id); void (*rawhst2_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*rawhst3_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_rawhistbig_cfg *arg); + const struct isp2x_rawhistbig_cfg *arg, u32 id); void (*rawhst3_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*hdrdrc_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_drc_cfg *arg, enum rkisp_params_type type); + const struct isp3x_drc_cfg *arg, + enum rkisp_params_type type, u32 id); void (*hdrdrc_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*hdrmge_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_hdrmge_cfg *arg, enum rkisp_params_type type); + const struct isp3x_hdrmge_cfg *arg, + enum rkisp_params_type type, u32 id); void (*hdrmge_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*gic_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp21_gic_cfg *arg); + const struct isp21_gic_cfg *arg, u32 id); void (*gic_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*dhaz_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_dhaz_cfg *arg); + const struct isp3x_dhaz_cfg *arg, u32 id); void (*dhaz_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*isp3dlut_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_3dlut_cfg *arg); + const struct isp2x_3dlut_cfg *arg, u32 id); void (*isp3dlut_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*ldch_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp2x_ldch_cfg *arg); + const struct isp2x_ldch_cfg *arg, u32 id); void (*ldch_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*ynr_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_ynr_cfg *arg); + const struct isp3x_ynr_cfg *arg, u32 id); void (*ynr_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en, const struct isp3x_ynr_cfg *arg); + bool en, const struct isp3x_ynr_cfg *arg, u32 id); void (*cnr_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_cnr_cfg *arg); + const struct isp3x_cnr_cfg *arg, u32 id); void (*cnr_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en, const struct isp3x_cnr_cfg *arg); + bool en, const struct isp3x_cnr_cfg *arg, u32 id); void (*sharp_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_sharp_cfg *arg); + const struct isp3x_sharp_cfg *arg, u32 id); void (*sharp_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*baynr_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_baynr_cfg *arg); + const struct isp3x_baynr_cfg *arg, u32 id); void (*baynr_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*bay3d_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_bay3d_cfg *arg); + const struct isp3x_bay3d_cfg *arg, u32 id); void (*bay3d_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*gain_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_gain_cfg *arg); + const struct isp3x_gain_cfg *arg, u32 id); void (*gain_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); void (*cac_config)(struct rkisp_isp_params_vdev *params_vdev, - const struct isp3x_cac_cfg *arg); + const struct isp3x_cac_cfg *arg, u32 id); void (*cac_enable)(struct rkisp_isp_params_vdev *params_vdev, - bool en); + bool en, u32 id); }; struct rkisp_isp_params_val_v3x { - struct rkisp_dummy_buffer buf_3dlut[ISP3X_3DLUT_BUF_NUM]; - u32 buf_3dlut_idx; + struct rkisp_dummy_buffer buf_3dlut[ISP3_UNITE_MAX][ISP3X_3DLUT_BUF_NUM]; + u32 buf_3dlut_idx[ISP3_UNITE_MAX]; - struct rkisp_dummy_buffer buf_ldch[ISP3X_MESH_BUF_NUM]; - u32 buf_ldch_idx; + struct rkisp_dummy_buffer buf_ldch[ISP3_UNITE_MAX][ISP3X_MESH_BUF_NUM]; + u32 buf_ldch_idx[ISP3_UNITE_MAX]; - struct rkisp_dummy_buffer buf_lsclut[ISP3X_LSC_LUT_BUF_NUM]; - u32 buf_lsclut_idx; + struct rkisp_dummy_buffer buf_lsclut[ISP3_UNITE_MAX][ISP3X_LSC_LUT_BUF_NUM]; + u32 buf_lsclut_idx[ISP3_UNITE_MAX]; - struct rkisp_dummy_buffer buf_cac[ISP3X_MESH_BUF_NUM]; - u32 buf_cac_idx; + struct rkisp_dummy_buffer buf_cac[ISP3_UNITE_MAX][ISP3X_MESH_BUF_NUM]; + u32 buf_cac_idx[ISP3_UNITE_MAX]; - struct rkisp_dummy_buffer buf_3dnr_iir; - struct rkisp_dummy_buffer buf_3dnr_cur; - struct rkisp_dummy_buffer buf_3dnr_ds; + struct rkisp_dummy_buffer buf_3dnr_iir[ISP3_UNITE_MAX]; + struct rkisp_dummy_buffer buf_3dnr_cur[ISP3_UNITE_MAX]; + struct rkisp_dummy_buffer buf_3dnr_ds[ISP3_UNITE_MAX]; struct isp3x_hdrmge_cfg last_hdrmge; struct isp3x_drc_cfg last_hdrdrc; struct isp3x_hdrmge_cfg cur_hdrmge; struct isp3x_drc_cfg cur_hdrdrc; - struct isp3x_lsc_cfg cur_lsccfg; + struct isp3x_lsc_cfg cur_lsccfg[ISP3_UNITE_MAX]; bool dhaz_en; bool drc_en; diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v3x.c b/drivers/media/platform/rockchip/isp/isp_stats_v3x.c index 114850cb944c..c7faaade192a 100644 --- a/drivers/media/platform/rockchip/isp/isp_stats_v3x.c +++ b/drivers/media/platform/rockchip/isp/isp_stats_v3x.c @@ -28,123 +28,156 @@ #define ISP2X_RAWAF_INT_LINE0_EN BIT(27) +static u32 isp3_stats_read(struct rkisp_isp_stats_vdev *stats_vdev, + u32 addr, u32 id) +{ + u32 val; + + if (id == ISP3_LEFT) + val = rkisp_read(stats_vdev->dev, addr, true); + else + val = rkisp_next_read(stats_vdev->dev, addr, true); + 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, true); + else + rkisp_next_write(stats_vdev->dev, addr, value, true); +} + static int rkisp_stats_get_rawawb_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { u64 msb, lsb; - u32 value; + u32 value, ctrl; int i; - value = rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_CTRL, true); - if (!(value & ISP3X_3A_MEAS_DONE)) + ctrl = isp3_stats_read(stats_vdev, ISP3X_RAWAWB_CTRL, id); + if (!(ctrl & ISP3X_3A_MEAS_DONE)) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d ctrl:0x%x\n", __func__, id, ctrl); return -ENODATA; + } if (!pbuf) - return 0; + goto out; pbuf->meas_type |= ISP3X_STAT_RAWAWB; for (i = 0; i < ISP3X_RAWAWB_HSTBIN_NUM / 2; i++) { - value = rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_Y_HIST01 + 4 * i, true); + value = isp3_stats_read(stats_vdev, ISP3X_RAWAWB_Y_HIST01 + 4 * i, id); pbuf->params.rawawb.ro_yhist_bin[2 * i] = value & 0xFFFF; pbuf->params.rawawb.ro_yhist_bin[2 * i + 1] = (value & 0xFFFF0000) >> 16; } for (i = 0; i < ISP3X_RAWAWB_SUM_NUM; i++) { pbuf->params.rawawb.ro_rawawb_sum_rgain_nor[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_SUM_RGAIN_NOR_0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_SUM_RGAIN_NOR_0 + 0x30 * i, id); pbuf->params.rawawb.ro_rawawb_sum_bgain_nor[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_SUM_BGAIN_NOR_0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_SUM_BGAIN_NOR_0 + 0x30 * i, id); pbuf->params.rawawb.ro_rawawb_wp_num_nor[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_WP_NUM_NOR_0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_WP_NUM_NOR_0 + 0x30 * i, id); pbuf->params.rawawb.ro_rawawb_sum_rgain_big[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_SUM_RGAIN_BIG_0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_SUM_RGAIN_BIG_0 + 0x30 * i, id); pbuf->params.rawawb.ro_rawawb_sum_bgain_big[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_SUM_BGAIN_BIG_0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_SUM_BGAIN_BIG_0 + 0x30 * i, id); pbuf->params.rawawb.ro_rawawb_wp_num_big[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_WP_NUM_BIG_0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_WP_NUM_BIG_0 + 0x30 * i, id); pbuf->params.rawawb.ro_wp_num2[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_WPNUM2_0 + 4 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_WPNUM2_0 + 4 * i, id); } for (i = 0; i < ISP3X_RAWAWB_MULWD_NUM; i++) { pbuf->params.rawawb.ro_sum_r_nor_multiwindow[i] = - rkisp_read(stats_vdev->dev, - ISP3X_RAWAWB_SUM_R_NOR_MULTIWINDOW0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, + ISP3X_RAWAWB_SUM_R_NOR_MULTIWINDOW0 + 0x30 * i, id); pbuf->params.rawawb.ro_sum_b_nor_multiwindow[i] = - rkisp_read(stats_vdev->dev, - ISP3X_RAWAWB_SUM_B_NOR_MULTIWINDOW0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, + ISP3X_RAWAWB_SUM_B_NOR_MULTIWINDOW0 + 0x30 * i, id); pbuf->params.rawawb.ro_wp_nm_nor_multiwindow[i] = - rkisp_read(stats_vdev->dev, - ISP3X_RAWAWB_WP_NM_NOR_MULTIWINDOW0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, + ISP3X_RAWAWB_WP_NM_NOR_MULTIWINDOW0 + 0x30 * i, id); pbuf->params.rawawb.ro_sum_r_big_multiwindow[i] = - rkisp_read(stats_vdev->dev, - ISP3X_RAWAWB_SUM_R_BIG_MULTIWINDOW0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, + ISP3X_RAWAWB_SUM_R_BIG_MULTIWINDOW0 + 0x30 * i, id); pbuf->params.rawawb.ro_sum_b_big_multiwindow[i] = - rkisp_read(stats_vdev->dev, - ISP3X_RAWAWB_SUM_B_BIG_MULTIWINDOW0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, + ISP3X_RAWAWB_SUM_B_BIG_MULTIWINDOW0 + 0x30 * i, id); pbuf->params.rawawb.ro_wp_nm_big_multiwindow[i] = - rkisp_read(stats_vdev->dev, - ISP3X_RAWAWB_WP_NM_BIG_MULTIWINDOW0 + 0x30 * i, true); + isp3_stats_read(stats_vdev, + ISP3X_RAWAWB_WP_NM_BIG_MULTIWINDOW0 + 0x30 * i, id); } for (i = 0; i < ISP3X_RAWAWB_EXCL_STAT_NUM; i++) { pbuf->params.rawawb.ro_sum_r_exc[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_SUM_R_EXC0 + 0x10 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_SUM_R_EXC0 + 0x10 * i, id); pbuf->params.rawawb.ro_sum_b_exc[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_SUM_B_EXC0 + 0x10 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_SUM_B_EXC0 + 0x10 * i, id); pbuf->params.rawawb.ro_wp_nm_exc[i] = - rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_WP_NM_EXC0 + 0x10 * i, true); + isp3_stats_read(stats_vdev, ISP3X_RAWAWB_WP_NM_EXC0 + 0x10 * i, id); } for (i = 0; i < ISP3X_RAWAWB_RAMDATA_NUM; i++) { - lsb = rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_RAM_DATA_BASE, true); - msb = rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_RAM_DATA_BASE, true); + lsb = isp3_stats_read(stats_vdev, ISP3X_RAWAWB_RAM_DATA_BASE, id); + msb = isp3_stats_read(stats_vdev, ISP3X_RAWAWB_RAM_DATA_BASE, id); pbuf->params.rawawb.ramdata[i].b = lsb & 0x3FFFF; pbuf->params.rawawb.ramdata[i].g = ((lsb & 0xFFFC0000) >> 18) | (msb & 0xF) << 14; pbuf->params.rawawb.ramdata[i].r = (msb & 0x3FFFF0) >> 4; pbuf->params.rawawb.ramdata[i].wp = (msb & 0xFFC00000) >> 22; } +out: + isp3_stats_write(stats_vdev, ISP3X_RAWAWB_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawaf_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { struct isp3x_rawaf_stat *af; - u32 i, value; + u32 i, ctrl; - value = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_CTRL, true); - if (!(value & ISP3X_3A_MEAS_DONE)) + ctrl = isp3_stats_read(stats_vdev, ISP3X_RAWAF_CTRL, id); + if (!(ctrl & ISP3X_3A_MEAS_DONE)) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d ctrl:0x%x\n", __func__, id, ctrl); return -ENODATA; + } if (!pbuf) - return 0; + goto out; af = &pbuf->params.rawaf; pbuf->meas_type |= ISP3X_STAT_RAWAF; - af->afm_sum_b = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_SUM_B, true); - af->afm_lum_b = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_LUM_B, true); - af->int_state = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_INT_STATE, true); - af->highlit_cnt_winb = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_HIGHLIT_CNT_WINB, true); + af->afm_sum_b = isp3_stats_read(stats_vdev, ISP3X_RAWAF_SUM_B, id); + af->afm_lum_b = isp3_stats_read(stats_vdev, ISP3X_RAWAF_LUM_B, id); + af->int_state = isp3_stats_read(stats_vdev, ISP3X_RAWAF_INT_STATE, id); + af->highlit_cnt_winb = isp3_stats_read(stats_vdev, ISP3X_RAWAF_HIGHLIT_CNT_WINB, id); for (i = 0; i < ISP3X_RAWAF_SUMDATA_NUM; i++) { - af->ramdata[i].v1 = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_RAM_DATA, true); - af->ramdata[i].v2 = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_RAM_DATA, true); - af->ramdata[i].h1 = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_RAM_DATA, true); - af->ramdata[i].h2 = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_RAM_DATA, true); + af->ramdata[i].v1 = isp3_stats_read(stats_vdev, ISP3X_RAWAF_RAM_DATA, id); + af->ramdata[i].v2 = isp3_stats_read(stats_vdev, ISP3X_RAWAF_RAM_DATA, id); + af->ramdata[i].h1 = isp3_stats_read(stats_vdev, ISP3X_RAWAF_RAM_DATA, id); + af->ramdata[i].h2 = isp3_stats_read(stats_vdev, ISP3X_RAWAF_RAM_DATA, id); } + +out: + isp3_stats_write(stats_vdev, ISP3X_RAWAF_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawaebig_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct isp2x_rawaebig_stat *ae, u32 blk_no) + struct isp2x_rawaebig_stat *ae, + u32 blk_no, u32 id) { - u32 addr, value; + u32 addr, value, ctrl; int i; switch (blk_no) { @@ -160,40 +193,48 @@ rkisp_stats_get_rawaebig_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, break; } - value = rkisp_read(stats_vdev->dev, addr + ISP3X_RAWAE_BIG_CTRL, true); - if (!(value & ISP3X_3A_MEAS_DONE)) + ctrl = isp3_stats_read(stats_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id); + if (!(ctrl & ISP3X_3A_MEAS_DONE)) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d addr:0x%x ctrl:0x%x\n", + __func__, id, addr, ctrl); return -ENODATA; + } if (!ae) - return 0; + goto out; for (i = 0; i < ISP3X_RAWAEBIG_SUBWIN_NUM; i++) - ae->sumr[i] = rkisp_read(stats_vdev->dev, - addr + ISP3X_RAWAE_BIG_WND1_SUMR + i * 4, true); + ae->sumr[i] = isp3_stats_read(stats_vdev, + addr + ISP3X_RAWAE_BIG_WND1_SUMR + i * 4, id); for (i = 0; i < ISP3X_RAWAEBIG_SUBWIN_NUM; i++) - ae->sumg[i] = rkisp_read(stats_vdev->dev, - addr + ISP3X_RAWAE_BIG_WND1_SUMG + i * 4, true); + ae->sumg[i] = isp3_stats_read(stats_vdev, + addr + ISP3X_RAWAE_BIG_WND1_SUMG + i * 4, id); for (i = 0; i < ISP3X_RAWAEBIG_SUBWIN_NUM; i++) - ae->sumb[i] = rkisp_read(stats_vdev->dev, - addr + ISP3X_RAWAE_BIG_WND1_SUMB + i * 4, true); + ae->sumb[i] = isp3_stats_read(stats_vdev, + addr + ISP3X_RAWAE_BIG_WND1_SUMB + i * 4, id); for (i = 0; i < ISP3X_RAWAEBIG_MEAN_NUM; i++) { - value = rkisp_read(stats_vdev->dev, addr + ISP3X_RAWAE_BIG_RO_MEAN_BASE_ADDR, true); + value = isp3_stats_read(stats_vdev, + addr + ISP3X_RAWAE_BIG_RO_MEAN_BASE_ADDR, id); ae->data[i].channelg_xy = ISP3X_RAWAEBIG_GET_MEAN_G(value); ae->data[i].channelb_xy = ISP3X_RAWAEBIG_GET_MEAN_B(value); ae->data[i].channelr_xy = ISP3X_RAWAEBIG_GET_MEAN_R(value); } +out: + isp3_stats_write(stats_vdev, addr + ISP3X_RAWAE_BIG_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawhstbig_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct isp2x_rawhistbig_stat *hst, u32 blk_no) + struct isp2x_rawhistbig_stat *hst, + u32 blk_no, u32 id) { - u32 addr, value; + u32 addr, ctrl; int i; switch (blk_no) { @@ -209,31 +250,37 @@ rkisp_stats_get_rawhstbig_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, break; } - value = rkisp_read(stats_vdev->dev, addr + ISP3X_RAWHIST_BIG_CTRL, true); - if (!(value & ISP3X_3A_MEAS_DONE)) + ctrl = isp3_stats_read(stats_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id); + if (!(ctrl & ISP3X_3A_MEAS_DONE)) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d addr:0x%x ctrl:0x%x\n", + __func__, id, addr, ctrl); return -ENODATA; - - if (!hst) - return 0; - - for (i = 0; i < ISP3X_HIST_BIN_N_MAX; i++) { - hst->hist_bin[i] = rkisp_read(stats_vdev->dev, - addr + ISP3X_RAWHIST_BIG_RO_BASE_BIN, true); } + if (!hst) + goto out; + + for (i = 0; i < ISP3X_HIST_BIN_N_MAX; i++) + hst->hist_bin[i] = isp3_stats_read(stats_vdev, + addr + ISP3X_RAWHIST_BIG_RO_BASE_BIN, id); + +out: + isp3_stats_write(stats_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawae1_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawaebig_meas_reg(stats_vdev, NULL, 1); + rkisp_stats_get_rawaebig_meas_reg(stats_vdev, NULL, 1, id); } else { - ret = rkisp_stats_get_rawaebig_meas_reg(stats_vdev, &pbuf->params.rawae1, 1); + ret = rkisp_stats_get_rawaebig_meas_reg(stats_vdev, + &pbuf->params.rawae1, 1, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWAE1; } @@ -243,14 +290,15 @@ rkisp_stats_get_rawae1_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawhst1_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, NULL, 1); + rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, NULL, 1, id); } else { - ret = rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, &pbuf->params.rawhist1, 1); + ret = rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, + &pbuf->params.rawhist1, 1, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWHST1; } @@ -260,14 +308,15 @@ rkisp_stats_get_rawhst1_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawae2_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawaebig_meas_reg(stats_vdev, NULL, 2); + rkisp_stats_get_rawaebig_meas_reg(stats_vdev, NULL, 2, id); } else { - ret = rkisp_stats_get_rawaebig_meas_reg(stats_vdev, &pbuf->params.rawae2, 2); + ret = rkisp_stats_get_rawaebig_meas_reg(stats_vdev, + &pbuf->params.rawae2, 2, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWAE2; } @@ -277,14 +326,15 @@ rkisp_stats_get_rawae2_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawhst2_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, NULL, 2); + rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, NULL, 2, id); } else { - ret = rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, &pbuf->params.rawhist2, 2); + ret = rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, + &pbuf->params.rawhist2, 2, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWHST2; } @@ -294,14 +344,15 @@ rkisp_stats_get_rawhst2_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawae3_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawaebig_meas_reg(stats_vdev, NULL, 0); + rkisp_stats_get_rawaebig_meas_reg(stats_vdev, NULL, 0, id); } else { - ret = rkisp_stats_get_rawaebig_meas_reg(stats_vdev, &pbuf->params.rawae3, 0); + ret = rkisp_stats_get_rawaebig_meas_reg(stats_vdev, + &pbuf->params.rawae3, 0, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWAE3; } @@ -311,14 +362,15 @@ rkisp_stats_get_rawae3_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawhst3_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, NULL, 0); + rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, NULL, 0, id); } else { - ret = rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, &pbuf->params.rawhist3, 0); + ret = rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, + &pbuf->params.rawhist3, 0, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWHST3; } @@ -328,58 +380,68 @@ rkisp_stats_get_rawhst3_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawaelite_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { struct isp2x_rawaelite_stat *ae; - u32 value; + u32 value, ctrl; int i; - value = rkisp_read(stats_vdev->dev, ISP3X_RAWAE_LITE_CTRL, true); - if ((value & ISP3X_3A_MEAS_DONE) == 0) + ctrl = isp3_stats_read(stats_vdev, ISP3X_RAWAE_LITE_CTRL, id); + if ((ctrl & ISP3X_3A_MEAS_DONE) == 0) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d ctrl:0x%x\n", __func__, id, ctrl); return -ENODATA; + } if (!pbuf) - return 0; + goto out; pbuf->meas_type |= ISP3X_STAT_RAWAE0; ae = &pbuf->params.rawae0; for (i = 0; i < ISP3X_RAWAELITE_MEAN_NUM; i++) { - value = rkisp_read(stats_vdev->dev, ISP3X_RAWAE_LITE_RO_MEAN + 4 * i, true); + value = isp3_stats_read(stats_vdev, ISP3X_RAWAE_LITE_RO_MEAN + 4 * i, id); ae->data[i].channelg_xy = ISP3X_RAWAEBIG_GET_MEAN_G(value); ae->data[i].channelb_xy = ISP3X_RAWAEBIG_GET_MEAN_B(value); ae->data[i].channelr_xy = ISP3X_RAWAEBIG_GET_MEAN_R(value); } +out: + isp3_stats_write(stats_vdev, ISP3X_RAWAE_LITE_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawhstlite_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { struct isp2x_rawhistlite_stat *hst; - u32 value; + u32 ctrl; int i; - value = rkisp_read(stats_vdev->dev, ISP3X_RAWHIST_LITE_CTRL, true); - if ((value & ISP3X_3A_MEAS_DONE) == 0) + ctrl = isp3_stats_read(stats_vdev, ISP3X_RAWHIST_LITE_CTRL, id); + if ((ctrl & ISP3X_3A_MEAS_DONE) == 0) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d ctrl:0x%x\n", __func__, id, ctrl); return -ENODATA; + } if (!pbuf) - return 0; + goto out; pbuf->meas_type |= ISP3X_STAT_RAWHST0; hst = &pbuf->params.rawhist0; for (i = 0; i < ISP3X_HIST_BIN_N_MAX; i++) - hst->hist_bin[i] = rkisp_read(stats_vdev->dev, - ISP3X_RAWHIST_LITE_RO_BASE_BIN, true); + hst->hist_bin[i] = isp3_stats_read(stats_vdev, + ISP3X_RAWHIST_LITE_RO_BASE_BIN, id); +out: + isp3_stats_write(stats_vdev, ISP3X_RAWHIST_LITE_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_bls_stats(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { struct ispsd_in_fmt in_fmt = stats_vdev->dev->isp_sdev.in_fmt; enum rkisp_fmt_raw_pat_type raw_type = in_fmt.bayer_pat; @@ -390,34 +452,34 @@ rkisp_stats_get_bls_stats(struct rkisp_isp_stats_vdev *stats_vdev, return 0; bls = &pbuf->params.bls; - value = rkisp_read(stats_vdev->dev, ISP3X_BLS_CTRL, true); + value = isp3_stats_read(stats_vdev, ISP3X_BLS_CTRL, id); if (value & (ISP_BLS_ENA | ISP_BLS_MODE_MEASURED)) { pbuf->meas_type |= ISP3X_STAT_BLS; switch (raw_type) { case RAW_BGGR: - bls->meas_r = rkisp_read(stats_vdev->dev, ISP3X_BLS_D_MEASURED, true); - bls->meas_gr = rkisp_read(stats_vdev->dev, ISP3X_BLS_C_MEASURED, true); - bls->meas_gb = rkisp_read(stats_vdev->dev, ISP3X_BLS_B_MEASURED, true); - bls->meas_b = rkisp_read(stats_vdev->dev, ISP3X_BLS_A_MEASURED, true); + bls->meas_r = isp3_stats_read(stats_vdev, ISP3X_BLS_D_MEASURED, id); + bls->meas_gr = isp3_stats_read(stats_vdev, ISP3X_BLS_C_MEASURED, id); + bls->meas_gb = isp3_stats_read(stats_vdev, ISP3X_BLS_B_MEASURED, id); + bls->meas_b = isp3_stats_read(stats_vdev, ISP3X_BLS_A_MEASURED, id); break; case RAW_GBRG: - bls->meas_r = rkisp_read(stats_vdev->dev, ISP3X_BLS_C_MEASURED, true); - bls->meas_gr = rkisp_read(stats_vdev->dev, ISP3X_BLS_D_MEASURED, true); - bls->meas_gb = rkisp_read(stats_vdev->dev, ISP3X_BLS_A_MEASURED, true); - bls->meas_b = rkisp_read(stats_vdev->dev, ISP3X_BLS_B_MEASURED, true); + bls->meas_r = isp3_stats_read(stats_vdev, ISP3X_BLS_C_MEASURED, id); + bls->meas_gr = isp3_stats_read(stats_vdev, ISP3X_BLS_D_MEASURED, id); + bls->meas_gb = isp3_stats_read(stats_vdev, ISP3X_BLS_A_MEASURED, id); + bls->meas_b = isp3_stats_read(stats_vdev, ISP3X_BLS_B_MEASURED, id); break; case RAW_GRBG: - bls->meas_r = rkisp_read(stats_vdev->dev, ISP3X_BLS_B_MEASURED, true); - bls->meas_gr = rkisp_read(stats_vdev->dev, ISP3X_BLS_A_MEASURED, true); - bls->meas_gb = rkisp_read(stats_vdev->dev, ISP3X_BLS_D_MEASURED, true); - bls->meas_b = rkisp_read(stats_vdev->dev, ISP3X_BLS_C_MEASURED, true); + bls->meas_r = isp3_stats_read(stats_vdev, ISP3X_BLS_B_MEASURED, id); + bls->meas_gr = isp3_stats_read(stats_vdev, ISP3X_BLS_A_MEASURED, id); + bls->meas_gb = isp3_stats_read(stats_vdev, ISP3X_BLS_D_MEASURED, id); + bls->meas_b = isp3_stats_read(stats_vdev, ISP3X_BLS_C_MEASURED, id); break; case RAW_RGGB: - bls->meas_r = rkisp_read(stats_vdev->dev, ISP3X_BLS_A_MEASURED, true); - bls->meas_gr = rkisp_read(stats_vdev->dev, ISP3X_BLS_B_MEASURED, true); - bls->meas_gb = rkisp_read(stats_vdev->dev, ISP3X_BLS_C_MEASURED, true); - bls->meas_b = rkisp_read(stats_vdev->dev, ISP3X_BLS_D_MEASURED, true); + bls->meas_r = isp3_stats_read(stats_vdev, ISP3X_BLS_A_MEASURED, id); + bls->meas_gr = isp3_stats_read(stats_vdev, ISP3X_BLS_B_MEASURED, id); + bls->meas_gb = isp3_stats_read(stats_vdev, ISP3X_BLS_C_MEASURED, id); + bls->meas_b = isp3_stats_read(stats_vdev, ISP3X_BLS_D_MEASURED, id); break; default: break; @@ -428,7 +490,7 @@ rkisp_stats_get_bls_stats(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_dhaz_stats(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { struct isp3x_dhaz_stat *dhaz; u32 value, i; @@ -437,23 +499,23 @@ rkisp_stats_get_dhaz_stats(struct rkisp_isp_stats_vdev *stats_vdev, return 0; dhaz = &pbuf->params.dhaz; - value = rkisp_read(stats_vdev->dev, ISP3X_DHAZ_CTRL, true); + value = isp3_stats_read(stats_vdev, ISP3X_DHAZ_CTRL, id); if (value & ISP_DHAZ_ENMUX) { pbuf->meas_type |= ISP3X_STAT_DHAZ; - value = rkisp_read(stats_vdev->dev, ISP3X_DHAZ_SUMH_RD, true); + value = isp3_stats_read(stats_vdev, ISP3X_DHAZ_SUMH_RD, id); dhaz->dhaz_pic_sumh = value; - value = rkisp_read(stats_vdev->dev, ISP3X_DHAZ_ADP_RD0, true); + value = isp3_stats_read(stats_vdev, ISP3X_DHAZ_ADP_RD0, id); dhaz->dhaz_adp_air_base = value >> 16; dhaz->dhaz_adp_wt = value & 0xFFFF; - value = rkisp_read(stats_vdev->dev, ISP3X_DHAZ_ADP_RD1, true); + value = isp3_stats_read(stats_vdev, ISP3X_DHAZ_ADP_RD1, id); dhaz->dhaz_adp_gratio = value >> 16; dhaz->dhaz_adp_tmax = value & 0xFFFF; for (i = 0; i < ISP3X_DHAZ_HIST_IIR_NUM / 2; i++) { - value = rkisp_read(stats_vdev->dev, ISP3X_DHAZ_HIST_REG0 + 4 * i, true); + value = isp3_stats_read(stats_vdev, ISP3X_DHAZ_HIST_REG0 + 4 * i, id); dhaz->h_rgb_iir[2 * i] = value & 0xFFFF; dhaz->h_rgb_iir[2 * i + 1] = value >> 16; } @@ -478,22 +540,30 @@ static struct rkisp_stats_ops_v3x __maybe_unused stats_reg_ops_v3x = { static int rkisp_stats_get_rawawb_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { struct isp3x_rawawb_meas_stat *rawawb; - u32 value, rd_buf_idx; + u32 offs = id * ISP3X_RD_STATS_BUF_SIZE; + u32 value, rd_buf_idx, ctrl; u32 *reg_addr, *raw_addr; u64 msb, lsb; u32 i; + ctrl = isp3_stats_read(stats_vdev, ISP3X_RAWAWB_CTRL, id); + if (!(ctrl & ISP3X_3A_MEAS_DONE)) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d ctrl:0x%x\n", __func__, id, ctrl); + return -ENODATA; + } + if (!pbuf) - return 0; + goto out; rawawb = &pbuf->params.rawawb; pbuf->meas_type |= ISP3X_STAT_RAWAWB; rd_buf_idx = stats_vdev->rd_buf_idx; - raw_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + 0x2b00; - reg_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + 0x2b00 + 0x710; + raw_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + offs + 0x2b00; + reg_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + offs + 0x2b00 + 0x710; for (i = 0; i < ISP3X_RAWAWB_SUM_NUM; i++) { rawawb->ro_rawawb_sum_rgain_nor[i] = reg_addr[(0x20 * i + 0x0) / 4]; @@ -546,28 +616,39 @@ rkisp_stats_get_rawawb_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, rawawb->ramdata[i].r = (msb & 0x3FFFF0) >> 4; rawawb->ramdata[i].wp = (msb & 0xFFC00000) >> 22; } + +out: + isp3_stats_write(stats_vdev, ISP3X_RAWAWB_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawaf_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { struct isp3x_rawaf_stat *af; - u32 i, rd_buf_idx, *ddr_addr; + u32 offs = id * ISP3X_RD_STATS_BUF_SIZE; + u32 i, rd_buf_idx, *ddr_addr, ctrl; + + ctrl = isp3_stats_read(stats_vdev, ISP3X_RAWAF_CTRL, id); + if (!(ctrl & ISP3X_3A_MEAS_DONE)) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d ctrl:0x%x\n", __func__, id, ctrl); + return -ENODATA; + } if (!pbuf) - return 0; + goto out; af = &pbuf->params.rawaf; pbuf->meas_type |= ISP3X_STAT_RAWAF; rd_buf_idx = stats_vdev->rd_buf_idx; - ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + 0x1C00; + ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + offs + 0x1C00; - af->afm_sum_b = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_SUM_B, true); - af->afm_lum_b = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_LUM_B, true); - af->int_state = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_INT_STATE, true); + af->afm_sum_b = isp3_stats_read(stats_vdev, ISP3X_RAWAF_SUM_B, id); + af->afm_lum_b = isp3_stats_read(stats_vdev, ISP3X_RAWAF_LUM_B, id); + af->int_state = isp3_stats_read(stats_vdev, ISP3X_RAWAF_INT_STATE, id); for (i = 0; i < ISP3X_RAWAF_SUMDATA_NUM; i++) { af->ramdata[i].v1 = ddr_addr[i * 4]; @@ -576,18 +657,22 @@ rkisp_stats_get_rawaf_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, af->ramdata[i].h2 = ddr_addr[i * 4 + 3]; } +out: + isp3_stats_write(stats_vdev, ISP3X_RAWAF_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawaebig_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct isp2x_rawaebig_stat *ae, u32 blk_no) + struct isp2x_rawaebig_stat *ae, + u32 blk_no, u32 id) { - u32 i, value, addr, rd_buf_idx; + u32 offs = id * ISP3X_RD_STATS_BUF_SIZE; + u32 i, value, addr, rd_buf_idx, ctrl; u32 *ddr_addr; rd_buf_idx = stats_vdev->rd_buf_idx; - ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr; + ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + offs; switch (blk_no) { case 1: @@ -603,20 +688,28 @@ rkisp_stats_get_rawaebig_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, break; } + ctrl = isp3_stats_read(stats_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id); + if (!(ctrl & ISP3X_3A_MEAS_DONE)) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d addr:0x%x ctrl:0x%x\n", + __func__, id, addr, ctrl); + return -ENODATA; + } + if (!ae) - return 0; + goto out; for (i = 0; i < ISP3X_RAWAEBIG_SUBWIN_NUM; i++) - ae->sumr[i] = rkisp_read(stats_vdev->dev, - addr + ISP3X_RAWAE_BIG_WND1_SUMR + i * 4, true); + ae->sumr[i] = isp3_stats_read(stats_vdev, + addr + ISP3X_RAWAE_BIG_WND1_SUMR + i * 4, id); for (i = 0; i < ISP3X_RAWAEBIG_SUBWIN_NUM; i++) - ae->sumg[i] = rkisp_read(stats_vdev->dev, - addr + ISP3X_RAWAE_BIG_WND1_SUMG + i * 4, true); + ae->sumg[i] = isp3_stats_read(stats_vdev, + addr + ISP3X_RAWAE_BIG_WND1_SUMG + i * 4, id); for (i = 0; i < ISP3X_RAWAEBIG_SUBWIN_NUM; i++) - ae->sumb[i] = rkisp_read(stats_vdev->dev, - addr + ISP3X_RAWAE_BIG_WND1_SUMB + i * 4, true); + ae->sumb[i] = isp3_stats_read(stats_vdev, + addr + ISP3X_RAWAE_BIG_WND1_SUMB + i * 4, id); for (i = 0; i < ISP3X_RAWAEBIG_MEAN_NUM; i++) { value = ddr_addr[i]; @@ -625,48 +718,67 @@ rkisp_stats_get_rawaebig_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, ae->data[i].channelr_xy = ISP3X_RAWAEBIG_GET_MEAN_R(value); } +out: + isp3_stats_write(stats_vdev, addr + ISP3X_RAWAE_BIG_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawhstbig_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct isp2x_rawhistbig_stat *hst, u32 blk_no) + struct isp2x_rawhistbig_stat *hst, + u32 blk_no, u32 id) { - u32 i, rd_buf_idx, *ddr_addr; + u32 offs = id * ISP3X_RD_STATS_BUF_SIZE; + u32 i, rd_buf_idx, *ddr_addr, addr, ctrl; rd_buf_idx = stats_vdev->rd_buf_idx; - ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + 0x0C00; + ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + offs + 0x0C00; switch (blk_no) { case 1: ddr_addr += 0x0800 >> 2; + addr = ISP3X_RAWHIST_BIG2_BASE; break; case 2: ddr_addr += 0x0C00 >> 2; + addr = ISP3X_RAWHIST_BIG3_BASE; break; + case 0: default: + addr = ISP3X_RAWHIST_BIG1_BASE; break; } + ctrl = isp3_stats_read(stats_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id); + if (!(ctrl & ISP3X_3A_MEAS_DONE)) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d addr:0x%x ctrl:0x%x\n", + __func__, id, addr, ctrl); + return -ENODATA; + } + if (!hst) - return 0; + goto out; for (i = 0; i < ISP3X_HIST_BIN_N_MAX; i++) hst->hist_bin[i] = ddr_addr[i]; +out: + isp3_stats_write(stats_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawae1_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, NULL, 1); + rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, NULL, 1, id); } else { - ret = rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, &pbuf->params.rawae1, 1); + ret = rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, + &pbuf->params.rawae1, 1, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWAE1; } @@ -676,14 +788,15 @@ rkisp_stats_get_rawae1_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawhst1_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, NULL, 1); + rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, NULL, 1, id); } else { - ret = rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, &pbuf->params.rawhist1, 1); + ret = rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, + &pbuf->params.rawhist1, 1, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWHST1; } @@ -693,14 +806,15 @@ rkisp_stats_get_rawhst1_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawae2_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, NULL, 2); + rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, NULL, 2, id); } else { - ret = rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, &pbuf->params.rawae2, 2); + ret = rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, + &pbuf->params.rawae2, 2, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWAE2; } @@ -710,14 +824,15 @@ rkisp_stats_get_rawae2_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawhst2_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, NULL, 2); + rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, NULL, 2, id); } else { - ret = rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, &pbuf->params.rawhist2, 2); + ret = rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, + &pbuf->params.rawhist2, 2, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWHST2; } @@ -727,14 +842,15 @@ rkisp_stats_get_rawhst2_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawae3_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, NULL, 0); + rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, NULL, 0, id); } else { - ret = rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, &pbuf->params.rawae3, 0); + ret = rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, + &pbuf->params.rawae3, 0, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWAE3; } @@ -744,14 +860,15 @@ rkisp_stats_get_rawae3_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawhst3_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { int ret = 0; if (!pbuf) { - rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, NULL, 0); + rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, NULL, 0, id); } else { - ret = rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, &pbuf->params.rawhist3, 0); + ret = rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, + &pbuf->params.rawhist3, 0, id); if (!ret) pbuf->meas_type |= ISP3X_STAT_RAWHST3; } @@ -761,18 +878,26 @@ rkisp_stats_get_rawhst3_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, static int rkisp_stats_get_rawaelite_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { struct isp2x_rawaelite_stat *ae; - u32 i, value, rd_buf_idx, *ddr_addr; + u32 offs = id * ISP3X_RD_STATS_BUF_SIZE; + u32 i, value, rd_buf_idx, *ddr_addr, ctrl; + + ctrl = isp3_stats_read(stats_vdev, ISP3X_RAWAE_LITE_CTRL, id); + if ((ctrl & ISP3X_3A_MEAS_DONE) == 0) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d ctrl:0x%x\n", __func__, id, ctrl); + return -ENODATA; + } if (!pbuf) - return 0; + goto out; pbuf->meas_type |= ISP3X_STAT_RAWAE0; ae = &pbuf->params.rawae0; rd_buf_idx = stats_vdev->rd_buf_idx; - ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + 0x0AB0; + ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + offs + 0x0AB0; for (i = 0; i < ISP3X_RAWAELITE_MEAN_NUM; i++) { value = ddr_addr[i]; ae->data[i].channelg_xy = ISP3X_RAWAEBIG_GET_MEAN_G(value); @@ -780,27 +905,39 @@ rkisp_stats_get_rawaelite_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, ae->data[i].channelr_xy = ISP3X_RAWAEBIG_GET_MEAN_R(value); } +out: + isp3_stats_write(stats_vdev, ISP3X_RAWAE_LITE_CTRL, ctrl, id); return 0; } static int rkisp_stats_get_rawhstlite_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf) + struct rkisp3x_isp_stat_buffer *pbuf, u32 id) { struct isp2x_rawhistlite_stat *hst; - u32 *ddr_addr, rd_buf_idx, i; + u32 offs = id * ISP3X_RD_STATS_BUF_SIZE; + u32 *ddr_addr, rd_buf_idx, i, ctrl; + + ctrl = isp3_stats_read(stats_vdev, ISP3X_RAWHIST_LITE_CTRL, id); + if ((ctrl & ISP3X_3A_MEAS_DONE) == 0) { + v4l2_dbg(1, rkisp_debug, &stats_vdev->dev->v4l2_dev, + "%s fail, id:%d ctrl:0x%x\n", __func__, id, ctrl); + return -ENODATA; + } if (!pbuf) - return 0; + goto out; pbuf->meas_type |= ISP3X_STAT_RAWHST0; hst = &pbuf->params.rawhist0; rd_buf_idx = stats_vdev->rd_buf_idx; - ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + 0x0C00 + 0x0400; + ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + offs + 0x0C00 + 0x0400; for (i = 0; i < ISP3X_HIST_BIN_N_MAX; i++) hst->hist_bin[i] = ddr_addr[i]; +out: + isp3_stats_write(stats_vdev, ISP3X_RAWHIST_LITE_CTRL, ctrl, id); return 0; } @@ -819,151 +956,6 @@ static struct rkisp_stats_ops_v3x __maybe_unused stats_ddr_ops_v3x = { .get_dhaz_stats = rkisp_stats_get_dhaz_stats, }; -static int -rkisp_stats_restart_rawawb_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - u32 value; - - value = rkisp_read(stats_vdev->dev, ISP3X_RAWAWB_CTRL, true); - if (value & ISP3X_3A_MEAS_DONE) - rkisp_write(stats_vdev->dev, ISP3X_RAWAWB_CTRL, value, true); - return 0; -} - -static int -rkisp_stats_restart_rawaf_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - u32 value; - - value = rkisp_read(stats_vdev->dev, ISP3X_RAWAF_CTRL, true); - if (value & ISP3X_3A_MEAS_DONE) { - rkisp_write(stats_vdev->dev, ISP3X_RAWAF_CTRL, value, true); - rkisp_write(stats_vdev->dev, ISP3X_RAWAF_INT_STATE, 0, true); - } - return 0; -} - -static int -rkisp_stats_restart_rawaebig_meas(struct rkisp_isp_stats_vdev *stats_vdev, u32 blk_no) -{ - u32 addr, value; - - switch (blk_no) { - case 1: - addr = ISP3X_RAWAE_BIG2_BASE; - break; - case 2: - addr = ISP3X_RAWAE_BIG3_BASE; - break; - case 0: - default: - addr = ISP3X_RAWAE_BIG1_BASE; - break; - } - - value = rkisp_read(stats_vdev->dev, addr + ISP3X_RAWAE_BIG_CTRL, true); - if (value & ISP3X_3A_MEAS_DONE) - rkisp_write(stats_vdev->dev, addr + ISP3X_RAWAE_BIG_CTRL, value, true); - return 0; -} - -static int -rkisp_stats_restart_rawhstbig_meas(struct rkisp_isp_stats_vdev *stats_vdev, u32 blk_no) -{ - u32 addr, value; - - switch (blk_no) { - case 1: - addr = ISP3X_RAWHIST_BIG2_BASE; - break; - case 2: - addr = ISP3X_RAWHIST_BIG3_BASE; - break; - case 0: - default: - addr = ISP3X_RAWHIST_BIG1_BASE; - break; - } - - value = rkisp_read(stats_vdev->dev, addr + ISP3X_RAWHIST_BIG_CTRL, true); - if (value & ISP3X_3A_MEAS_DONE) - rkisp_write(stats_vdev->dev, addr + ISP3X_RAWHIST_BIG_CTRL, value, true); - return 0; -} - -static int -rkisp_stats_restart_rawae1_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - return rkisp_stats_restart_rawaebig_meas(stats_vdev, 1); -} - -static int -rkisp_stats_restart_rawhst1_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - return rkisp_stats_restart_rawhstbig_meas(stats_vdev, 1); -} - -static int -rkisp_stats_restart_rawae2_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - return rkisp_stats_restart_rawaebig_meas(stats_vdev, 2); -} - -static int -rkisp_stats_restart_rawhst2_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - return rkisp_stats_restart_rawhstbig_meas(stats_vdev, 2); -} - -static int -rkisp_stats_restart_rawae3_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - return rkisp_stats_restart_rawaebig_meas(stats_vdev, 0); -} - -static int -rkisp_stats_restart_rawhst3_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - return rkisp_stats_restart_rawhstbig_meas(stats_vdev, 0); -} - -static int -rkisp_stats_restart_rawae0_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - u32 value; - - value = rkisp_read(stats_vdev->dev, ISP3X_RAWAE_LITE_CTRL, true); - if (value & ISP3X_3A_MEAS_DONE) - rkisp_write(stats_vdev->dev, ISP3X_RAWAE_LITE_CTRL, value, true); - return 0; -} - -static int -rkisp_stats_restart_rawhst0_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - u32 value; - - value = rkisp_read(stats_vdev->dev, ISP3X_RAWHIST_LITE_CTRL, true); - if (value & ISP3X_3A_MEAS_DONE) - rkisp_write(stats_vdev->dev, ISP3X_RAWHIST_LITE_CTRL, value, true); - return 0; -} - -static void -rkisp_stats_restart_meas(struct rkisp_isp_stats_vdev *stats_vdev) -{ - rkisp_stats_restart_rawawb_meas(stats_vdev); - rkisp_stats_restart_rawaf_meas(stats_vdev); - rkisp_stats_restart_rawae1_meas(stats_vdev); - rkisp_stats_restart_rawae2_meas(stats_vdev); - rkisp_stats_restart_rawae3_meas(stats_vdev); - rkisp_stats_restart_rawae0_meas(stats_vdev); - rkisp_stats_restart_rawhst1_meas(stats_vdev); - rkisp_stats_restart_rawhst2_meas(stats_vdev); - rkisp_stats_restart_rawhst3_meas(stats_vdev); - rkisp_stats_restart_rawhst0_meas(stats_vdev); -} - static void rkisp_stats_send_meas_v3x(struct rkisp_isp_stats_vdev *stats_vdev, struct rkisp_isp_readout_work *meas_work) @@ -974,6 +966,7 @@ rkisp_stats_send_meas_v3x(struct rkisp_isp_stats_vdev *stats_vdev, struct rkisp_stats_ops_v3x *ops = (struct rkisp_stats_ops_v3x *)stats_vdev->priv_ops; int ret = 0; + u32 size = sizeof(struct rkisp3x_isp_stat_buffer); cur_frame_id = meas_work->frame_id; spin_lock(&stats_vdev->rd_lock); @@ -1001,54 +994,79 @@ rkisp_stats_send_meas_v3x(struct rkisp_isp_stats_vdev *stats_vdev, v4l2_warn(stats_vdev->vnode.vdev.v4l2_dev, "ISP3X_AFM_LUM_OF\n"); - if (meas_work->isp3a_ris & ISP3X_3A_RAWAWB) - ret |= ops->get_rawawb_meas(stats_vdev, cur_stat_buf); - - if (meas_work->isp3a_ris & ISP3X_3A_RAWAF) - ret |= ops->get_rawaf_meas(stats_vdev, cur_stat_buf); - if (meas_work->isp3a_ris & ISP3X_3A_RAWAF_SUM) v4l2_warn(stats_vdev->vnode.vdev.v4l2_dev, "ISP3X_3A_RAWAF_SUM\n"); - if (meas_work->isp3a_ris & ISP3X_3A_RAWAF_LUM) - v4l2_warn(stats_vdev->vnode.vdev.v4l2_dev, - "ISP3X_3A_RAWAF_LUM\n"); + if (meas_work->isp3a_ris & ISP3X_3A_RAWAWB) + ret |= ops->get_rawawb_meas(stats_vdev, cur_stat_buf, 0); + + if (meas_work->isp3a_ris & ISP3X_3A_RAWAF) + ret |= ops->get_rawaf_meas(stats_vdev, cur_stat_buf, 0); if (meas_work->isp3a_ris & ISP3X_3A_RAWAE_BIG) - ret |= ops->get_rawae3_meas(stats_vdev, cur_stat_buf); + ret |= ops->get_rawae3_meas(stats_vdev, cur_stat_buf, 0); if (meas_work->isp3a_ris & ISP3X_3A_RAWHIST_BIG) - ret |= ops->get_rawhst3_meas(stats_vdev, cur_stat_buf); + ret |= ops->get_rawhst3_meas(stats_vdev, cur_stat_buf, 0); if (meas_work->isp3a_ris & ISP3X_3A_RAWAE_CH0) - ret |= ops->get_rawae0_meas(stats_vdev, cur_stat_buf); + ret |= ops->get_rawae0_meas(stats_vdev, cur_stat_buf, 0); if (meas_work->isp3a_ris & ISP3X_3A_RAWAE_CH1) - ret |= ops->get_rawae1_meas(stats_vdev, cur_stat_buf); + ret |= ops->get_rawae1_meas(stats_vdev, cur_stat_buf, 0); if (meas_work->isp3a_ris & ISP3X_3A_RAWAE_CH2) - ret |= ops->get_rawae2_meas(stats_vdev, cur_stat_buf); + ret |= ops->get_rawae2_meas(stats_vdev, cur_stat_buf, 0); if (meas_work->isp3a_ris & ISP3X_3A_RAWHIST_CH0) - ret |= ops->get_rawhst0_meas(stats_vdev, cur_stat_buf); + ret |= ops->get_rawhst0_meas(stats_vdev, cur_stat_buf, 0); if (meas_work->isp3a_ris & ISP3X_3A_RAWHIST_CH1) - ret |= ops->get_rawhst1_meas(stats_vdev, cur_stat_buf); + ret |= ops->get_rawhst1_meas(stats_vdev, cur_stat_buf, 0); if (meas_work->isp3a_ris & ISP3X_3A_RAWHIST_CH2) - ret |= ops->get_rawhst2_meas(stats_vdev, cur_stat_buf); + ret |= ops->get_rawhst2_meas(stats_vdev, cur_stat_buf, 0); if (meas_work->isp_ris & ISP3X_FRAME) { - ret |= ops->get_bls_stats(stats_vdev, cur_stat_buf); - ret |= ops->get_dhaz_stats(stats_vdev, cur_stat_buf); + ret |= ops->get_bls_stats(stats_vdev, cur_stat_buf, 0); + ret |= ops->get_dhaz_stats(stats_vdev, cur_stat_buf, 0); } - rkisp_stats_restart_meas(stats_vdev); + if (stats_vdev->dev->hw_dev->is_unite) { + size *= 2; + if (cur_buf) { + cur_stat_buf++; + cur_stat_buf->frame_id = cur_frame_id; + } + if (meas_work->isp3a_ris & ISP3X_3A_RAWAWB) + ret |= ops->get_rawawb_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp3a_ris & ISP3X_3A_RAWAF) + ret |= ops->get_rawaf_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp3a_ris & ISP3X_3A_RAWAE_BIG) + ret |= ops->get_rawae3_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp3a_ris & ISP3X_3A_RAWHIST_BIG) + ret |= ops->get_rawhst3_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp3a_ris & ISP3X_3A_RAWAE_CH0) + ret |= ops->get_rawae0_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp3a_ris & ISP3X_3A_RAWAE_CH1) + ret |= ops->get_rawae1_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp3a_ris & ISP3X_3A_RAWAE_CH2) + ret |= ops->get_rawae2_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp3a_ris & ISP3X_3A_RAWHIST_CH0) + ret |= ops->get_rawhst0_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp3a_ris & ISP3X_3A_RAWHIST_CH1) + ret |= ops->get_rawhst1_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp3a_ris & ISP3X_3A_RAWHIST_CH2) + ret |= ops->get_rawhst2_meas(stats_vdev, cur_stat_buf, 1); + if (meas_work->isp_ris & ISP3X_FRAME) { + ret |= ops->get_bls_stats(stats_vdev, cur_stat_buf, 1); + ret |= ops->get_dhaz_stats(stats_vdev, cur_stat_buf, 1); + } + } if (cur_buf && !ret) { - vb2_set_plane_payload(&cur_buf->vb.vb2_buf, 0, - sizeof(struct rkisp3x_isp_stat_buffer)); + vb2_set_plane_payload(&cur_buf->vb.vb2_buf, 0, size); cur_buf->vb.sequence = cur_frame_id; cur_buf->vb.vb2_buf.timestamp = meas_work->timestamp; vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE); @@ -1063,6 +1081,9 @@ rkisp_stats_isr_v3x(struct rkisp_isp_stats_vdev *stats_vdev, u32 isp_ris, u32 isp3a_ris) { struct rkisp_device *dev = stats_vdev->dev; + struct rkisp_hw_dev *hw = dev->hw_dev; + void __iomem *base = !hw->is_unite ? + hw->base_addr : hw->base_next_addr; struct rkisp_isp_readout_work work; u32 iq_isr_mask = ISP3X_SIAWB_DONE | ISP3X_SIAF_FIN | ISP3X_EXP_END | ISP3X_SIHST_RDY | ISP3X_AFM_SUM_OF | ISP3X_AFM_LUM_OF; @@ -1076,13 +1097,13 @@ rkisp_stats_isr_v3x(struct rkisp_isp_stats_vdev *stats_vdev, spin_lock(&stats_vdev->irq_lock); - temp_isp_ris = rkisp_read(stats_vdev->dev, ISP3X_ISP_RIS, true); - temp_isp3a_ris = rkisp_read(stats_vdev->dev, ISP3X_ISP_3A_RIS, true); + temp_isp_ris = readl(base + ISP3X_ISP_RIS); + temp_isp3a_ris = readl(base + ISP3X_ISP_3A_RIS); isp_mis_tmp = isp_ris & iq_isr_mask; if (isp_mis_tmp) { - rkisp_write(stats_vdev->dev, ISP3X_ISP_ICR, isp_mis_tmp, true); + writel(isp_mis_tmp, base + ISP3X_ISP_ICR); - isp_mis_tmp &= rkisp_read(stats_vdev->dev, ISP3X_ISP_MIS, true); + isp_mis_tmp &= readl(base + ISP3X_ISP_MIS); if (isp_mis_tmp) v4l2_err(stats_vdev->vnode.vdev.v4l2_dev, "isp icr 3A info err: 0x%x 0x%x\n", @@ -1091,9 +1112,9 @@ rkisp_stats_isr_v3x(struct rkisp_isp_stats_vdev *stats_vdev, isp_mis_tmp = isp3a_ris & iq_3a_mask; if (isp_mis_tmp) { - rkisp_write(stats_vdev->dev, ISP3X_ISP_3A_ICR, isp_mis_tmp, true); + writel(isp_mis_tmp, base + ISP3X_ISP_3A_ICR); - isp_mis_tmp &= rkisp_read(stats_vdev->dev, ISP3X_ISP_3A_MIS, true); + isp_mis_tmp &= readl(base + ISP3X_ISP_3A_MIS); if (isp_mis_tmp) v4l2_err(stats_vdev->vnode.vdev.v4l2_dev, "isp3A icr 3A info err: 0x%x 0x%x\n", @@ -1110,15 +1131,23 @@ rkisp_stats_isr_v3x(struct rkisp_isp_stats_vdev *stats_vdev, wr_buf_idx = (wr_buf_idx + 1) % RKISP_STATS_DDR_BUF_NUM; stats_vdev->wr_buf_idx = wr_buf_idx; rkisp_finish_buffer(dev, &stats_vdev->stats_buf[wr_buf_idx]); - rkisp_write(stats_vdev->dev, ISP3X_MI_DBR_WR_SIZE, + rkisp_write(dev, ISP3X_MI_DBR_WR_SIZE, ISP3X_RD_STATS_BUF_SIZE, false); - rkisp_write(stats_vdev->dev, ISP3X_MI_3A_WR_BASE, + rkisp_write(dev, ISP3X_MI_3A_WR_BASE, stats_vdev->stats_buf[wr_buf_idx].dma_addr, false); - rkisp_set_bits(stats_vdev->dev, ISP3X_SWS_CFG, 0, + rkisp_set_bits(dev, ISP3X_SWS_CFG, 0, ISP3X_3A_DDR_WRITE_EN, false); + if (dev->hw_dev->is_single) { + rkisp_next_write(dev, ISP3X_MI_DBR_WR_SIZE, + ISP3X_RD_STATS_BUF_SIZE, false); + rkisp_next_write(dev, ISP3X_MI_3A_WR_BASE, + stats_vdev->stats_buf[wr_buf_idx].dma_addr + + ISP3X_RD_STATS_BUF_SIZE, false); + rkisp_next_set_bits(dev, ISP3X_SWS_CFG, 0, + ISP3X_3A_DDR_WRITE_EN, false); + } } - if (isp_ris & ISP3X_FRAME) { work.readout = RKISP_ISP_READOUT_MEAS; work.frame_id = cur_frame_id; @@ -1166,19 +1195,30 @@ void rkisp_stats_first_ddr_config_v3x(struct rkisp_isp_stats_vdev *stats_vdev) ISP3X_RD_STATS_BUF_SIZE, false); rkisp_write(stats_vdev->dev, ISP3X_MI_3A_WR_BASE, stats_vdev->stats_buf[0].dma_addr, false); - rkisp_set_bits(stats_vdev->dev, ISP3X_SWS_CFG, SW_3A_DDR_WRITE_EN, + rkisp_set_bits(stats_vdev->dev, ISP3X_SWS_CFG, 0, ISP3X_3A_DDR_WRITE_EN, false); + if (stats_vdev->dev->hw_dev->is_unite) { + rkisp_next_write(stats_vdev->dev, ISP3X_MI_DBR_WR_SIZE, + ISP3X_RD_STATS_BUF_SIZE, false); + rkisp_next_write(stats_vdev->dev, ISP3X_MI_3A_WR_BASE, + stats_vdev->stats_buf[0].dma_addr + + ISP3X_RD_STATS_BUF_SIZE, false); + rkisp_next_set_bits(stats_vdev->dev, ISP3X_SWS_CFG, + 0, ISP3X_3A_DDR_WRITE_EN, false); + } } } void rkisp_init_stats_vdev_v3x(struct rkisp_isp_stats_vdev *stats_vdev) { - int i; + int i, mult = 1; + if (stats_vdev->dev->hw_dev->is_unite) + mult = 2; stats_vdev->vdev_fmt.fmt.meta.dataformat = V4L2_META_FMT_RK_ISP1_STAT_3A; stats_vdev->vdev_fmt.fmt.meta.buffersize = - sizeof(struct rkisp3x_isp_stat_buffer); + mult * sizeof(struct rkisp3x_isp_stat_buffer); stats_vdev->ops = &rkisp_isp_stats_ops_tbl; stats_vdev->priv_ops = &stats_reg_ops_v3x; @@ -1186,7 +1226,7 @@ void rkisp_init_stats_vdev_v3x(struct rkisp_isp_stats_vdev *stats_vdev) 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 = ISP3X_RD_STATS_BUF_SIZE; + stats_vdev->stats_buf[i].size = ISP3X_RD_STATS_BUF_SIZE * mult; rkisp_alloc_buffer(stats_vdev->dev, &stats_vdev->stats_buf[i]); } } diff --git a/drivers/media/platform/rockchip/isp/isp_stats_v3x.h b/drivers/media/platform/rockchip/isp/isp_stats_v3x.h index 545f734ce837..1b40c571f19e 100644 --- a/drivers/media/platform/rockchip/isp/isp_stats_v3x.h +++ b/drivers/media/platform/rockchip/isp/isp_stats_v3x.h @@ -14,29 +14,29 @@ struct rkisp_isp_stats_vdev; struct rkisp_stats_ops_v3x { int (*get_rawawb_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_rawaf_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_rawae0_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_rawhst0_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_rawae1_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_rawhst1_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_rawae2_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_rawhst2_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_rawae3_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_rawhst3_meas)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_bls_stats)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); int (*get_dhaz_stats)(struct rkisp_isp_stats_vdev *stats_vdev, - struct rkisp3x_isp_stat_buffer *pbuf); + struct rkisp3x_isp_stat_buffer *pbuf, u32 id); }; #if IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V30) diff --git a/drivers/media/platform/rockchip/isp/procfs.c b/drivers/media/platform/rockchip/isp/procfs.c index 8cb592923b45..b304b67d0383 100644 --- a/drivers/media/platform/rockchip/isp/procfs.c +++ b/drivers/media/platform/rockchip/isp/procfs.c @@ -306,6 +306,251 @@ static void isp30_show(struct rkisp_device *dev, struct seq_file *p) seq_printf(p, "%-10s %s(0x%x)\n", "RAWHIST3", (val & 1) ? "ON" : "OFF", val); } +static void isp30_unite_show(struct rkisp_device *dev, struct seq_file *p) +{ + u32 full_range_flg = CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA; + static const char * const effect[] = { + "BLACKWHITE", + "NEGATIVE", + "SEPIA", + "COLOR_SEL", + "EMBOSS", + "SKETCH", + "SHARPEN", + "RKSHARPEN" + }; + u32 v0, v1; + + v0 = rkisp_read(dev, ISP3X_CMSK_CTRL0, false); + v1 = rkisp_next_read(dev, ISP3X_CMSK_CTRL0, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "CMSK", + (v0 & 1) ? "ON" : "OFF", + v0, (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_DPCC0_MODE, false); + v1 = rkisp_next_read(dev, ISP3X_DPCC0_MODE, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "DPCC0", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_DPCC1_MODE, false); + v1 = rkisp_next_read(dev, ISP3X_DPCC1_MODE, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "DPCC1", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_DPCC2_MODE, false); + v1 = rkisp_next_read(dev, ISP3X_DPCC2_MODE, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "DPCC2", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_BLS_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_BLS_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "BLS", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_ISP_CTRL0, false); + v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL0, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "SDG", + (v0 & BIT(6)) ? "ON" : "OFF", v0, + (v1 & BIT(6)) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_LSC_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_LSC_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "LSC", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_ISP_CTRL0, false); + v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL0, false); + seq_printf(p, "%-10s Left %s(0x%x) gain:0x%08x 0x%08x, Right %s(0x%x) gain:0x%08x 0x%08x\n", + "AWBGAIN", + (v0 & BIT(7)) ? "ON" : "OFF", v0, + rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_G, false), + rkisp_read(dev, ISP3X_ISP_AWB_GAIN0_RB, false), + (v1 & BIT(7)) ? "ON" : "OFF", v1, + rkisp_next_read(dev, ISP3X_ISP_AWB_GAIN0_G, false), + rkisp_next_read(dev, ISP3X_ISP_AWB_GAIN0_RB, false)); + v0 = rkisp_read(dev, ISP3X_DEBAYER_CONTROL, false); + v1 = rkisp_next_read(dev, ISP3X_DEBAYER_CONTROL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "DEBAYER", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_CCM_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_CCM_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "CCM", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_GAMMA_OUT_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_GAMMA_OUT_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "GAMMA_OUT", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_CPROC_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_CPROC_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "CPROC", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_IMG_EFF_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_IMG_EFF_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x) effect:%s, Right %s(0x%x) effect:%s\n", + "IE", + (v0 & 1) ? "ON" : "OFF", v0, + effect[(v0 & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1], + (v1 & 1) ? "ON" : "OFF", v1, + effect[(v1 & CIF_IMG_EFF_CTRL_MODE_MASK) >> 1]); + v0 = rkisp_read(dev, ISP3X_DRC_CTRL0, false); + v1 = rkisp_next_read(dev, ISP3X_DRC_CTRL0, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "HDRDRC", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_HDRMGE_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_HDRMGE_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "HDRMGE", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_BAYNR_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_BAYNR_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "BAYNR", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_BAY3D_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_BAY3D_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "BAY3D", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_YNR_GLOBAL_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_YNR_GLOBAL_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "YNR", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_CNR_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_CNR_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "CNR", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_SHARP_EN, false); + v1 = rkisp_next_read(dev, ISP3X_SHARP_EN, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "SHARP", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_GIC_CONTROL, false); + v1 = rkisp_next_read(dev, ISP3X_GIC_CONTROL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "GIC", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_DHAZ_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_DHAZ_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "DHAZ", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_3DLUT_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_3DLUT_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "3DLUT", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_LDCH_STS, false); + v1 = rkisp_next_read(dev, ISP3X_LDCH_STS, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "LDCH", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_ISP_CTRL0, false); + v1 = rkisp_next_read(dev, ISP3X_ISP_CTRL0, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "CSM", + (v0 & full_range_flg) ? "FULL" : "LIMIT", v0, + (v1 & full_range_flg) ? "FULL" : "LIMIT", v1); + v0 = rkisp_read(dev, ISP3X_CAC_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_CAC_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "CAC", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_GAIN_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_GAIN_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "GAIN", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWAF_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_RAWAF_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWAF", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWAWB_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_RAWAWB_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWAWB", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWAE_LITE_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_RAWAE_LITE_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWAE0", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWAE_BIG2_BASE, false); + v1 = rkisp_next_read(dev, ISP3X_RAWAE_BIG2_BASE, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWAE1", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWAE_BIG3_BASE, false); + v1 = rkisp_next_read(dev, ISP3X_RAWAE_BIG3_BASE, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWAE2", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWAE_BIG1_BASE, false); + v1 = rkisp_next_read(dev, ISP3X_RAWAE_BIG1_BASE, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWAE3", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWHIST_LITE_CTRL, false); + v1 = rkisp_next_read(dev, ISP3X_RAWHIST_LITE_CTRL, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWHIST0", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWHIST_BIG2_BASE, false); + v1 = rkisp_next_read(dev, ISP3X_RAWHIST_BIG2_BASE, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWHIST1", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWHIST_BIG3_BASE, false); + v1 = rkisp_next_read(dev, ISP3X_RAWHIST_BIG3_BASE, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWHIST2", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); + v0 = rkisp_read(dev, ISP3X_RAWHIST_BIG1_BASE, false); + v1 = rkisp_next_read(dev, ISP3X_RAWHIST_BIG1_BASE, false); + seq_printf(p, "%-10s Left %s(0x%x), Right %s(0x%x)\n", + "RAWHIST3", + (v0 & 1) ? "ON" : "OFF", v0, + (v1 & 1) ? "ON" : "OFF", v1); +} + static int isp_show(struct seq_file *p, void *v) { struct rkisp_device *dev = p->private; @@ -399,7 +644,10 @@ static int isp_show(struct seq_file *p, void *v) isp21_show(dev, p); break; case ISP_V30: - isp30_show(dev, p); + if (dev->hw_dev->is_unite) + isp30_unite_show(dev, p); + else + isp30_show(dev, p); break; default: break; diff --git a/include/uapi/linux/rkisp2-config.h b/include/uapi/linux/rkisp2-config.h index 7d036b141aad..df465554a642 100644 --- a/include/uapi/linux/rkisp2-config.h +++ b/include/uapi/linux/rkisp2-config.h @@ -234,12 +234,14 @@ enum isp2x_mesh_buf_stat { struct rkisp_meshbuf_info { u64 module_id; + u32 unite_isp_id; s32 buf_fd[ISP2X_MESH_BUF_NUM]; u32 buf_size[ISP2X_MESH_BUF_NUM]; } __attribute__ ((packed)); struct rkisp_meshbuf_size { u64 module_id; + u32 unite_isp_id; u32 meas_width; u32 meas_height; } __attribute__ ((packed)); diff --git a/include/uapi/linux/rkisp3-config.h b/include/uapi/linux/rkisp3-config.h index 7858d74702f2..000b235c2c21 100644 --- a/include/uapi/linux/rkisp3-config.h +++ b/include/uapi/linux/rkisp3-config.h @@ -134,6 +134,12 @@ #define ISP3X_CAC_STRENGTH_NUM 22 +enum isp3x_unite_id { + ISP3_LEFT = 0, + ISP3_RIGHT, + ISP3_UNITE_MAX, +}; + struct isp3x_gammaout_cfg { u8 equ_segm; u8 finalx4_dense_en; @@ -142,6 +148,8 @@ struct isp3x_gammaout_cfg { } __attribute__ ((packed)); struct isp3x_lsc_cfg { + u8 sector_16x16; + u16 r_data_tbl[ISP3X_LSC_DATA_TBL_SIZE]; u16 gr_data_tbl[ISP3X_LSC_DATA_TBL_SIZE]; u16 gb_data_tbl[ISP3X_LSC_DATA_TBL_SIZE]; @@ -218,13 +226,13 @@ struct isp3x_ynr_cfg { u8 rnr_en; u8 thumb_mix_cur_en; u8 global_gain_alpha; - u8 global_gain; u8 flt1x1_bypass_sel; u8 sft5x5_bypass; u8 flt1x1_bypass; u8 lgft3x3_bypass; u8 lbft5x5_bypass; u8 bft3x3_bypass; + u16 global_gain; u16 rnr_max_r; u16 local_gainscale;