1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (c) 2022 Rockchip Electronics Co., Ltd. */
3
4 #ifndef _RKISP_ISP_PARAM_V32_H
5 #define _RKISP_ISP_PARAM_V32_H
6
7 #include <linux/rk-isp1-config.h>
8 #include <linux/rk-preisp.h>
9 #include "common.h"
10 #include "isp_params.h"
11
12 #define ISP32_3DLUT_BUF_NUM 2
13 #define ISP32_3DLUT_BUF_SIZE (9 * 9 * 9 * 4)
14
15 #define ISP32_LSC_LUT_BUF_NUM 2
16 #define ISP32_LSC_LUT_TBL_SIZE (9 * 17 * 4)
17 #define ISP32_LSC_LUT_BUF_SIZE (ISP32_LSC_LUT_TBL_SIZE * 4)
18
19 #define ISP32_RAWHISTBIG_ROW_NUM 15
20 #define ISP32_RAWHISTBIG_COLUMN_NUM 15
21 #define ISP32_RAWHISTBIG_WEIGHT_REG_SIZE \
22 (ISP32_RAWHISTBIG_ROW_NUM * ISP32_RAWHISTBIG_COLUMN_NUM)
23
24 #define ISP32_RAWHISTLITE_ROW_NUM 5
25 #define ISP32_RAWHISTLITE_COLUMN_NUM 5
26 #define ISP32_RAWHISTLITE_WEIGHT_REG_SIZE \
27 (ISP32_RAWHISTLITE_ROW_NUM * ISP32_RAWHISTLITE_COLUMN_NUM)
28
29 struct rkisp_isp_params_vdev;
30 struct rkisp_isp_params_ops_v32 {
31 void (*dpcc_config)(struct rkisp_isp_params_vdev *params_vdev,
32 const struct isp2x_dpcc_cfg *arg);
33 void (*dpcc_enable)(struct rkisp_isp_params_vdev *params_vdev,
34 bool en);
35 void (*bls_config)(struct rkisp_isp_params_vdev *params_vdev,
36 const struct isp32_bls_cfg *arg);
37 void (*bls_enable)(struct rkisp_isp_params_vdev *params_vdev,
38 bool en);
39 void (*sdg_config)(struct rkisp_isp_params_vdev *params_vdev,
40 const struct isp2x_sdg_cfg *arg);
41 void (*sdg_enable)(struct rkisp_isp_params_vdev *params_vdev,
42 bool en);
43 void (*lsc_config)(struct rkisp_isp_params_vdev *params_vdev,
44 const struct isp3x_lsc_cfg *arg);
45 void (*lsc_enable)(struct rkisp_isp_params_vdev *params_vdev,
46 bool en);
47 void (*awbgain_config)(struct rkisp_isp_params_vdev *params_vdev,
48 const struct isp32_awb_gain_cfg *arg);
49 void (*awbgain_enable)(struct rkisp_isp_params_vdev *params_vdev,
50 bool en);
51 void (*debayer_config)(struct rkisp_isp_params_vdev *params_vdev,
52 const struct isp32_debayer_cfg *arg);
53 void (*debayer_enable)(struct rkisp_isp_params_vdev *params_vdev,
54 bool en);
55 void (*ccm_config)(struct rkisp_isp_params_vdev *params_vdev,
56 const struct isp32_ccm_cfg *arg);
57 void (*ccm_enable)(struct rkisp_isp_params_vdev *params_vdev,
58 bool en);
59 void (*goc_config)(struct rkisp_isp_params_vdev *params_vdev,
60 const struct isp3x_gammaout_cfg *arg);
61 void (*goc_enable)(struct rkisp_isp_params_vdev *params_vdev,
62 bool en);
63 void (*cproc_config)(struct rkisp_isp_params_vdev *params_vdev,
64 const struct isp2x_cproc_cfg *arg);
65 void (*cproc_enable)(struct rkisp_isp_params_vdev *params_vdev,
66 bool en);
67 void (*ie_config)(struct rkisp_isp_params_vdev *params_vdev,
68 const struct isp2x_ie_cfg *arg);
69 void (*ie_enable)(struct rkisp_isp_params_vdev *params_vdev,
70 bool en);
71 void (*rawaf_config)(struct rkisp_isp_params_vdev *params_vdev,
72 const struct isp32_rawaf_meas_cfg *arg);
73 void (*rawaf_enable)(struct rkisp_isp_params_vdev *params_vdev,
74 bool en);
75 void (*rawae0_config)(struct rkisp_isp_params_vdev *params_vdev,
76 const struct isp2x_rawaelite_meas_cfg *arg);
77 void (*rawae0_enable)(struct rkisp_isp_params_vdev *params_vdev,
78 bool en);
79 void (*rawae1_config)(struct rkisp_isp_params_vdev *params_vdev,
80 const struct isp2x_rawaebig_meas_cfg *arg);
81 void (*rawae1_enable)(struct rkisp_isp_params_vdev *params_vdev,
82 bool en);
83 void (*rawae2_config)(struct rkisp_isp_params_vdev *params_vdev,
84 const struct isp2x_rawaebig_meas_cfg *arg);
85 void (*rawae2_enable)(struct rkisp_isp_params_vdev *params_vdev,
86 bool en);
87 void (*rawae3_config)(struct rkisp_isp_params_vdev *params_vdev,
88 const struct isp2x_rawaebig_meas_cfg *arg);
89 void (*rawae3_enable)(struct rkisp_isp_params_vdev *params_vdev,
90 bool en);
91 void (*rawawb_config)(struct rkisp_isp_params_vdev *params_vdev,
92 const struct isp32_rawawb_meas_cfg *arg);
93 void (*rawawb_enable)(struct rkisp_isp_params_vdev *params_vdev,
94 bool en);
95 void (*rawhst0_config)(struct rkisp_isp_params_vdev *params_vdev,
96 const struct isp2x_rawhistlite_cfg *arg);
97 void (*rawhst0_enable)(struct rkisp_isp_params_vdev *params_vdev,
98 bool en);
99 void (*rawhst1_config)(struct rkisp_isp_params_vdev *params_vdev,
100 const struct isp2x_rawhistbig_cfg *arg);
101 void (*rawhst1_enable)(struct rkisp_isp_params_vdev *params_vdev,
102 bool en);
103 void (*rawhst2_config)(struct rkisp_isp_params_vdev *params_vdev,
104 const struct isp2x_rawhistbig_cfg *arg);
105 void (*rawhst2_enable)(struct rkisp_isp_params_vdev *params_vdev,
106 bool en);
107 void (*rawhst3_config)(struct rkisp_isp_params_vdev *params_vdev,
108 const struct isp2x_rawhistbig_cfg *arg);
109 void (*rawhst3_enable)(struct rkisp_isp_params_vdev *params_vdev,
110 bool en);
111 void (*hdrdrc_config)(struct rkisp_isp_params_vdev *params_vdev,
112 const struct isp32_drc_cfg *arg,
113 enum rkisp_params_type type);
114 void (*hdrdrc_enable)(struct rkisp_isp_params_vdev *params_vdev,
115 bool en);
116 void (*hdrmge_config)(struct rkisp_isp_params_vdev *params_vdev,
117 const struct isp32_hdrmge_cfg *arg,
118 enum rkisp_params_type type);
119 void (*hdrmge_enable)(struct rkisp_isp_params_vdev *params_vdev,
120 bool en);
121 void (*gic_config)(struct rkisp_isp_params_vdev *params_vdev,
122 const struct isp21_gic_cfg *arg);
123 void (*gic_enable)(struct rkisp_isp_params_vdev *params_vdev,
124 bool en);
125 void (*dhaz_config)(struct rkisp_isp_params_vdev *params_vdev,
126 const struct isp32_dhaz_cfg *arg);
127 void (*dhaz_enable)(struct rkisp_isp_params_vdev *params_vdev,
128 bool en);
129 void (*isp3dlut_config)(struct rkisp_isp_params_vdev *params_vdev,
130 const struct isp2x_3dlut_cfg *arg);
131 void (*isp3dlut_enable)(struct rkisp_isp_params_vdev *params_vdev,
132 bool en);
133 void (*ldch_config)(struct rkisp_isp_params_vdev *params_vdev,
134 const struct isp32_ldch_cfg *arg);
135 void (*ldch_enable)(struct rkisp_isp_params_vdev *params_vdev,
136 bool en);
137 void (*ynr_config)(struct rkisp_isp_params_vdev *params_vdev,
138 const struct isp32_ynr_cfg *arg);
139 void (*ynr_enable)(struct rkisp_isp_params_vdev *params_vdev,
140 bool en);
141 void (*cnr_config)(struct rkisp_isp_params_vdev *params_vdev,
142 const struct isp32_cnr_cfg *arg);
143 void (*cnr_enable)(struct rkisp_isp_params_vdev *params_vdev,
144 bool en);
145 void (*sharp_config)(struct rkisp_isp_params_vdev *params_vdev,
146 const struct isp32_sharp_cfg *arg);
147 void (*sharp_enable)(struct rkisp_isp_params_vdev *params_vdev,
148 bool en);
149 void (*baynr_config)(struct rkisp_isp_params_vdev *params_vdev,
150 const struct isp32_baynr_cfg *arg);
151 void (*baynr_enable)(struct rkisp_isp_params_vdev *params_vdev,
152 bool en);
153 void (*bay3d_config)(struct rkisp_isp_params_vdev *params_vdev,
154 const struct isp32_bay3d_cfg *arg);
155 void (*bay3d_enable)(struct rkisp_isp_params_vdev *params_vdev,
156 bool en);
157 void (*gain_config)(struct rkisp_isp_params_vdev *params_vdev,
158 const struct isp3x_gain_cfg *arg);
159 void (*gain_enable)(struct rkisp_isp_params_vdev *params_vdev,
160 bool en);
161 void (*cac_config)(struct rkisp_isp_params_vdev *params_vdev,
162 const struct isp32_cac_cfg *arg);
163 void (*cac_enable)(struct rkisp_isp_params_vdev *params_vdev,
164 bool en);
165 void (*csm_config)(struct rkisp_isp_params_vdev *params_vdev,
166 const struct isp21_csm_cfg *arg);
167 void (*cgc_config)(struct rkisp_isp_params_vdev *params_vdev,
168 const struct isp21_cgc_cfg *arg);
169 void (*vsm_config)(struct rkisp_isp_params_vdev *params_vdev,
170 const struct isp32_vsm_cfg *arg);
171 void (*vsm_enable)(struct rkisp_isp_params_vdev *params_vdev,
172 bool en);
173 };
174
175 struct rkisp_isp_params_val_v32 {
176 struct tasklet_struct lsc_tasklet;
177
178 struct rkisp_dummy_buffer buf_3dlut[ISP32_3DLUT_BUF_NUM];
179 u32 buf_3dlut_idx;
180
181 struct rkisp_dummy_buffer buf_lsclut[ISP32_LSC_LUT_BUF_NUM];
182 u32 buf_lsclut_idx;
183
184 struct rkisp_dummy_buffer buf_ldch[ISP3X_MESH_BUF_NUM];
185 u32 buf_ldch_idx;
186
187 struct rkisp_dummy_buffer buf_cac[ISP3X_MESH_BUF_NUM];
188 u32 buf_cac_idx;
189
190 struct rkisp_dummy_buffer buf_info[RKISP_INFO2DDR_BUF_MAX];
191 u32 buf_info_owner;
192 u32 buf_info_cnt;
193 int buf_info_idx;
194
195 u32 bay3d_cur_size;
196 u32 bay3d_cur_wsize;
197 u32 bay3d_cur_wrap_line;
198 struct rkisp_dummy_buffer buf_3dnr_iir;
199 struct rkisp_dummy_buffer buf_3dnr_cur;
200 struct rkisp_dummy_buffer buf_3dnr_ds;
201
202 struct rkisp_dummy_buffer buf_frm;
203
204 struct isp32_hdrmge_cfg last_hdrmge;
205 struct isp32_drc_cfg last_hdrdrc;
206 struct isp32_hdrmge_cfg cur_hdrmge;
207 struct isp32_drc_cfg cur_hdrdrc;
208
209 bool dhaz_en;
210 bool drc_en;
211 bool lsc_en;
212 bool mge_en;
213 bool lut3d_en;
214 bool bay3d_en;
215 bool is_bigmode;
216 bool is_lo8x8;
217 bool is_sram;
218 };
219
220 #if IS_ENABLED(CONFIG_VIDEO_ROCKCHIP_ISP_VERSION_V32)
221 int rkisp_init_params_vdev_v32(struct rkisp_isp_params_vdev *params_vdev);
222 void rkisp_uninit_params_vdev_v32(struct rkisp_isp_params_vdev *params_vdev);
223 #else
rkisp_init_params_vdev_v32(struct rkisp_isp_params_vdev * params_vdev)224 static inline int rkisp_init_params_vdev_v32(struct rkisp_isp_params_vdev *params_vdev) { return -EINVAL; }
rkisp_uninit_params_vdev_v32(struct rkisp_isp_params_vdev * params_vdev)225 static inline void rkisp_uninit_params_vdev_v32(struct rkisp_isp_params_vdev *params_vdev) {}
226 #endif
227
228 #endif /* _RKISP_ISP_PARAM_V32_H */
229