hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/media/platform/rockchip/isp/isp_params_v32.c
....@@ -47,9 +47,12 @@
4747
4848 static inline void
4949 isp3_param_write(struct rkisp_isp_params_vdev *params_vdev,
50
- u32 value, u32 addr)
50
+ u32 value, u32 addr, u32 id)
5151 {
52
- rkisp_write(params_vdev->dev, addr, value, false);
52
+ if (id == ISP3_LEFT)
53
+ rkisp_write(params_vdev->dev, addr, value, false);
54
+ else
55
+ rkisp_next_write(params_vdev->dev, addr, value, false);
5356 }
5457
5558 static inline u32
....@@ -59,45 +62,63 @@
5962 }
6063
6164 static inline u32
62
-isp3_param_read(struct rkisp_isp_params_vdev *params_vdev, u32 addr)
65
+isp3_param_read(struct rkisp_isp_params_vdev *params_vdev, u32 addr, u32 id)
6366 {
64
- return rkisp_read(params_vdev->dev, addr, false);
67
+ u32 val;
68
+
69
+ if (id == ISP3_LEFT)
70
+ val = rkisp_read(params_vdev->dev, addr, false);
71
+ else
72
+ val = rkisp_next_read(params_vdev->dev, addr, false);
73
+ return val;
6574 }
6675
6776 static inline u32
68
-isp3_param_read_cache(struct rkisp_isp_params_vdev *params_vdev, u32 addr)
77
+isp3_param_read_cache(struct rkisp_isp_params_vdev *params_vdev, u32 addr, u32 id)
6978 {
70
- return rkisp_read_reg_cache(params_vdev->dev, addr);
79
+ u32 val;
80
+
81
+ if (id == ISP3_LEFT)
82
+ val = rkisp_read_reg_cache(params_vdev->dev, addr);
83
+ else
84
+ val = rkisp_next_read_reg_cache(params_vdev->dev, addr);
85
+ return val;
7186 }
7287
7388 static inline void
7489 isp3_param_set_bits(struct rkisp_isp_params_vdev *params_vdev,
75
- u32 reg, u32 bit_mask)
90
+ u32 reg, u32 bit_mask, u32 id)
7691 {
77
- rkisp_set_bits(params_vdev->dev, reg, 0, bit_mask, false);
92
+ if (id == ISP3_LEFT)
93
+ rkisp_set_bits(params_vdev->dev, reg, 0, bit_mask, false);
94
+ else
95
+ rkisp_next_set_bits(params_vdev->dev, reg, 0, bit_mask, false);
7896 }
7997
8098 static inline void
8199 isp3_param_clear_bits(struct rkisp_isp_params_vdev *params_vdev,
82
- u32 reg, u32 bit_mask)
100
+ u32 reg, u32 bit_mask, u32 id)
83101 {
84
- rkisp_clear_bits(params_vdev->dev, reg, bit_mask, false);
102
+ if (id == ISP3_LEFT)
103
+ rkisp_clear_bits(params_vdev->dev, reg, bit_mask, false);
104
+ else
105
+ rkisp_next_clear_bits(params_vdev->dev, reg, bit_mask, false);
85106 }
86107
87108 static void
88109 isp_dpcc_config(struct rkisp_isp_params_vdev *params_vdev,
89
- const struct isp2x_dpcc_cfg *arg)
110
+ const struct isp2x_dpcc_cfg *arg, u32 id)
90111 {
91112 u32 value;
92113 int i;
93114
94
- value = isp3_param_read(params_vdev, ISP3X_DPCC0_MODE);
115
+ value = isp3_param_read(params_vdev, ISP3X_DPCC0_MODE, id);
95116 value &= ISP_DPCC_EN;
96117
97118 value |= !!arg->stage1_enable << 2 |
98119 !!arg->grayscale_mode << 1;
99
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_MODE);
100
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_MODE);
120
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_MODE, id);
121
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_MODE, id);
101122
102123 value = (arg->sw_rk_out_sel & 0x03) << 5 |
103124 !!arg->sw_dpcc_output_sel << 4 |
....@@ -105,15 +126,15 @@
105126 !!arg->stage1_g_3x3 << 2 |
106127 !!arg->stage1_incl_rb_center << 1 |
107128 !!arg->stage1_incl_green_center;
108
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_OUTPUT_MODE);
109
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_OUTPUT_MODE);
129
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_OUTPUT_MODE, id);
130
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_OUTPUT_MODE, id);
110131
111132 value = !!arg->stage1_use_fix_set << 3 |
112133 !!arg->stage1_use_set_3 << 2 |
113134 !!arg->stage1_use_set_2 << 1 |
114135 !!arg->stage1_use_set_1;
115
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_SET_USE);
116
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_SET_USE);
136
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_SET_USE, id);
137
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_SET_USE, id);
117138
118139 value = !!arg->sw_rk_red_blue1_en << 13 |
119140 !!arg->rg_red_blue1_enable << 12 |
....@@ -127,8 +148,8 @@
127148 !!arg->ro_green1_enable << 2 |
128149 !!arg->lc_green1_enable << 1 |
129150 !!arg->pg_green1_enable;
130
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_METHODS_SET_1);
131
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_METHODS_SET_1);
151
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_METHODS_SET_1, id);
152
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_METHODS_SET_1, id);
132153
133154 value = !!arg->sw_rk_red_blue2_en << 13 |
134155 !!arg->rg_red_blue2_enable << 12 |
....@@ -142,8 +163,8 @@
142163 !!arg->ro_green2_enable << 2 |
143164 !!arg->lc_green2_enable << 1 |
144165 !!arg->pg_green2_enable;
145
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_METHODS_SET_2);
146
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_METHODS_SET_2);
166
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_METHODS_SET_2, id);
167
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_METHODS_SET_2, id);
147168
148169 value = !!arg->sw_rk_red_blue3_en << 13 |
149170 !!arg->rg_red_blue3_enable << 12 |
....@@ -157,74 +178,74 @@
157178 !!arg->ro_green3_enable << 2 |
158179 !!arg->lc_green3_enable << 1 |
159180 !!arg->pg_green3_enable;
160
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_METHODS_SET_3);
161
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_METHODS_SET_3);
181
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_METHODS_SET_3, id);
182
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_METHODS_SET_3, id);
162183
163184 value = ISP_PACK_4BYTE(arg->line_thr_1_g, arg->line_thr_1_rb,
164185 arg->sw_mindis1_g, arg->sw_mindis1_rb);
165
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_1);
166
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_1);
186
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_1, id);
187
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_1, id);
167188
168189 value = ISP_PACK_4BYTE(arg->line_mad_fac_1_g, arg->line_mad_fac_1_rb,
169190 arg->sw_dis_scale_max1, arg->sw_dis_scale_min1);
170
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_1);
171
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_1);
191
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_1, id);
192
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_1, id);
172193
173194 value = ISP_PACK_4BYTE(arg->pg_fac_1_g, arg->pg_fac_1_rb, 0, 0);
174
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_PG_FAC_1);
175
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_PG_FAC_1);
195
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_PG_FAC_1, id);
196
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_PG_FAC_1, id);
176197
177198 value = ISP_PACK_4BYTE(arg->rnd_thr_1_g, arg->rnd_thr_1_rb, 0, 0);
178
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_THRESH_1);
179
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_THRESH_1);
199
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_THRESH_1, id);
200
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_THRESH_1, id);
180201
181202 value = ISP_PACK_4BYTE(arg->rg_fac_1_g, arg->rg_fac_1_rb, 0, 0);
182
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_RG_FAC_1);
183
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_RG_FAC_1);
203
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_RG_FAC_1, id);
204
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_RG_FAC_1, id);
184205
185206 value = ISP_PACK_4BYTE(arg->line_thr_2_g, arg->line_thr_2_rb,
186207 arg->sw_mindis2_g, arg->sw_mindis2_rb);
187
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_2);
188
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_2);
208
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_2, id);
209
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_2, id);
189210
190211 value = ISP_PACK_4BYTE(arg->line_mad_fac_2_g, arg->line_mad_fac_2_rb,
191212 arg->sw_dis_scale_max2, arg->sw_dis_scale_min2);
192
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_2);
193
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_2);
213
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_2, id);
214
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_2, id);
194215
195216 value = ISP_PACK_4BYTE(arg->pg_fac_2_g, arg->pg_fac_2_rb, 0, 0);
196
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_PG_FAC_2);
197
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_PG_FAC_2);
217
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_PG_FAC_2, id);
218
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_PG_FAC_2, id);
198219
199220 value = ISP_PACK_4BYTE(arg->rnd_thr_2_g, arg->rnd_thr_2_rb, 0, 0);
200
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_THRESH_2);
201
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_THRESH_2);
221
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_THRESH_2, id);
222
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_THRESH_2, id);
202223
203224 value = ISP_PACK_4BYTE(arg->rg_fac_2_g, arg->rg_fac_2_rb, 0, 0);
204
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_RG_FAC_2);
205
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_RG_FAC_2);
225
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_RG_FAC_2, id);
226
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_RG_FAC_2, id);
206227
207228 value = ISP_PACK_4BYTE(arg->line_thr_3_g, arg->line_thr_3_rb,
208229 arg->sw_mindis3_g, arg->sw_mindis3_rb);
209
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_3);
210
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_3);
230
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_THRESH_3, id);
231
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_THRESH_3, id);
211232
212233 value = ISP_PACK_4BYTE(arg->line_mad_fac_3_g, arg->line_mad_fac_3_rb,
213234 arg->sw_dis_scale_max3, arg->sw_dis_scale_min3);
214
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_3);
215
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_3);
235
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_LINE_MAD_FAC_3, id);
236
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_LINE_MAD_FAC_3, id);
216237
217238 value = ISP_PACK_4BYTE(arg->pg_fac_3_g, arg->pg_fac_3_rb, 0, 0);
218
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_PG_FAC_3);
219
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_PG_FAC_3);
239
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_PG_FAC_3, id);
240
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_PG_FAC_3, id);
220241
221242 value = ISP_PACK_4BYTE(arg->rnd_thr_3_g, arg->rnd_thr_3_rb, 0, 0);
222
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_THRESH_3);
223
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_THRESH_3);
243
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_THRESH_3, id);
244
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_THRESH_3, id);
224245
225246 value = ISP_PACK_4BYTE(arg->rg_fac_3_g, arg->rg_fac_3_rb, 0, 0);
226
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_RG_FAC_3);
227
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_RG_FAC_3);
247
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_RG_FAC_3, id);
248
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_RG_FAC_3, id);
228249
229250 value = (arg->ro_lim_3_rb & 0x03) << 10 |
230251 (arg->ro_lim_3_g & 0x03) << 8 |
....@@ -232,8 +253,8 @@
232253 (arg->ro_lim_2_g & 0x03) << 4 |
233254 (arg->ro_lim_1_rb & 0x03) << 2 |
234255 (arg->ro_lim_1_g & 0x03);
235
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_RO_LIMITS);
236
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_RO_LIMITS);
256
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_RO_LIMITS, id);
257
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_RO_LIMITS, id);
237258
238259 value = (arg->rnd_offs_3_rb & 0x03) << 10 |
239260 (arg->rnd_offs_3_g & 0x03) << 8 |
....@@ -241,8 +262,8 @@
241262 (arg->rnd_offs_2_g & 0x03) << 4 |
242263 (arg->rnd_offs_1_rb & 0x03) << 2 |
243264 (arg->rnd_offs_1_g & 0x03);
244
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_OFFS);
245
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_OFFS);
265
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_RND_OFFS, id);
266
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_RND_OFFS, id);
246267
247268 value = !!arg->bpt_rb_3x3 << 11 |
248269 !!arg->bpt_g_3x3 << 10 |
....@@ -254,75 +275,75 @@
254275 !!arg->bpt_use_set_1 << 4 |
255276 !!arg->bpt_cor_en << 1 |
256277 !!arg->bpt_det_en;
257
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_BPT_CTRL);
258
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_BPT_CTRL);
278
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_BPT_CTRL, id);
279
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_BPT_CTRL, id);
259280
260
- isp3_param_write(params_vdev, arg->bp_number, ISP3X_DPCC0_BPT_NUMBER);
261
- isp3_param_write(params_vdev, arg->bp_number, ISP3X_DPCC1_BPT_NUMBER);
262
- isp3_param_write(params_vdev, arg->bp_table_addr, ISP3X_DPCC0_BPT_ADDR);
263
- isp3_param_write(params_vdev, arg->bp_table_addr, ISP3X_DPCC1_BPT_ADDR);
281
+ isp3_param_write(params_vdev, arg->bp_number, ISP3X_DPCC0_BPT_NUMBER, id);
282
+ isp3_param_write(params_vdev, arg->bp_number, ISP3X_DPCC1_BPT_NUMBER, id);
283
+ isp3_param_write(params_vdev, arg->bp_table_addr, ISP3X_DPCC0_BPT_ADDR, id);
284
+ isp3_param_write(params_vdev, arg->bp_table_addr, ISP3X_DPCC1_BPT_ADDR, id);
264285
265286 value = ISP_PACK_2SHORT(arg->bpt_h_addr, arg->bpt_v_addr);
266
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_BPT_DATA);
267
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_BPT_DATA);
287
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_BPT_DATA, id);
288
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_BPT_DATA, id);
268289
269
- isp3_param_write(params_vdev, arg->bp_cnt, ISP3X_DPCC0_BP_CNT);
270
- isp3_param_write(params_vdev, arg->bp_cnt, ISP3X_DPCC1_BP_CNT);
290
+ isp3_param_write(params_vdev, arg->bp_cnt, ISP3X_DPCC0_BP_CNT, id);
291
+ isp3_param_write(params_vdev, arg->bp_cnt, ISP3X_DPCC1_BP_CNT, id);
271292
272
- isp3_param_write(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC0_PDAF_EN);
273
- isp3_param_write(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC1_PDAF_EN);
293
+ isp3_param_write(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC0_PDAF_EN, id);
294
+ isp3_param_write(params_vdev, arg->sw_pdaf_en, ISP3X_DPCC1_PDAF_EN, id);
274295
275296 value = 0;
276297 for (i = 0; i < ISP32_DPCC_PDAF_POINT_NUM; i++)
277298 value |= !!arg->pdaf_point_en[i] << i;
278
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_POINT_EN);
279
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_POINT_EN);
299
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_POINT_EN, id);
300
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_POINT_EN, id);
280301
281302 value = ISP_PACK_2SHORT(arg->pdaf_offsetx, arg->pdaf_offsety);
282
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_OFFSET);
283
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_OFFSET);
303
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_OFFSET, id);
304
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_OFFSET, id);
284305
285306 value = ISP_PACK_2SHORT(arg->pdaf_wrapx, arg->pdaf_wrapy);
286
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_WRAP);
287
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_WRAP);
307
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_WRAP, id);
308
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_WRAP, id);
288309
289310 value = ISP_PACK_2SHORT(arg->pdaf_wrapx_num, arg->pdaf_wrapy_num);
290
- isp3_param_write(params_vdev, value, ISP_DPCC0_PDAF_SCOPE);
291
- isp3_param_write(params_vdev, value, ISP_DPCC1_PDAF_SCOPE);
311
+ isp3_param_write(params_vdev, value, ISP_DPCC0_PDAF_SCOPE, id);
312
+ isp3_param_write(params_vdev, value, ISP_DPCC1_PDAF_SCOPE, id);
292313
293314 for (i = 0; i < ISP32_DPCC_PDAF_POINT_NUM / 2; i++) {
294315 value = ISP_PACK_4BYTE(arg->point[2 * i].x, arg->point[2 * i].y,
295316 arg->point[2 * i + 1].x, arg->point[2 * i + 1].y);
296
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_POINT_0 + 4 * i);
297
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_POINT_0 + 4 * i);
317
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_PDAF_POINT_0 + 4 * i, id);
318
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_PDAF_POINT_0 + 4 * i, id);
298319 }
299320
300
- isp3_param_write(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC0_PDAF_FORWARD_MED);
301
- isp3_param_write(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC1_PDAF_FORWARD_MED);
321
+ isp3_param_write(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC0_PDAF_FORWARD_MED, id);
322
+ isp3_param_write(params_vdev, arg->pdaf_forward_med, ISP3X_DPCC1_PDAF_FORWARD_MED, id);
302323 }
303324
304325 static void
305
-isp_dpcc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
326
+isp_dpcc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
306327 {
307328 u32 value;
308329
309
- value = isp3_param_read(params_vdev, ISP3X_DPCC0_MODE);
330
+ value = isp3_param_read(params_vdev, ISP3X_DPCC0_MODE, id);
310331 value &= ~ISP_DPCC_EN;
311332
312333 if (en)
313334 value |= ISP_DPCC_EN;
314
- isp3_param_write(params_vdev, value, ISP3X_DPCC0_MODE);
315
- isp3_param_write(params_vdev, value, ISP3X_DPCC1_MODE);
335
+ isp3_param_write(params_vdev, value, ISP3X_DPCC0_MODE, id);
336
+ isp3_param_write(params_vdev, value, ISP3X_DPCC1_MODE, id);
316337 }
317338
318339 static void
319340 isp_bls_config(struct rkisp_isp_params_vdev *params_vdev,
320
- const struct isp32_bls_cfg *arg)
341
+ const struct isp32_bls_cfg *arg, u32 id)
321342 {
322343 const struct isp2x_bls_fixed_val *pval;
323344 u32 new_control, value;
324345
325
- new_control = isp3_param_read(params_vdev, ISP3X_BLS_CTRL);
346
+ new_control = isp3_param_read(params_vdev, ISP3X_BLS_CTRL, id);
326347 new_control &= (ISP_BLS_ENA | ISP32_BLS_BLS2_EN);
327348
328349 pval = &arg->bls1_val;
....@@ -331,29 +352,29 @@
331352
332353 switch (params_vdev->raw_type) {
333354 case RAW_BGGR:
334
- isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_D_FIXED);
335
- isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_C_FIXED);
336
- isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_B_FIXED);
337
- isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_A_FIXED);
355
+ isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_D_FIXED, id);
356
+ isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_C_FIXED, id);
357
+ isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_B_FIXED, id);
358
+ isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_A_FIXED, id);
338359 break;
339360 case RAW_GBRG:
340
- isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_C_FIXED);
341
- isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_D_FIXED);
342
- isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_A_FIXED);
343
- isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_B_FIXED);
361
+ isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_C_FIXED, id);
362
+ isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_D_FIXED, id);
363
+ isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_A_FIXED, id);
364
+ isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_B_FIXED, id);
344365 break;
345366 case RAW_GRBG:
346
- isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_B_FIXED);
347
- isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_A_FIXED);
348
- isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_D_FIXED);
349
- isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_C_FIXED);
367
+ isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_B_FIXED, id);
368
+ isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_A_FIXED, id);
369
+ isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_D_FIXED, id);
370
+ isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_C_FIXED, id);
350371 break;
351372 case RAW_RGGB:
352373 default:
353
- isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_A_FIXED);
354
- isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_B_FIXED);
355
- isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_C_FIXED);
356
- isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_D_FIXED);
374
+ isp3_param_write(params_vdev, pval->r, ISP3X_BLS1_A_FIXED, id);
375
+ isp3_param_write(params_vdev, pval->gr, ISP3X_BLS1_B_FIXED, id);
376
+ isp3_param_write(params_vdev, pval->gb, ISP3X_BLS1_C_FIXED, id);
377
+ isp3_param_write(params_vdev, pval->b, ISP3X_BLS1_D_FIXED, id);
357378 break;
358379 }
359380 }
....@@ -363,107 +384,107 @@
363384 if (!arg->enable_auto) {
364385 switch (params_vdev->raw_type) {
365386 case RAW_BGGR:
366
- isp3_param_write(params_vdev, pval->r, ISP3X_BLS_D_FIXED);
367
- isp3_param_write(params_vdev, pval->gr, ISP3X_BLS_C_FIXED);
368
- isp3_param_write(params_vdev, pval->gb, ISP3X_BLS_B_FIXED);
369
- isp3_param_write(params_vdev, pval->b, ISP3X_BLS_A_FIXED);
387
+ isp3_param_write(params_vdev, pval->r, ISP3X_BLS_D_FIXED, id);
388
+ isp3_param_write(params_vdev, pval->gr, ISP3X_BLS_C_FIXED, id);
389
+ isp3_param_write(params_vdev, pval->gb, ISP3X_BLS_B_FIXED, id);
390
+ isp3_param_write(params_vdev, pval->b, ISP3X_BLS_A_FIXED, id);
370391 break;
371392 case RAW_GBRG:
372
- isp3_param_write(params_vdev, pval->r, ISP3X_BLS_C_FIXED);
373
- isp3_param_write(params_vdev, pval->gr, ISP3X_BLS_D_FIXED);
374
- isp3_param_write(params_vdev, pval->gb, ISP3X_BLS_A_FIXED);
375
- isp3_param_write(params_vdev, pval->b, ISP3X_BLS_B_FIXED);
393
+ isp3_param_write(params_vdev, pval->r, ISP3X_BLS_C_FIXED, id);
394
+ isp3_param_write(params_vdev, pval->gr, ISP3X_BLS_D_FIXED, id);
395
+ isp3_param_write(params_vdev, pval->gb, ISP3X_BLS_A_FIXED, id);
396
+ isp3_param_write(params_vdev, pval->b, ISP3X_BLS_B_FIXED, id);
376397 break;
377398 case RAW_GRBG:
378
- isp3_param_write(params_vdev, pval->r, ISP3X_BLS_B_FIXED);
379
- isp3_param_write(params_vdev, pval->gr, ISP3X_BLS_A_FIXED);
380
- isp3_param_write(params_vdev, pval->gb, ISP3X_BLS_D_FIXED);
381
- isp3_param_write(params_vdev, pval->b, ISP3X_BLS_C_FIXED);
399
+ isp3_param_write(params_vdev, pval->r, ISP3X_BLS_B_FIXED, id);
400
+ isp3_param_write(params_vdev, pval->gr, ISP3X_BLS_A_FIXED, id);
401
+ isp3_param_write(params_vdev, pval->gb, ISP3X_BLS_D_FIXED, id);
402
+ isp3_param_write(params_vdev, pval->b, ISP3X_BLS_C_FIXED, id);
382403 break;
383404 case RAW_RGGB:
384405 default:
385
- isp3_param_write(params_vdev, pval->r, ISP3X_BLS_A_FIXED);
386
- isp3_param_write(params_vdev, pval->gr, ISP3X_BLS_B_FIXED);
387
- isp3_param_write(params_vdev, pval->gb, ISP3X_BLS_C_FIXED);
388
- isp3_param_write(params_vdev, pval->b, ISP3X_BLS_D_FIXED);
406
+ isp3_param_write(params_vdev, pval->r, ISP3X_BLS_A_FIXED, id);
407
+ isp3_param_write(params_vdev, pval->gr, ISP3X_BLS_B_FIXED, id);
408
+ isp3_param_write(params_vdev, pval->gb, ISP3X_BLS_C_FIXED, id);
409
+ isp3_param_write(params_vdev, pval->b, ISP3X_BLS_D_FIXED, id);
389410 break;
390411 }
391412 } else {
392413 if (arg->en_windows & BIT(1)) {
393
- isp3_param_write(params_vdev, arg->bls_window2.h_offs, ISP3X_BLS_H2_START);
414
+ isp3_param_write(params_vdev, arg->bls_window2.h_offs, ISP3X_BLS_H2_START, id);
394415 value = arg->bls_window2.h_offs + arg->bls_window2.h_size;
395
- isp3_param_write(params_vdev, value, ISP3X_BLS_H2_STOP);
396
- isp3_param_write(params_vdev, arg->bls_window2.v_offs, ISP3X_BLS_V2_START);
416
+ isp3_param_write(params_vdev, value, ISP3X_BLS_H2_STOP, id);
417
+ isp3_param_write(params_vdev, arg->bls_window2.v_offs, ISP3X_BLS_V2_START, id);
397418 value = arg->bls_window2.v_offs + arg->bls_window2.v_size;
398
- isp3_param_write(params_vdev, value, ISP3X_BLS_V2_STOP);
419
+ isp3_param_write(params_vdev, value, ISP3X_BLS_V2_STOP, id);
399420 new_control |= ISP_BLS_WINDOW_2;
400421 }
401422
402423 if (arg->en_windows & BIT(0)) {
403
- isp3_param_write(params_vdev, arg->bls_window1.h_offs, ISP3X_BLS_H1_START);
424
+ isp3_param_write(params_vdev, arg->bls_window1.h_offs, ISP3X_BLS_H1_START, id);
404425 value = arg->bls_window1.h_offs + arg->bls_window1.h_size;
405
- isp3_param_write(params_vdev, value, ISP3X_BLS_H1_STOP);
406
- isp3_param_write(params_vdev, arg->bls_window1.v_offs, ISP3X_BLS_V1_START);
426
+ isp3_param_write(params_vdev, value, ISP3X_BLS_H1_STOP, id);
427
+ isp3_param_write(params_vdev, arg->bls_window1.v_offs, ISP3X_BLS_V1_START, id);
407428 value = arg->bls_window1.v_offs + arg->bls_window1.v_size;
408
- isp3_param_write(params_vdev, value, ISP3X_BLS_V1_STOP);
429
+ isp3_param_write(params_vdev, value, ISP3X_BLS_V1_STOP, id);
409430 new_control |= ISP_BLS_WINDOW_1;
410431 }
411432
412
- isp3_param_write(params_vdev, arg->bls_samples, ISP3X_BLS_SAMPLES);
433
+ isp3_param_write(params_vdev, arg->bls_samples, ISP3X_BLS_SAMPLES, id);
413434
414435 new_control |= ISP_BLS_MODE_MEASURED;
415436 }
416
- isp3_param_write(params_vdev, new_control, ISP3X_BLS_CTRL);
437
+ isp3_param_write(params_vdev, new_control, ISP3X_BLS_CTRL, id);
417438
418
- isp3_param_write(params_vdev, arg->isp_ob_offset, ISP32_BLS_ISP_OB_OFFSET);
419
- isp3_param_write(params_vdev, arg->isp_ob_predgain, ISP32_BLS_ISP_OB_PREDGAIN);
420
- isp3_param_write(params_vdev, arg->isp_ob_max, ISP32_BLS_ISP_OB_MAX);
439
+ isp3_param_write(params_vdev, arg->isp_ob_offset, ISP32_BLS_ISP_OB_OFFSET, id);
440
+ isp3_param_write(params_vdev, arg->isp_ob_predgain, ISP32_BLS_ISP_OB_PREDGAIN, id);
441
+ isp3_param_write(params_vdev, arg->isp_ob_max, ISP32_BLS_ISP_OB_MAX, id);
421442 }
422443
423444 static void
424
-isp_bls_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
445
+isp_bls_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
425446 {
426447 u32 new_control;
427448
428
- new_control = isp3_param_read(params_vdev, ISP3X_BLS_CTRL);
449
+ new_control = isp3_param_read(params_vdev, ISP3X_BLS_CTRL, id);
429450 if (en)
430451 new_control |= ISP_BLS_ENA;
431452 else
432453 new_control &= ~ISP_BLS_ENA;
433
- isp3_param_write(params_vdev, new_control, ISP3X_BLS_CTRL);
454
+ isp3_param_write(params_vdev, new_control, ISP3X_BLS_CTRL, id);
434455 }
435456
436457 static void
437458 isp_sdg_config(struct rkisp_isp_params_vdev *params_vdev,
438
- const struct isp2x_sdg_cfg *arg)
459
+ const struct isp2x_sdg_cfg *arg, u32 id)
439460 {
440461 int i;
441462
442
- isp3_param_write(params_vdev, arg->xa_pnts.gamma_dx0, ISP3X_ISP_GAMMA_DX_LO);
443
- isp3_param_write(params_vdev, arg->xa_pnts.gamma_dx1, ISP3X_ISP_GAMMA_DX_HI);
463
+ isp3_param_write(params_vdev, arg->xa_pnts.gamma_dx0, ISP3X_ISP_GAMMA_DX_LO, id);
464
+ isp3_param_write(params_vdev, arg->xa_pnts.gamma_dx1, ISP3X_ISP_GAMMA_DX_HI, id);
444465
445466 for (i = 0; i < ISP32_DEGAMMA_CURVE_SIZE; i++) {
446467 isp3_param_write(params_vdev, arg->curve_r.gamma_y[i],
447
- ISP3X_ISP_GAMMA_R_Y_0 + i * 4);
468
+ ISP3X_ISP_GAMMA_R_Y_0 + i * 4, id);
448469 isp3_param_write(params_vdev, arg->curve_g.gamma_y[i],
449
- ISP3X_ISP_GAMMA_G_Y_0 + i * 4);
470
+ ISP3X_ISP_GAMMA_G_Y_0 + i * 4, id);
450471 isp3_param_write(params_vdev, arg->curve_b.gamma_y[i],
451
- ISP3X_ISP_GAMMA_B_Y_0 + i * 4);
472
+ ISP3X_ISP_GAMMA_B_Y_0 + i * 4, id);
452473 }
453474 }
454475
455476 static void
456
-isp_sdg_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
477
+isp_sdg_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
457478 {
458479 u32 val;
459480
460
- val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0);
481
+ val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0, id);
461482 if (en)
462483 isp3_param_write(params_vdev, val | CIF_ISP_CTRL_ISP_GAMMA_IN_ENA,
463
- ISP3X_ISP_CTRL0);
484
+ ISP3X_ISP_CTRL0, id);
464485 else
465486 isp3_param_write(params_vdev, val & ~CIF_ISP_CTRL_ISP_GAMMA_IN_ENA,
466
- ISP3X_ISP_CTRL0);
487
+ ISP3X_ISP_CTRL0, id);
467488 }
468489
469490 static void __maybe_unused
....@@ -524,21 +545,21 @@
524545 }
525546 rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_lsclut[buf_idx]);
526547 data = priv_val->buf_lsclut[buf_idx].dma_addr;
527
- isp3_param_write(params_vdev, data, ISP3X_MI_LUT_LSC_RD_BASE);
528
- isp3_param_write(params_vdev, ISP32_LSC_LUT_TBL_SIZE, ISP3X_MI_LUT_LSC_RD_WSIZE);
548
+ isp3_param_write(params_vdev, data, ISP3X_MI_LUT_LSC_RD_BASE, 0);
549
+ isp3_param_write(params_vdev, ISP32_LSC_LUT_TBL_SIZE, ISP3X_MI_LUT_LSC_RD_WSIZE, 0);
529550 }
530551
531552 static void
532553 isp_lsc_matrix_cfg_sram(struct rkisp_isp_params_vdev *params_vdev,
533554 const struct isp3x_lsc_cfg *pconfig,
534
- bool is_check)
555
+ bool is_check, u32 id)
535556 {
536557 struct rkisp_device *dev = params_vdev->dev;
537
- u32 sram_addr, data, table;
558
+ u32 data = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id);
559
+ u32 sram_addr, table;
538560 int i, j;
539561
540
- if (is_check &&
541
- !(isp3_param_read(params_vdev, ISP3X_LSC_CTRL) & ISP_LSC_EN))
562
+ if (is_check && (data & ISP3X_LSC_LUT_EN || !(data & ISP_LSC_EN)))
542563 return;
543564
544565 table = isp3_param_read_direct(params_vdev, ISP3X_LSC_STATUS);
....@@ -601,33 +622,34 @@
601622 (struct rkisp_isp_params_vdev *)data;
602623 struct isp32_isp_params_cfg *params = params_vdev->isp32_params;
603624
604
- isp_lsc_matrix_cfg_sram(params_vdev, &params->others.lsc_cfg, true);
625
+ isp_lsc_matrix_cfg_sram(params_vdev, &params->others.lsc_cfg, true, 0);
605626 }
606627
607628 static void
608629 isp_lsc_config(struct rkisp_isp_params_vdev *params_vdev,
609
- const struct isp3x_lsc_cfg *arg)
630
+ const struct isp3x_lsc_cfg *arg, u32 id)
610631 {
611632 struct rkisp_isp_params_val_v32 *priv_val =
612633 (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
613
- struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params;
634
+ struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params + id;
614635 struct rkisp_device *dev = params_vdev->dev;
615636 u32 data, lsc_ctrl;
616637 int i;
617638
618
- lsc_ctrl = isp3_param_read(params_vdev, ISP3X_LSC_CTRL);
639
+ lsc_ctrl = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id);
619640 if (dev->isp_ver == ISP_V32_L) {
620641 /* one lsc sram table
621642 * online mode lsc lut load from ddr quick for some sensor VB short
622643 * readback mode lsc lut AHB config to sram, once for single device,
623644 * need record to switch for multi-device.
624645 */
625
- if (!IS_HDR_RDBK(dev->rd_mode))
646
+ if (!IS_HDR_RDBK(dev->rd_mode)) {
626647 isp_lsc_matrix_cfg_ddr(params_vdev, arg);
627
- else if (dev->hw_dev->is_single)
628
- isp_lsc_matrix_cfg_sram(params_vdev, arg, false);
629
- else
648
+ } else {
649
+ if (dev->hw_dev->is_single)
650
+ isp_lsc_matrix_cfg_sram(params_vdev, arg, false, id);
630651 params_rec->others.lsc_cfg = *arg;
652
+ }
631653 } else {
632654 /* two lsc sram table */
633655 params_rec->others.lsc_cfg = *arg;
....@@ -637,27 +659,27 @@
637659 for (i = 0; i < ISP32_LSC_SIZE_TBL_SIZE / 4; i++) {
638660 /* program x size tables */
639661 data = CIF_ISP_LSC_SECT_SIZE(arg->x_size_tbl[i * 2], arg->x_size_tbl[i * 2 + 1]);
640
- isp3_param_write(params_vdev, data, ISP3X_LSC_XSIZE_01 + i * 4);
662
+ isp3_param_write(params_vdev, data, ISP3X_LSC_XSIZE_01 + i * 4, id);
641663 data = CIF_ISP_LSC_SECT_SIZE(arg->x_size_tbl[i * 2 + 8], arg->x_size_tbl[i * 2 + 9]);
642
- isp3_param_write(params_vdev, data, ISP3X_LSC_XSIZE_89 + i * 4);
664
+ isp3_param_write(params_vdev, data, ISP3X_LSC_XSIZE_89 + i * 4, id);
643665
644666 /* program x grad tables */
645667 data = CIF_ISP_LSC_SECT_SIZE(arg->x_grad_tbl[i * 2], arg->x_grad_tbl[i * 2 + 1]);
646
- isp3_param_write(params_vdev, data, ISP3X_LSC_XGRAD_01 + i * 4);
668
+ isp3_param_write(params_vdev, data, ISP3X_LSC_XGRAD_01 + i * 4, id);
647669 data = CIF_ISP_LSC_SECT_SIZE(arg->x_grad_tbl[i * 2 + 8], arg->x_grad_tbl[i * 2 + 9]);
648
- isp3_param_write(params_vdev, data, ISP3X_LSC_XGRAD_89 + i * 4);
670
+ isp3_param_write(params_vdev, data, ISP3X_LSC_XGRAD_89 + i * 4, id);
649671
650672 /* program y size tables */
651673 data = CIF_ISP_LSC_SECT_SIZE(arg->y_size_tbl[i * 2], arg->y_size_tbl[i * 2 + 1]);
652
- isp3_param_write(params_vdev, data, ISP3X_LSC_YSIZE_01 + i * 4);
674
+ isp3_param_write(params_vdev, data, ISP3X_LSC_YSIZE_01 + i * 4, id);
653675 data = CIF_ISP_LSC_SECT_SIZE(arg->y_size_tbl[i * 2 + 8], arg->y_size_tbl[i * 2 + 9]);
654
- isp3_param_write(params_vdev, data, ISP3X_LSC_YSIZE_89 + i * 4);
676
+ isp3_param_write(params_vdev, data, ISP3X_LSC_YSIZE_89 + i * 4, id);
655677
656678 /* program y grad tables */
657679 data = CIF_ISP_LSC_SECT_SIZE(arg->y_grad_tbl[i * 2], arg->y_grad_tbl[i * 2 + 1]);
658
- isp3_param_write(params_vdev, data, ISP3X_LSC_YGRAD_01 + i * 4);
680
+ isp3_param_write(params_vdev, data, ISP3X_LSC_YGRAD_01 + i * 4, id);
659681 data = CIF_ISP_LSC_SECT_SIZE(arg->y_grad_tbl[i * 2 + 8], arg->y_grad_tbl[i * 2 + 9]);
660
- isp3_param_write(params_vdev, data, ISP3X_LSC_YGRAD_89 + i * 4);
682
+ isp3_param_write(params_vdev, data, ISP3X_LSC_YGRAD_89 + i * 4, id);
661683 }
662684
663685 if (arg->sector_16x16)
....@@ -666,15 +688,15 @@
666688 lsc_ctrl &= ~ISP3X_LSC_SECTOR_16X16;
667689 if (dev->isp_ver == ISP_V32_L && !IS_HDR_RDBK(dev->rd_mode))
668690 lsc_ctrl |= ISP3X_LSC_LUT_EN;
669
- isp3_param_write(params_vdev, lsc_ctrl, ISP3X_LSC_CTRL);
691
+ isp3_param_write(params_vdev, lsc_ctrl, ISP3X_LSC_CTRL, id);
670692 }
671693
672694 static void
673
-isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
695
+isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
674696 {
675697 struct rkisp_device *dev = params_vdev->dev;
676
- struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params;
677
- u32 val = isp3_param_read(params_vdev, ISP3X_LSC_CTRL);
698
+ struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params + id;
699
+ u32 val = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id);
678700
679701 if (en == !!(val & ISP_LSC_EN))
680702 return;
....@@ -683,99 +705,99 @@
683705 val = ISP_LSC_EN | ISP32_SELF_FORCE_UPD;
684706 if (dev->isp_ver == ISP_V32_L && !IS_HDR_RDBK(dev->rd_mode))
685707 val |= ISP3X_LSC_LUT_EN;
686
- isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, val);
708
+ isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, val, id);
687709 if (dev->isp_ver == ISP_V32 && params_vdev->dev->hw_dev->is_single)
688710 isp_lsc_matrix_cfg_sram(params_vdev,
689
- &params_rec->others.lsc_cfg, false);
711
+ &params_rec->others.lsc_cfg, false, id);
690712 } else {
691
- isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN);
692
- isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(8));
713
+ isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN, id);
714
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(8), id);
693715 }
694716 }
695717
696718 static void
697719 isp_debayer_config(struct rkisp_isp_params_vdev *params_vdev,
698
- const struct isp32_debayer_cfg *arg)
720
+ const struct isp32_debayer_cfg *arg, u32 id)
699721 {
700722 u32 value;
701723
702
- value = isp3_param_read(params_vdev, ISP3X_DEBAYER_CONTROL);
724
+ value = isp3_param_read(params_vdev, ISP3X_DEBAYER_CONTROL, id);
703725 value &= ISP_DEBAYER_EN;
704726
705727 value |= !!arg->filter_g_en << 4;
706728 if (params_vdev->dev->isp_ver == ISP_V32)
707729 value |= !!arg->filter_c_en << 8;
708
- isp3_param_write(params_vdev, value, ISP3X_DEBAYER_CONTROL);
730
+ isp3_param_write(params_vdev, value, ISP3X_DEBAYER_CONTROL, id);
709731
710732 value = (arg->max_ratio & 0x3F) << 24 | arg->select_thed << 16 |
711733 (arg->thed1 & 0x0F) << 12 | (arg->thed0 & 0x0F) << 8 |
712734 (arg->dist_scale & 0x0F) << 4 | !!arg->clip_en;
713
- isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP);
735
+ isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP, id);
714736
715737 value = (arg->filter1_coe4 & 0x1F) << 24 | (arg->filter1_coe3 & 0x1F) << 16 |
716738 (arg->filter1_coe2 & 0x1F) << 8 | (arg->filter1_coe1 & 0x1F);
717
- isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER1);
739
+ isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER1, id);
718740
719741 value = (arg->filter2_coe4 & 0x1F) << 24 | (arg->filter2_coe3 & 0x1F) << 16 |
720742 (arg->filter2_coe2 & 0x1F) << 8 | (arg->filter2_coe1 & 0x1F);
721
- isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER2);
743
+ isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER2, id);
722744
723745 value = arg->hf_offset << 16 | (arg->gain_offset & 0xFFF);
724
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_G_INTERP_OFFSET);
746
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_G_INTERP_OFFSET, id);
725747
726748 value = (arg->offset & 0x7FF);
727
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_G_FILTER_OFFSET);
749
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_G_FILTER_OFFSET, id);
728750
729751 if (params_vdev->dev->isp_ver != ISP_V32)
730752 return;
731753
732754 value = arg->guid_gaus_coe2 << 16 |
733755 arg->guid_gaus_coe1 << 8 | arg->guid_gaus_coe0;
734
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_GUIDE_GAUS);
756
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_GUIDE_GAUS, id);
735757
736758 value = arg->ce_gaus_coe2 << 16 |
737759 arg->ce_gaus_coe1 << 8 | arg->ce_gaus_coe0;
738
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_CE_GAUS);
760
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_CE_GAUS, id);
739761
740762 value = arg->alpha_gaus_coe2 << 16 |
741763 arg->alpha_gaus_coe1 << 8 | arg->alpha_gaus_coe0;
742
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_ALPHA_GAUS);
764
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_ALPHA_GAUS, id);
743765
744766 value = (arg->loggd_offset & 0xfff) << 16 | (arg->loghf_offset & 0x1fff);
745
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_LOG_OFFSET);
767
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_LOG_OFFSET, id);
746768
747769 value = (arg->alpha_scale & 0xfffff) << 12 | (arg->alpha_offset & 0xfff);
748
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_ALPHA);
770
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_ALPHA, id);
749771
750772 value = (arg->edge_scale & 0xfffff) << 12 | (arg->edge_offset & 0xfff);
751
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_EDGE);
773
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_EDGE, id);
752774
753775 value = (arg->wgtslope & 0xfff) << 16 |
754776 (arg->exp_shift & 0x3f) << 8 | arg->ce_sgm;
755
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_IIR_0);
777
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_IIR_0, id);
756778
757779 value = (arg->wet_ghost & 0x3f) << 8 | (arg->wet_clip & 0x7f);
758
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_IIR_1);
780
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_IIR_1, id);
759781
760782 value = (arg->bf_curwgt & 0x7f) << 24 |
761783 (arg->bf_clip & 0x7f) << 16 | arg->bf_sgm;
762
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_BF);
784
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_BF, id);
763785 }
764786
765787 static void
766
-isp_debayer_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
788
+isp_debayer_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
767789 {
768790 if (en)
769791 isp3_param_set_bits(params_vdev,
770
- ISP3X_DEBAYER_CONTROL, ISP32_MODULE_EN);
792
+ ISP3X_DEBAYER_CONTROL, ISP32_MODULE_EN, id);
771793 else
772794 isp3_param_clear_bits(params_vdev,
773
- ISP3X_DEBAYER_CONTROL, ISP32_MODULE_EN);
795
+ ISP3X_DEBAYER_CONTROL, ISP32_MODULE_EN, id);
774796 }
775797
776798 static void
777799 isp_awbgain_config(struct rkisp_isp_params_vdev *params_vdev,
778
- const struct isp32_awb_gain_cfg *arg)
800
+ const struct isp32_awb_gain_cfg *arg, u32 id)
779801 {
780802 struct rkisp_device *dev = params_vdev->dev;
781803
....@@ -791,184 +813,184 @@
791813
792814 isp3_param_write(params_vdev,
793815 ISP_PACK_2SHORT(arg->gain0_green_b, arg->gain0_green_r),
794
- ISP3X_ISP_AWB_GAIN0_G);
816
+ ISP3X_ISP_AWB_GAIN0_G, id);
795817 isp3_param_write(params_vdev,
796818 ISP_PACK_2SHORT(arg->gain0_blue, arg->gain0_red),
797
- ISP3X_ISP_AWB_GAIN0_RB);
819
+ ISP3X_ISP_AWB_GAIN0_RB, id);
798820
799821 isp3_param_write(params_vdev,
800822 ISP_PACK_2SHORT(arg->gain1_green_b, arg->gain1_green_r),
801
- ISP3X_ISP_AWB_GAIN1_G);
823
+ ISP3X_ISP_AWB_GAIN1_G, id);
802824 isp3_param_write(params_vdev,
803825 ISP_PACK_2SHORT(arg->gain1_blue, arg->gain1_red),
804
- ISP3X_ISP_AWB_GAIN1_RB);
826
+ ISP3X_ISP_AWB_GAIN1_RB, id);
805827
806828 isp3_param_write(params_vdev,
807829 ISP_PACK_2SHORT(arg->gain2_green_b, arg->gain2_green_r),
808
- ISP3X_ISP_AWB_GAIN2_G);
830
+ ISP3X_ISP_AWB_GAIN2_G, id);
809831 isp3_param_write(params_vdev,
810832 ISP_PACK_2SHORT(arg->gain2_blue, arg->gain2_red),
811
- ISP3X_ISP_AWB_GAIN2_RB);
833
+ ISP3X_ISP_AWB_GAIN2_RB, id);
812834
813835 isp3_param_write(params_vdev,
814836 ISP_PACK_2SHORT(arg->awb1_gain_gb, arg->awb1_gain_gr),
815
- ISP32_ISP_AWB1_GAIN_G);
837
+ ISP32_ISP_AWB1_GAIN_G, id);
816838 isp3_param_write(params_vdev,
817839 ISP_PACK_2SHORT(arg->awb1_gain_b, arg->awb1_gain_r),
818
- ISP32_ISP_AWB1_GAIN_RB);
840
+ ISP32_ISP_AWB1_GAIN_RB, id);
819841 }
820842
821843 static void
822
-isp_awbgain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
844
+isp_awbgain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
823845 {
824846 u32 val;
825847
826
- val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0);
848
+ val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0, id);
827849 if (en)
828850 isp3_param_write(params_vdev, val | CIF_ISP_CTRL_ISP_AWB_ENA,
829
- ISP3X_ISP_CTRL0);
851
+ ISP3X_ISP_CTRL0, id);
830852 else
831853 isp3_param_write(params_vdev, val & ~CIF_ISP_CTRL_ISP_AWB_ENA,
832
- ISP3X_ISP_CTRL0);
854
+ ISP3X_ISP_CTRL0, id);
833855 }
834856
835857 static void
836858 isp_ccm_config(struct rkisp_isp_params_vdev *params_vdev,
837
- const struct isp32_ccm_cfg *arg)
859
+ const struct isp32_ccm_cfg *arg, u32 id)
838860 {
839861 u32 value;
840862 u32 i;
841863
842
- value = isp3_param_read(params_vdev, ISP3X_CCM_CTRL);
864
+ value = isp3_param_read(params_vdev, ISP3X_CCM_CTRL, id);
843865 value &= ISP_CCM_EN;
844866
845867 value |= !!arg->asym_adj_en << 3 |
846868 !!arg->enh_adj_en << 2 |
847869 !!arg->highy_adjust_dis << 1;
848
- isp3_param_write(params_vdev, value, ISP3X_CCM_CTRL);
870
+ isp3_param_write(params_vdev, value, ISP3X_CCM_CTRL, id);
849871
850872 value = ISP_PACK_2SHORT(arg->coeff0_r, arg->coeff1_r);
851
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_R);
873
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_R, id);
852874
853875 value = ISP_PACK_2SHORT(arg->coeff2_r, arg->offset_r);
854
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_R);
876
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_R, id);
855877
856878 value = ISP_PACK_2SHORT(arg->coeff0_g, arg->coeff1_g);
857
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_G);
879
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_G, id);
858880
859881 value = ISP_PACK_2SHORT(arg->coeff2_g, arg->offset_g);
860
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_G);
882
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_G, id);
861883
862884 value = ISP_PACK_2SHORT(arg->coeff0_b, arg->coeff1_b);
863
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_B);
885
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_B, id);
864886
865887 value = ISP_PACK_2SHORT(arg->coeff2_b, arg->offset_b);
866
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_B);
888
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_B, id);
867889
868890 value = ISP_PACK_2SHORT(arg->coeff0_y, arg->coeff1_y);
869
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_Y);
891
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_Y, id);
870892
871893 value = ISP_PACK_2SHORT(arg->coeff2_y, 0);
872
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_Y);
894
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_Y, id);
873895
874896 for (i = 0; i < ISP32_CCM_CURVE_NUM / 2; i++) {
875897 value = ISP_PACK_2SHORT(arg->alp_y[2 * i], arg->alp_y[2 * i + 1]);
876
- isp3_param_write(params_vdev, value, ISP3X_CCM_ALP_Y0 + 4 * i);
898
+ isp3_param_write(params_vdev, value, ISP3X_CCM_ALP_Y0 + 4 * i, id);
877899 }
878900
879901 value = (arg->right_bit & 0xf) << 4 | (arg->bound_bit & 0xf);
880
- isp3_param_write(params_vdev, value, ISP3X_CCM_BOUND_BIT);
902
+ isp3_param_write(params_vdev, value, ISP3X_CCM_BOUND_BIT, id);
881903
882904 value = (arg->color_coef1_g2y & 0x7ff) << 16 |
883905 (arg->color_coef0_r2y & 0x7ff);
884
- isp3_param_write(params_vdev, value, ISP32_CCM_ENHANCE0);
906
+ isp3_param_write(params_vdev, value, ISP32_CCM_ENHANCE0, id);
885907
886908 value = (arg->color_enh_rat_max & 0x3fff) << 16 |
887909 (arg->color_coef2_b2y & 0x7ff);
888
- isp3_param_write(params_vdev, value, ISP32_CCM_ENHANCE1);
910
+ isp3_param_write(params_vdev, value, ISP32_CCM_ENHANCE1, id);
889911 }
890912
891913 static void
892
-isp_ccm_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
914
+isp_ccm_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
893915 {
894916 if (en)
895
- isp3_param_set_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN);
917
+ isp3_param_set_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN, id);
896918 else
897
- isp3_param_clear_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN);
919
+ isp3_param_clear_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN, id);
898920 }
899921
900922 static void
901923 isp_goc_config(struct rkisp_isp_params_vdev *params_vdev,
902
- const struct isp3x_gammaout_cfg *arg)
924
+ const struct isp3x_gammaout_cfg *arg, u32 id)
903925 {
904926 int i;
905927 u32 value;
906928
907
- value = isp3_param_read(params_vdev, ISP3X_GAMMA_OUT_CTRL);
929
+ value = isp3_param_read(params_vdev, ISP3X_GAMMA_OUT_CTRL, id);
908930 value &= ISP3X_GAMMA_OUT_EN;
909931 value |= !!arg->equ_segm << 1 | !!arg->finalx4_dense_en << 2;
910
- isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_CTRL);
932
+ isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_CTRL, id);
911933
912
- isp3_param_write(params_vdev, arg->offset, ISP3X_GAMMA_OUT_OFFSET);
934
+ isp3_param_write(params_vdev, arg->offset, ISP3X_GAMMA_OUT_OFFSET, id);
913935 for (i = 0; i < ISP32_GAMMA_OUT_MAX_SAMPLES / 2; i++) {
914936 value = ISP_PACK_2SHORT(arg->gamma_y[2 * i],
915937 arg->gamma_y[2 * i + 1]);
916
- isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_Y0 + i * 4);
938
+ isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_Y0 + i * 4, id);
917939 }
918
- isp3_param_write(params_vdev, arg->gamma_y[2 * i], ISP3X_GAMMA_OUT_Y0 + i * 4);
940
+ isp3_param_write(params_vdev, arg->gamma_y[2 * i], ISP3X_GAMMA_OUT_Y0 + i * 4, id);
919941 }
920942
921943 static void
922
-isp_goc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
944
+isp_goc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
923945 {
924946 if (en)
925
- isp3_param_set_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, ISP3X_GAMMA_OUT_EN);
947
+ isp3_param_set_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, ISP3X_GAMMA_OUT_EN, id);
926948 else
927
- isp3_param_clear_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, ISP3X_GAMMA_OUT_EN);
949
+ isp3_param_clear_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, ISP3X_GAMMA_OUT_EN, id);
928950 }
929951
930952 static void
931953 isp_cproc_config(struct rkisp_isp_params_vdev *params_vdev,
932
- const struct isp2x_cproc_cfg *arg)
954
+ const struct isp2x_cproc_cfg *arg, u32 id)
933955 {
934956 u32 quantization = params_vdev->quantization;
935957
936
- isp3_param_write(params_vdev, arg->contrast, ISP3X_CPROC_CONTRAST);
937
- isp3_param_write(params_vdev, arg->hue, ISP3X_CPROC_HUE);
938
- isp3_param_write(params_vdev, arg->sat, ISP3X_CPROC_SATURATION);
939
- isp3_param_write(params_vdev, arg->brightness, ISP3X_CPROC_BRIGHTNESS);
958
+ isp3_param_write(params_vdev, arg->contrast, ISP3X_CPROC_CONTRAST, id);
959
+ isp3_param_write(params_vdev, arg->hue, ISP3X_CPROC_HUE, id);
960
+ isp3_param_write(params_vdev, arg->sat, ISP3X_CPROC_SATURATION, id);
961
+ isp3_param_write(params_vdev, arg->brightness, ISP3X_CPROC_BRIGHTNESS, id);
940962
941963 if (quantization != V4L2_QUANTIZATION_FULL_RANGE) {
942964 isp3_param_clear_bits(params_vdev, ISP3X_CPROC_CTRL,
943965 CIF_C_PROC_YOUT_FULL |
944966 CIF_C_PROC_YIN_FULL |
945
- CIF_C_PROC_COUT_FULL);
967
+ CIF_C_PROC_COUT_FULL, id);
946968 } else {
947969 isp3_param_set_bits(params_vdev, ISP3X_CPROC_CTRL,
948970 CIF_C_PROC_YOUT_FULL |
949971 CIF_C_PROC_YIN_FULL |
950
- CIF_C_PROC_COUT_FULL);
972
+ CIF_C_PROC_COUT_FULL, id);
951973 }
952974 }
953975
954976 static void
955
-isp_cproc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
977
+isp_cproc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
956978 {
957979 if (en)
958980 isp3_param_set_bits(params_vdev, ISP3X_CPROC_CTRL,
959
- CIF_C_PROC_CTR_ENABLE);
981
+ CIF_C_PROC_CTR_ENABLE, id);
960982 else
961983 isp3_param_clear_bits(params_vdev, ISP3X_CPROC_CTRL,
962
- CIF_C_PROC_CTR_ENABLE);
984
+ CIF_C_PROC_CTR_ENABLE, id);
963985 }
964986
965987 static void
966988 isp_ie_config(struct rkisp_isp_params_vdev *params_vdev,
967
- const struct isp2x_ie_cfg *arg)
989
+ const struct isp2x_ie_cfg *arg, u32 id)
968990 {
969991 u32 eff_ctrl;
970992
971
- eff_ctrl = isp3_param_read(params_vdev, ISP3X_IMG_EFF_CTRL);
993
+ eff_ctrl = isp3_param_read(params_vdev, ISP3X_IMG_EFF_CTRL, id);
972994 eff_ctrl &= ~CIF_IMG_EFF_CTRL_MODE_MASK;
973995
974996 if (params_vdev->quantization == V4L2_QUANTIZATION_FULL_RANGE)
....@@ -979,7 +1001,7 @@
9791001 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_SEPIA;
9801002 break;
9811003 case V4L2_COLORFX_SET_CBCR:
982
- isp3_param_write(params_vdev, arg->eff_tint, ISP3X_IMG_EFF_TINT);
1004
+ isp3_param_write(params_vdev, arg->eff_tint, ISP3X_IMG_EFF_TINT, id);
9831005 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_SEPIA;
9841006 break;
9851007 /*
....@@ -989,25 +1011,25 @@
9891011 case V4L2_COLORFX_AQUA:
9901012 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_COLOR_SEL;
9911013 isp3_param_write(params_vdev, arg->color_sel,
992
- ISP3X_IMG_EFF_COLOR_SEL);
1014
+ ISP3X_IMG_EFF_COLOR_SEL, id);
9931015 break;
9941016 case V4L2_COLORFX_EMBOSS:
9951017 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_EMBOSS;
9961018 isp3_param_write(params_vdev, arg->eff_mat_1,
997
- CIF_IMG_EFF_MAT_1);
1019
+ CIF_IMG_EFF_MAT_1, id);
9981020 isp3_param_write(params_vdev, arg->eff_mat_2,
999
- CIF_IMG_EFF_MAT_2);
1021
+ CIF_IMG_EFF_MAT_2, id);
10001022 isp3_param_write(params_vdev, arg->eff_mat_3,
1001
- CIF_IMG_EFF_MAT_3);
1023
+ CIF_IMG_EFF_MAT_3, id);
10021024 break;
10031025 case V4L2_COLORFX_SKETCH:
10041026 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_SKETCH;
10051027 isp3_param_write(params_vdev, arg->eff_mat_3,
1006
- CIF_IMG_EFF_MAT_3);
1028
+ CIF_IMG_EFF_MAT_3, id);
10071029 isp3_param_write(params_vdev, arg->eff_mat_4,
1008
- CIF_IMG_EFF_MAT_4);
1030
+ CIF_IMG_EFF_MAT_4, id);
10091031 isp3_param_write(params_vdev, arg->eff_mat_5,
1010
- CIF_IMG_EFF_MAT_5);
1032
+ CIF_IMG_EFF_MAT_5, id);
10111033 break;
10121034 case V4L2_COLORFX_BW:
10131035 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_BLACKWHITE;
....@@ -1019,25 +1041,26 @@
10191041 break;
10201042 }
10211043
1022
- isp3_param_write(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL);
1044
+ isp3_param_write(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL, id);
10231045 }
10241046
10251047 static void
1026
-isp_ie_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1048
+isp_ie_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
10271049 {
10281050 if (en) {
10291051 isp3_param_set_bits(params_vdev, ISP3X_IMG_EFF_CTRL,
10301052 CIF_IMG_EFF_CTRL_CFG_UPD |
1031
- CIF_IMG_EFF_CTRL_ENABLE);
1053
+ CIF_IMG_EFF_CTRL_ENABLE, id);
10321054 } else {
10331055 isp3_param_clear_bits(params_vdev, ISP3X_IMG_EFF_CTRL,
1034
- CIF_IMG_EFF_CTRL_ENABLE);
1056
+ CIF_IMG_EFF_CTRL_ENABLE, id);
10351057 }
10361058 }
10371059
10381060 static void
10391061 isp_rawae_config_foraf(struct rkisp_isp_params_vdev *params_vdev,
1040
- const struct isp32_rawaf_meas_cfg *arg)
1062
+ const struct isp32_rawaf_meas_cfg *arg,
1063
+ struct isp2x_window *win, u32 id)
10411064 {
10421065 u32 block_hsize, block_vsize;
10431066 u32 addr, value;
....@@ -1052,33 +1075,40 @@
10521075 } else {
10531076 addr = ISP3X_RAWAE_BIG1_BASE;
10541077 }
1055
- value = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL);
1078
+ value = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id);
10561079 value &= ISP3X_RAWAE_BIG_EN;
10571080
10581081 value |= ISP3X_RAWAE_BIG_WND0_NUM(wnd_num_idx);
1059
- isp3_param_write(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL);
1082
+ isp3_param_write(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL, id);
10601083
10611084 isp3_param_write(params_vdev,
1062
- ISP_PACK_2SHORT(arg->win[0].h_offs, arg->win[0].v_offs),
1063
- addr + ISP3X_RAWAE_BIG_OFFSET);
1085
+ ISP_PACK_2SHORT(win->h_offs, win->v_offs),
1086
+ addr + ISP3X_RAWAE_BIG_OFFSET, id);
10641087
1065
- block_hsize = arg->win[0].h_size / ae_wnd_num[wnd_num_idx];
1066
- block_vsize = arg->win[0].v_size / ae_wnd_num[wnd_num_idx];
1088
+ block_hsize = win->h_size / ae_wnd_num[wnd_num_idx];
1089
+ block_vsize = win->v_size / ae_wnd_num[wnd_num_idx];
10671090 isp3_param_write(params_vdev,
10681091 ISP_PACK_2SHORT(block_hsize, block_vsize),
1069
- addr + ISP3X_RAWAE_BIG_BLK_SIZE);
1092
+ addr + ISP3X_RAWAE_BIG_BLK_SIZE, id);
10701093 }
10711094
10721095 static void
10731096 isp_rawaf_config(struct rkisp_isp_params_vdev *params_vdev,
1074
- const struct isp32_rawaf_meas_cfg *arg)
1097
+ const struct isp32_rawaf_meas_cfg *arg, u32 id)
10751098 {
1099
+ struct rkisp_device *dev = params_vdev->dev;
1100
+ struct v4l2_rect *out_crop = &dev->isp_sdev.out_crop;
1101
+ u32 width = out_crop->width, height = out_crop->height;
10761102 u32 i, var, ctrl;
10771103 u16 h_size, v_size;
10781104 u16 h_offs, v_offs;
10791105 u8 gaus_en, viir_en, v1_fir_sel;
10801106 size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->win),
10811107 arg->num_afm_win);
1108
+ struct isp2x_window win_ae;
1109
+
1110
+ if (dev->hw_dev->unite)
1111
+ width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
10821112
10831113 for (i = 0; i < num_of_win; i++) {
10841114 h_size = arg->win[i].h_size;
....@@ -1086,9 +1116,19 @@
10861116 h_offs = arg->win[i].h_offs < 2 ? 2 : arg->win[i].h_offs;
10871117 v_offs = arg->win[i].v_offs < 1 ? 1 : arg->win[i].v_offs;
10881118
1119
+ if (!v_size || v_size + v_offs - 2 > height)
1120
+ v_size = height - v_offs - 2;
1121
+ if (!h_size || h_size + h_offs - 2 > width)
1122
+ h_size = width - h_offs - 2;
1123
+
10891124 if (i == 0) {
10901125 h_size = h_size / 15 * 15;
10911126 v_size = v_size / 15 * 15;
1127
+
1128
+ win_ae.h_size = h_size;
1129
+ win_ae.v_size = v_size;
1130
+ win_ae.h_offs = h_offs;
1131
+ win_ae.v_offs = v_offs;
10921132 }
10931133
10941134 /*
....@@ -1097,7 +1137,7 @@
10971137 */
10981138 isp3_param_write(params_vdev,
10991139 ISP_PACK_2SHORT(v_offs, h_offs),
1100
- ISP3X_RAWAF_OFFSET_WINA + i * 8);
1140
+ ISP3X_RAWAF_OFFSET_WINA + i * 8, id);
11011141
11021142 /*
11031143 * value must be smaller than [width of picture -2]
....@@ -1105,7 +1145,7 @@
11051145 */
11061146 isp3_param_write(params_vdev,
11071147 ISP_PACK_2SHORT(v_size, h_size),
1108
- ISP3X_RAWAF_SIZE_WINA + i * 8);
1148
+ ISP3X_RAWAF_SIZE_WINA + i * 8, id);
11091149 }
11101150
11111151 var = 0;
....@@ -1114,60 +1154,60 @@
11141154 var |= ISP3X_RAWAF_INTLINE0_EN << i;
11151155 var |= ISP3X_RAWAF_INELINE0(arg->line_num[i]) << 4 * i;
11161156 }
1117
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_INT_LINE);
1157
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_INT_LINE, id);
11181158
11191159 if (params_vdev->dev->isp_ver == ISP_V32_L) {
11201160 var = (arg->hldg_dilate_num & 0x7) << 16 |
11211161 !!arg->bls_en << 12 | (arg->bls_offset & 0x1FF);
1122
- isp3_param_write(params_vdev, var, ISP32L_RAWAF_CTRL1);
1162
+ isp3_param_write(params_vdev, var, ISP32L_RAWAF_CTRL1, id);
11231163 }
11241164
1125
- var = isp3_param_read(params_vdev, ISP3X_RAWAF_THRES);
1165
+ var = isp3_param_read(params_vdev, ISP3X_RAWAF_THRES, id);
11261166 var &= ~0xFFFF;
11271167 var |= arg->afm_thres;
1128
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_THRES);
1168
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_THRES, id);
11291169
11301170 var = (arg->lum_var_shift[1] & 0x7) << 20 | (arg->lum_var_shift[0] & 0x7) << 16 |
11311171 (arg->afm_var_shift[1] & 0x7) << 4 | (arg->afm_var_shift[0] & 0x7);
11321172 if (params_vdev->dev->isp_ver == ISP_V32_L)
11331173 var |= (arg->tnrin_shift & 0xf) << 8;
1134
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_VAR_SHIFT);
1174
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_VAR_SHIFT, id);
11351175
11361176 for (i = 0; i < ISP32_RAWAF_GAMMA_NUM / 2; i++) {
11371177 var = ISP_PACK_2SHORT(arg->gamma_y[2 * i], arg->gamma_y[2 * i + 1]);
1138
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_GAMMA_Y0 + i * 4);
1178
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_GAMMA_Y0 + i * 4, id);
11391179 }
11401180 var = ISP_PACK_2SHORT(arg->gamma_y[16], 0);
1141
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_GAMMA_Y8);
1181
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_GAMMA_Y8, id);
11421182
11431183 var = (arg->v1iir_var_shift & 0x7) << 8 | (arg->h1iir_var_shift & 0x7);
11441184 if (params_vdev->dev->isp_ver == ISP_V32)
11451185 var |= (arg->v2iir_var_shift & 0x7) << 12 | (arg->h2iir_var_shift & 0x7) << 4;
1146
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_HVIIR_VAR_SHIFT);
1186
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_HVIIR_VAR_SHIFT, id);
11471187
11481188 var = ISP_PACK_2SHORT(arg->h_fv_thresh, arg->v_fv_thresh);
1149
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_HIIR_THRESH);
1189
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_HIIR_THRESH, id);
11501190
11511191 for (i = 0; i < ISP32_RAWAF_VFIR_COE_NUM; i++) {
11521192 var = ISP_PACK_2SHORT(arg->v1fir_coe[i], arg->v2fir_coe[i]);
1153
- isp3_param_write(params_vdev, var, ISP32_RAWAF_V_FIR_COE0 + i * 4);
1193
+ isp3_param_write(params_vdev, var, ISP32_RAWAF_V_FIR_COE0 + i * 4, id);
11541194 }
11551195
11561196 for (i = 0; i < ISP32_RAWAF_GAUS_COE_NUM / 4; i++) {
11571197 var = ISP_PACK_4BYTE(arg->gaus_coe[i * 4], arg->gaus_coe[i * 4 + 1],
11581198 arg->gaus_coe[i * 4 + 2], arg->gaus_coe[i * 4 + 3]);
1159
- isp3_param_write(params_vdev, var, ISP32_RAWAF_GAUS_COE03 + i * 4);
1199
+ isp3_param_write(params_vdev, var, ISP32_RAWAF_GAUS_COE03 + i * 4, id);
11601200 }
11611201 var = ISP_PACK_4BYTE(arg->gaus_coe[ISP32_RAWAF_GAUS_COE_NUM - 1], 0, 0, 0);
1162
- isp3_param_write(params_vdev, var, ISP32_RAWAF_GAUS_COE8);
1202
+ isp3_param_write(params_vdev, var, ISP32_RAWAF_GAUS_COE8, id);
11631203
1164
- isp3_param_write(params_vdev, arg->highlit_thresh, ISP3X_RAWAF_HIGHLIT_THRESH);
1204
+ isp3_param_write(params_vdev, arg->highlit_thresh, ISP3X_RAWAF_HIGHLIT_THRESH, id);
11651205
11661206 if (params_vdev->dev->isp_ver == ISP_V32_L) {
11671207 var = ISP_PACK_2SHORT(arg->h_fv_limit, arg->h_fv_slope);
1168
- isp3_param_write(params_vdev, var, ISP32L_RAWAF_CORING_H);
1208
+ isp3_param_write(params_vdev, var, ISP32L_RAWAF_CORING_H, id);
11691209 var = ISP_PACK_2SHORT(arg->v_fv_limit, arg->v_fv_slope);
1170
- isp3_param_write(params_vdev, var, ISP32L_RAWAF_CORING_V);
1210
+ isp3_param_write(params_vdev, var, ISP32L_RAWAF_CORING_V, id);
11711211 }
11721212
11731213 viir_en = arg->viir_en;
....@@ -1176,23 +1216,23 @@
11761216 if (viir_en == 0)
11771217 v1_fir_sel = 0;
11781218
1179
- ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL);
1219
+ ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL, id);
11801220 ctrl &= ISP3X_RAWAF_EN;
11811221 if (arg->hiir_en) {
11821222 ctrl |= ISP3X_RAWAF_HIIR_EN;
11831223 for (i = 0; i < ISP32_RAWAF_HIIR_COE_NUM / 2; i++) {
11841224 var = ISP_PACK_2SHORT(arg->h1iir1_coe[i * 2], arg->h1iir1_coe[i * 2 + 1]);
1185
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_H1_IIR1_COE01 + i * 4);
1225
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_H1_IIR1_COE01 + i * 4, id);
11861226 var = ISP_PACK_2SHORT(arg->h1iir2_coe[i * 2], arg->h1iir2_coe[i * 2 + 1]);
1187
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_H1_IIR2_COE01 + i * 4);
1227
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_H1_IIR2_COE01 + i * 4, id);
11881228
11891229 if (params_vdev->dev->isp_ver == ISP_V32_L)
11901230 continue;
11911231
11921232 var = ISP_PACK_2SHORT(arg->h2iir1_coe[i * 2], arg->h2iir1_coe[i * 2 + 1]);
1193
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_H2_IIR1_COE01 + i * 4);
1233
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_H2_IIR1_COE01 + i * 4, id);
11941234 var = ISP_PACK_2SHORT(arg->h2iir2_coe[i * 2], arg->h2iir2_coe[i * 2 + 1]);
1195
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_H2_IIR2_COE01 + i * 4);
1235
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_H2_IIR2_COE01 + i * 4, id);
11961236 }
11971237 }
11981238 if (viir_en) {
....@@ -1202,7 +1242,7 @@
12021242 var = ISP_PACK_2SHORT(arg->v1iir_coe[i], arg->v2iir_coe[i]);
12031243 else
12041244 var = ISP_PACK_2SHORT(arg->v1iir_coe[i], 0);
1205
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_V_IIR_COE0 + i * 4);
1245
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_V_IIR_COE0 + i * 4, id);
12061246 }
12071247 }
12081248 if (arg->ldg_en) {
....@@ -1212,12 +1252,12 @@
12121252 arg->curve_h[i].ldg_lumth |
12131253 arg->curve_h[i].ldg_gain << 8 |
12141254 arg->curve_h[i].ldg_gslp << 16,
1215
- ISP3X_RAWAF_H_CURVEL + i * 16);
1255
+ ISP3X_RAWAF_H_CURVEL + i * 16, id);
12161256 isp3_param_write(params_vdev,
12171257 arg->curve_v[i].ldg_lumth |
12181258 arg->curve_v[i].ldg_gain << 8 |
12191259 arg->curve_v[i].ldg_gslp << 16,
1220
- ISP3X_RAWAF_V_CURVEL + i * 16);
1260
+ ISP3X_RAWAF_V_CURVEL + i * 16, id);
12211261 }
12221262 }
12231263
....@@ -1239,9 +1279,9 @@
12391279 !!arg->v1_acc_mode << 26 |
12401280 !!arg->v2_acc_mode << 27 |
12411281 !!arg->ae_sel << 29;
1242
- isp3_param_write(params_vdev, ctrl, ISP3X_RAWAF_CTRL);
1282
+ isp3_param_write(params_vdev, ctrl, ISP3X_RAWAF_CTRL, id);
12431283
1244
- ctrl = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH);
1284
+ ctrl = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id);
12451285 if (((ctrl & ISP3X_RAWAF_SEL(3)) != ISP3X_RAWAF_SEL(arg->rawaf_sel)) ||
12461286 (((!!(ctrl & ISP32L_BNR2AF_SEL)) != arg->bnr2af_sel) &&
12471287 (params_vdev->dev->isp_ver == ISP_V32_L))) {
....@@ -1254,16 +1294,16 @@
12541294 else
12551295 ctrl &= ~ISP32L_BNR2AF_SEL;
12561296 }
1257
- isp3_param_write(params_vdev, ctrl, ISP3X_VI_ISP_PATH);
1297
+ isp3_param_write(params_vdev, ctrl, ISP3X_VI_ISP_PATH, id);
12581298 }
12591299
12601300 params_vdev->afaemode_en = arg->ae_mode;
12611301 if (params_vdev->afaemode_en)
1262
- isp_rawae_config_foraf(params_vdev, arg);
1302
+ isp_rawae_config_foraf(params_vdev, arg, &win_ae, id);
12631303 }
12641304
12651305 static void
1266
-isp_rawae_enable_foraf(struct rkisp_isp_params_vdev *params_vdev, bool en)
1306
+isp_rawae_enable_foraf(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
12671307 {
12681308 u32 exp_ctrl;
12691309 u32 addr = ISP3X_RAWAE_BIG1_BASE;
....@@ -1271,20 +1311,20 @@
12711311 if (params_vdev->dev->isp_ver == ISP_V32_L)
12721312 addr = ISP3X_RAWAE_LITE_BASE;
12731313
1274
- exp_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL);
1314
+ exp_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id);
12751315 exp_ctrl &= ~ISP32_REG_WR_MASK;
12761316 if (en)
12771317 exp_ctrl |= ISP32_MODULE_EN;
12781318 else
12791319 exp_ctrl &= ~ISP32_MODULE_EN;
12801320
1281
- isp3_param_write(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL);
1321
+ isp3_param_write(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL, id);
12821322 }
12831323
12841324 static void
1285
-isp_rawaf_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1325
+isp_rawaf_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
12861326 {
1287
- u32 afm_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL);
1327
+ u32 afm_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL, id);
12881328
12891329 afm_ctrl &= ~ISP32_REG_WR_MASK;
12901330 if (en)
....@@ -1292,9 +1332,9 @@
12921332 else
12931333 afm_ctrl &= ~ISP3X_RAWAF_EN;
12941334
1295
- isp3_param_write(params_vdev, afm_ctrl, ISP3X_RAWAF_CTRL);
1335
+ isp3_param_write(params_vdev, afm_ctrl, ISP3X_RAWAF_CTRL, id);
12961336 if (params_vdev->afaemode_en) {
1297
- isp_rawae_enable_foraf(params_vdev, en);
1337
+ isp_rawae_enable_foraf(params_vdev, en, id);
12981338 if (!en)
12991339 params_vdev->afaemode_en = false;
13001340 }
....@@ -1302,78 +1342,78 @@
13021342
13031343 static void
13041344 isp_rawaelite_config(struct rkisp_isp_params_vdev *params_vdev,
1305
- const struct isp2x_rawaelite_meas_cfg *arg)
1345
+ const struct isp2x_rawaelite_meas_cfg *arg, u32 id)
13061346 {
13071347 struct rkisp_device *ispdev = params_vdev->dev;
13081348 struct v4l2_rect *out_crop = &ispdev->isp_sdev.out_crop;
1309
- u32 width = out_crop->width;
1349
+ u32 width = out_crop->width, height = out_crop->height;
1350
+ u32 h_size, v_size, h_offs, v_offs;
13101351 u32 block_hsize, block_vsize, value;
13111352 u32 wnd_num_idx = 0;
13121353 const u32 ae_wnd_num[] = {1, 5};
13131354
1314
- value = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL);
1355
+ value = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL, id);
13151356 value &= ~(ISP3X_RAWAE_LITE_WNDNUM);
13161357 if (arg->wnd_num) {
13171358 value |= ISP3X_RAWAE_LITE_WNDNUM;
13181359 wnd_num_idx = 1;
13191360 }
13201361 value &= ~ISP32_REG_WR_MASK;
1321
- isp3_param_write(params_vdev, value, ISP3X_RAWAE_LITE_CTRL);
1362
+ isp3_param_write(params_vdev, value, ISP3X_RAWAE_LITE_CTRL, id);
13221363
1364
+ h_offs = arg->win.h_offs & ~0x1;
1365
+ v_offs = arg->win.v_offs & ~0x1;
13231366 isp3_param_write(params_vdev,
1324
- ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs),
1325
- ISP3X_RAWAE_LITE_OFFSET);
1367
+ ISP_PACK_2SHORT(h_offs, v_offs),
1368
+ ISP3X_RAWAE_LITE_OFFSET, id);
13261369
1327
- block_hsize = arg->win.h_size / ae_wnd_num[wnd_num_idx];
1328
- value = block_hsize * ae_wnd_num[wnd_num_idx] + arg->win.h_offs;
1329
- if (ispdev->hw_dev->is_unite)
1370
+ if (ispdev->hw_dev->unite)
13301371 width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
1331
- if (value + 1 > width)
1332
- block_hsize -= 1;
1333
- block_vsize = arg->win.v_size / ae_wnd_num[wnd_num_idx];
1334
- value = block_vsize * ae_wnd_num[wnd_num_idx] + arg->win.v_offs;
1335
- if (value + 2 > out_crop->height)
1336
- block_vsize -= 1;
1337
- if (block_vsize % 2)
1338
- block_vsize -= 1;
1372
+ h_size = arg->win.h_size;
1373
+ v_size = arg->win.v_size;
1374
+ if (!h_size || h_size + h_offs + 1 > width)
1375
+ h_size = width - h_offs - 1;
1376
+ if (!v_size || v_size + v_offs + 2 > height)
1377
+ v_size = height - v_offs - 2;
1378
+ block_hsize = (h_size / ae_wnd_num[wnd_num_idx]) & ~0x1;
1379
+ block_vsize = (v_size / ae_wnd_num[wnd_num_idx]) & ~0x1;
13391380 isp3_param_write(params_vdev,
13401381 ISP_PACK_2SHORT(block_hsize, block_vsize),
1341
- ISP3X_RAWAE_LITE_BLK_SIZ);
1382
+ ISP3X_RAWAE_LITE_BLK_SIZ, id);
13421383
1343
- value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH);
1384
+ value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id);
13441385 if ((value & ISP3X_RAWAE012_SEL(3)) != ISP3X_RAWAE012_SEL(arg->rawae_sel)) {
13451386 value &= ~(ISP3X_RAWAE012_SEL(3));
13461387 value |= ISP3X_RAWAE012_SEL(arg->rawae_sel);
1347
- isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH);
1388
+ isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id);
13481389 }
13491390 }
13501391
13511392 static void
1352
-isp_rawaelite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1393
+isp_rawaelite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
13531394 {
13541395 u32 exp_ctrl;
13551396
1356
- exp_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL);
1397
+ exp_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL, id);
13571398 exp_ctrl &= ~ISP32_REG_WR_MASK;
13581399 if (en)
13591400 exp_ctrl |= ISP3X_RAWAE_LITE_EN;
13601401 else
13611402 exp_ctrl &= ~ISP3X_RAWAE_LITE_EN;
13621403
1363
- isp3_param_write(params_vdev, exp_ctrl, ISP3X_RAWAE_LITE_CTRL);
1404
+ isp3_param_write(params_vdev, exp_ctrl, ISP3X_RAWAE_LITE_CTRL, id);
13641405 }
13651406
13661407 static void
13671408 isp_rawaebig_config(struct rkisp_isp_params_vdev *params_vdev,
13681409 const struct isp2x_rawaebig_meas_cfg *arg,
1369
- u32 blk_no)
1410
+ u32 blk_no, u32 id)
13701411 {
13711412 struct rkisp_device *ispdev = params_vdev->dev;
13721413 struct v4l2_rect *out_crop = &ispdev->isp_sdev.out_crop;
1373
- u32 width = out_crop->width;
1374
- u32 block_hsize, block_vsize;
1375
- u32 addr, i, value, h_size, v_size;
1376
- u32 wnd_num_idx = 0;
1414
+ u32 width = out_crop->width, height = out_crop->height;
1415
+ u32 addr, i, value, h_size, v_size, h_offs, v_offs;
1416
+ u32 block_hsize, block_vsize, wnd_num_idx = 0;
13771417 const u32 ae_wnd_num[] = {
13781418 1, 5, 15, 15
13791419 };
....@@ -1392,10 +1432,16 @@
13921432 }
13931433
13941434 /* avoid to override the old enable value */
1395
- value = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL);
1435
+ value = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id);
13961436 value &= ISP3X_RAWAE_BIG_EN;
13971437
13981438 wnd_num_idx = arg->wnd_num;
1439
+ if (wnd_num_idx >= ARRAY_SIZE(ae_wnd_num)) {
1440
+ wnd_num_idx = ARRAY_SIZE(ae_wnd_num) - 1;
1441
+ dev_err(params_vdev->dev->dev,
1442
+ "%s invalid wnd_num:%d, set to %d\n",
1443
+ __func__, arg->wnd_num, wnd_num_idx);
1444
+ }
13991445 value |= ISP3X_RAWAE_BIG_WND0_NUM(wnd_num_idx);
14001446
14011447 if (arg->subwin_en[0])
....@@ -1408,59 +1454,65 @@
14081454 if (arg->subwin_en[3])
14091455 value |= ISP3X_RAWAE_BIG_WND4_EN;
14101456 }
1411
- isp3_param_write(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL);
1457
+ isp3_param_write(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL, id);
14121458
1459
+ h_offs = arg->win.h_offs & ~0x1;
1460
+ v_offs = arg->win.v_offs & ~0x1;
14131461 isp3_param_write(params_vdev,
1414
- ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs),
1415
- addr + ISP3X_RAWAE_BIG_OFFSET);
1462
+ ISP_PACK_2SHORT(h_offs, v_offs),
1463
+ addr + ISP3X_RAWAE_BIG_OFFSET, id);
14161464
1417
- block_hsize = arg->win.h_size / ae_wnd_num[wnd_num_idx];
1418
- value = block_hsize * ae_wnd_num[wnd_num_idx] + arg->win.h_offs;
1419
- if (ispdev->hw_dev->is_unite)
1465
+ if (ispdev->hw_dev->unite)
14201466 width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
1421
- if (value + 1 > width)
1422
- block_hsize -= 1;
1423
- block_vsize = arg->win.v_size / ae_wnd_num[wnd_num_idx];
1424
- value = block_vsize * ae_wnd_num[wnd_num_idx] + arg->win.v_offs;
1425
- if (value + 2 > out_crop->height)
1426
- block_vsize -= 1;
1427
- if (block_vsize % 2)
1428
- block_vsize -= 1;
1467
+ h_size = arg->win.h_size;
1468
+ v_size = arg->win.v_size;
1469
+ if (!h_size || h_size + h_offs + 1 > width)
1470
+ h_size = width - h_offs - 1;
1471
+ if (!v_size || v_size + v_offs + 2 > height)
1472
+ v_size = height - v_offs - 2;
1473
+ block_hsize = (h_size / ae_wnd_num[wnd_num_idx]) & ~0x1;
1474
+ block_vsize = (v_size / ae_wnd_num[wnd_num_idx]) & ~0x1;
14291475 isp3_param_write(params_vdev,
14301476 ISP_PACK_2SHORT(block_hsize, block_vsize),
1431
- addr + ISP3X_RAWAE_BIG_BLK_SIZE);
1477
+ addr + ISP3X_RAWAE_BIG_BLK_SIZE, id);
14321478
14331479 for (i = 0; i < ISP32_RAWAEBIG_SUBWIN_NUM; i++) {
1434
- isp3_param_write(params_vdev,
1435
- ISP_PACK_2SHORT(arg->subwin[i].h_offs, arg->subwin[i].v_offs),
1436
- addr + ISP3X_RAWAE_BIG_WND1_OFFSET + 8 * i);
1480
+ h_offs = arg->subwin[i].h_offs & ~0x1;
1481
+ v_offs = arg->subwin[i].v_offs & ~0x1;
1482
+ isp3_param_write(params_vdev, ISP_PACK_2SHORT(h_offs, v_offs),
1483
+ addr + ISP3X_RAWAE_BIG_WND1_OFFSET + 8 * i, id);
14371484
1438
- v_size = arg->subwin[i].v_size + arg->subwin[i].v_offs;
1439
- h_size = arg->subwin[i].h_size + arg->subwin[i].h_offs;
1440
- isp3_param_write(params_vdev,
1441
- ISP_PACK_2SHORT(h_size, v_size),
1442
- addr + ISP3X_RAWAE_BIG_WND1_SIZE + 8 * i);
1485
+ v_size = arg->subwin[i].v_size;
1486
+ h_size = arg->subwin[i].h_size;
1487
+ if (!h_size || h_size + h_offs > width)
1488
+ h_size = width - h_offs;
1489
+ if (!v_size || v_size + v_offs > height)
1490
+ v_size = height - v_offs;
1491
+ h_size = (h_size + h_offs) & ~0x1;
1492
+ v_size = (v_size + v_offs) & ~0x1;
1493
+ isp3_param_write(params_vdev, ISP_PACK_2SHORT(h_size, v_size),
1494
+ addr + ISP3X_RAWAE_BIG_WND1_SIZE + 8 * i, id);
14431495 }
14441496
1445
- value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH);
1497
+ value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id);
14461498 if (blk_no == 0) {
14471499 if ((value & ISP3X_RAWAE3_SEL(3)) != ISP3X_RAWAE3_SEL(arg->rawae_sel)) {
14481500 value &= ~(ISP3X_RAWAE3_SEL(3));
14491501 value |= ISP3X_RAWAE3_SEL(arg->rawae_sel);
1450
- isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH);
1502
+ isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id);
14511503 }
14521504 } else {
14531505 if ((value & ISP3X_RAWAE012_SEL(3)) != ISP3X_RAWAE012_SEL(arg->rawae_sel)) {
14541506 value &= ~(ISP3X_RAWAE012_SEL(3));
14551507 value |= ISP3X_RAWAE012_SEL(arg->rawae_sel);
1456
- isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH);
1508
+ isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id);
14571509 }
14581510 }
14591511 }
14601512
14611513 static void
14621514 isp_rawaebig_enable(struct rkisp_isp_params_vdev *params_vdev,
1463
- bool en, u32 blk_no)
1515
+ bool en, u32 blk_no, u32 id)
14641516 {
14651517 u32 exp_ctrl;
14661518 u32 addr;
....@@ -1478,117 +1530,119 @@
14781530 break;
14791531 }
14801532
1481
- exp_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL);
1533
+ exp_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id);
14821534 exp_ctrl &= ~ISP32_REG_WR_MASK;
14831535 if (en)
14841536 exp_ctrl |= ISP32_MODULE_EN;
14851537 else
14861538 exp_ctrl &= ~ISP32_MODULE_EN;
14871539
1488
- isp3_param_write(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL);
1540
+ isp3_param_write(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL, id);
14891541 }
14901542
14911543 static void
14921544 isp_rawae1_config(struct rkisp_isp_params_vdev *params_vdev,
1493
- const struct isp2x_rawaebig_meas_cfg *arg)
1545
+ const struct isp2x_rawaebig_meas_cfg *arg, u32 id)
14941546 {
1495
- isp_rawaebig_config(params_vdev, arg, 1);
1547
+ isp_rawaebig_config(params_vdev, arg, 1, id);
14961548 }
14971549
14981550 static void
1499
-isp_rawae1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1551
+isp_rawae1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
15001552 {
1501
- isp_rawaebig_enable(params_vdev, en, 1);
1553
+ isp_rawaebig_enable(params_vdev, en, 1, id);
15021554 }
15031555
15041556 static void
15051557 isp_rawae2_config(struct rkisp_isp_params_vdev *params_vdev,
1506
- const struct isp2x_rawaebig_meas_cfg *arg)
1558
+ const struct isp2x_rawaebig_meas_cfg *arg, u32 id)
15071559 {
1508
- isp_rawaebig_config(params_vdev, arg, 2);
1560
+ isp_rawaebig_config(params_vdev, arg, 2, id);
15091561 }
15101562
15111563 static void
1512
-isp_rawae2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1564
+isp_rawae2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
15131565 {
1514
- isp_rawaebig_enable(params_vdev, en, 2);
1566
+ isp_rawaebig_enable(params_vdev, en, 2, id);
15151567 }
15161568
15171569 static void
15181570 isp_rawae3_config(struct rkisp_isp_params_vdev *params_vdev,
1519
- const struct isp2x_rawaebig_meas_cfg *arg)
1571
+ const struct isp2x_rawaebig_meas_cfg *arg, u32 id)
15201572 {
1521
- isp_rawaebig_config(params_vdev, arg, 0);
1573
+ isp_rawaebig_config(params_vdev, arg, 0, id);
15221574 }
15231575
15241576 static void
1525
-isp_rawae3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1577
+isp_rawae3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
15261578 {
1527
- isp_rawaebig_enable(params_vdev, en, 0);
1579
+ isp_rawaebig_enable(params_vdev, en, 0, id);
15281580 }
15291581
15301582 static void
15311583 isp_rawawb_cfg_sram(struct rkisp_isp_params_vdev *params_vdev,
1532
- const struct isp32_rawawb_meas_cfg *arg, bool is_check)
1584
+ const struct isp32_rawawb_meas_cfg *arg, bool is_check, u32 id)
15331585 {
1534
- u32 i, val = ISP32_MODULE_EN;
1586
+ u32 i, val = isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id);
15351587
1536
- if (params_vdev->dev->isp_ver == ISP_V32 && is_check &&
1537
- !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL) & val))
1588
+ if (params_vdev->dev->isp_ver != ISP_V32 ||
1589
+ (is_check && !(val & ISP32_MODULE_EN)))
15381590 return;
15391591
15401592 for (i = 0; i < ISP32_RAWAWB_WEIGHT_NUM / 5; i++) {
1541
- isp3_param_write(params_vdev,
1542
- (arg->wp_blk_wei_w[5 * i] & 0x3f) |
1543
- (arg->wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 |
1544
- (arg->wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 |
1545
- (arg->wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 |
1546
- (arg->wp_blk_wei_w[5 * i + 4] & 0x3f) << 24,
1547
- ISP3X_RAWAWB_WRAM_DATA_BASE);
1593
+ val = (arg->wp_blk_wei_w[5 * i] & 0x3f) |
1594
+ (arg->wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 |
1595
+ (arg->wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 |
1596
+ (arg->wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 |
1597
+ (arg->wp_blk_wei_w[5 * i + 4] & 0x3f) << 24;
1598
+ isp3_param_write_direct(params_vdev, val, ISP3X_RAWAWB_WRAM_DATA_BASE);
15481599 }
15491600 }
15501601
15511602 static void
15521603 isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev,
1553
- const struct isp32_rawawb_meas_cfg *arg)
1604
+ const struct isp32_rawawb_meas_cfg *arg, u32 id)
15541605 {
1555
- struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params;
1606
+ struct rkisp_device *dev = params_vdev->dev;
1607
+ struct v4l2_rect *out_crop = &dev->isp_sdev.out_crop;
1608
+ struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params + id;
15561609 struct isp32_rawawb_meas_cfg *arg_rec = &params_rec->meas.rawawb;
15571610 const struct isp2x_bls_fixed_val *pval = &arg->bls2_val;
1558
- u32 value, val, mask, i;
1611
+ u32 width = out_crop->width, height = out_crop->height;
1612
+ u32 value, val, mask, i, h_size, v_size, h_offs, v_offs;
15591613
1560
- value = isp3_param_read(params_vdev, ISP3X_BLS_CTRL);
1614
+ value = isp3_param_read(params_vdev, ISP3X_BLS_CTRL, id);
15611615 value &= ~ISP32_BLS_BLS2_EN;
15621616 if (arg->bls2_en) {
15631617 switch (params_vdev->raw_type) {
15641618 case RAW_BGGR:
1565
- isp3_param_write(params_vdev, pval->r, ISP32_BLS2_D_FIXED);
1566
- isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_C_FIXED);
1567
- isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_B_FIXED);
1568
- isp3_param_write(params_vdev, pval->b, ISP32_BLS2_A_FIXED);
1619
+ isp3_param_write(params_vdev, pval->r, ISP32_BLS2_D_FIXED, id);
1620
+ isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_C_FIXED, id);
1621
+ isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_B_FIXED, id);
1622
+ isp3_param_write(params_vdev, pval->b, ISP32_BLS2_A_FIXED, id);
15691623 break;
15701624 case RAW_GBRG:
1571
- isp3_param_write(params_vdev, pval->r, ISP32_BLS2_C_FIXED);
1572
- isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_D_FIXED);
1573
- isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_A_FIXED);
1574
- isp3_param_write(params_vdev, pval->b, ISP32_BLS2_B_FIXED);
1625
+ isp3_param_write(params_vdev, pval->r, ISP32_BLS2_C_FIXED, id);
1626
+ isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_D_FIXED, id);
1627
+ isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_A_FIXED, id);
1628
+ isp3_param_write(params_vdev, pval->b, ISP32_BLS2_B_FIXED, id);
15751629 break;
15761630 case RAW_GRBG:
1577
- isp3_param_write(params_vdev, pval->r, ISP32_BLS2_B_FIXED);
1578
- isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_A_FIXED);
1579
- isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_D_FIXED);
1580
- isp3_param_write(params_vdev, pval->b, ISP32_BLS2_C_FIXED);
1631
+ isp3_param_write(params_vdev, pval->r, ISP32_BLS2_B_FIXED, id);
1632
+ isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_A_FIXED, id);
1633
+ isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_D_FIXED, id);
1634
+ isp3_param_write(params_vdev, pval->b, ISP32_BLS2_C_FIXED, id);
15811635 break;
15821636 case RAW_RGGB:
15831637 default:
1584
- isp3_param_write(params_vdev, pval->r, ISP32_BLS2_A_FIXED);
1585
- isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_B_FIXED);
1586
- isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_C_FIXED);
1587
- isp3_param_write(params_vdev, pval->b, ISP32_BLS2_D_FIXED);
1638
+ isp3_param_write(params_vdev, pval->r, ISP32_BLS2_A_FIXED, id);
1639
+ isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_B_FIXED, id);
1640
+ isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_C_FIXED, id);
1641
+ isp3_param_write(params_vdev, pval->b, ISP32_BLS2_D_FIXED, id);
15881642 }
15891643 value |= ISP32_BLS_BLS2_EN;
15901644 }
1591
- isp3_param_write(params_vdev, value, ISP3X_BLS_CTRL);
1645
+ isp3_param_write(params_vdev, value, ISP3X_BLS_CTRL, id);
15921646
15931647 value = arg->in_overexposure_threshold << 16 |
15941648 !!arg->blk_with_luma_wei_en << 8 |
....@@ -1599,463 +1653,473 @@
15991653 !!arg->blk_measure_enable;
16001654 if (params_vdev->dev->isp_ver == ISP_V32_L)
16011655 value |= !!arg->ds16x8_mode_en << 7;
1602
- isp3_param_write(params_vdev, value, ISP3X_RAWAWB_BLK_CTRL);
1656
+ isp3_param_write(params_vdev, value, ISP3X_RAWAWB_BLK_CTRL, id);
16031657
1604
- isp3_param_write(params_vdev,
1605
- ISP_PACK_2SHORT(arg->h_offs, arg->v_offs),
1606
- ISP3X_RAWAWB_WIN_OFFS);
16071658
1659
+ h_offs = arg->h_offs & ~0x1;
1660
+ v_offs = arg->v_offs & ~0x1;
16081661 isp3_param_write(params_vdev,
1609
- ISP_PACK_2SHORT(arg->h_size, arg->v_size),
1610
- ISP3X_RAWAWB_WIN_SIZE);
1662
+ ISP_PACK_2SHORT(h_offs, v_offs),
1663
+ ISP3X_RAWAWB_WIN_OFFS, id);
1664
+
1665
+ if (dev->hw_dev->unite)
1666
+ width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
1667
+ h_size = arg->h_size;
1668
+ v_size = arg->v_size;
1669
+ if (!h_size || h_size + h_offs > width)
1670
+ h_size = width - h_offs;
1671
+ if (!v_size || v_size + v_offs > height)
1672
+ v_size = height - v_offs;
1673
+ isp3_param_write(params_vdev,
1674
+ ISP_PACK_2SHORT(h_size, v_size),
1675
+ ISP3X_RAWAWB_WIN_SIZE, id);
16111676
16121677 isp3_param_write(params_vdev,
16131678 ISP_PACK_2SHORT(arg->r_max, arg->g_max),
1614
- ISP3X_RAWAWB_LIMIT_RG_MAX);
1679
+ ISP3X_RAWAWB_LIMIT_RG_MAX, id);
16151680
16161681 isp3_param_write(params_vdev,
16171682 ISP_PACK_2SHORT(arg->b_max, arg->y_max),
1618
- ISP3X_RAWAWB_LIMIT_BY_MAX);
1683
+ ISP3X_RAWAWB_LIMIT_BY_MAX, id);
16191684
16201685 isp3_param_write(params_vdev,
16211686 ISP_PACK_2SHORT(arg->r_min, arg->g_min),
1622
- ISP3X_RAWAWB_LIMIT_RG_MIN);
1687
+ ISP3X_RAWAWB_LIMIT_RG_MIN, id);
16231688
16241689 isp3_param_write(params_vdev,
16251690 ISP_PACK_2SHORT(arg->b_min, arg->y_min),
1626
- ISP3X_RAWAWB_LIMIT_BY_MIN);
1691
+ ISP3X_RAWAWB_LIMIT_BY_MIN, id);
16271692
16281693 value = !!arg->wp_hist_xytype << 4 |
16291694 !!arg->wp_blk_wei_en1 << 3 |
16301695 !!arg->wp_blk_wei_en0 << 2 |
16311696 !!arg->wp_luma_wei_en1 << 1 |
16321697 !!arg->wp_luma_wei_en0;
1633
- isp3_param_write(params_vdev, value, ISP3X_RAWAWB_WEIGHT_CURVE_CTRL);
1698
+ isp3_param_write(params_vdev, value, ISP3X_RAWAWB_WEIGHT_CURVE_CTRL, id);
16341699
16351700 isp3_param_write(params_vdev,
16361701 ISP_PACK_4BYTE(arg->wp_luma_weicurve_y0,
16371702 arg->wp_luma_weicurve_y1,
16381703 arg->wp_luma_weicurve_y2,
16391704 arg->wp_luma_weicurve_y3),
1640
- ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR03);
1705
+ ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR03, id);
16411706
16421707 isp3_param_write(params_vdev,
16431708 ISP_PACK_4BYTE(arg->wp_luma_weicurve_y4,
16441709 arg->wp_luma_weicurve_y5,
16451710 arg->wp_luma_weicurve_y6,
16461711 arg->wp_luma_weicurve_y7),
1647
- ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR47);
1712
+ ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR47, id);
16481713
16491714 isp3_param_write(params_vdev,
16501715 arg->wp_luma_weicurve_y8,
1651
- ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR8);
1716
+ ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR8, id);
16521717
16531718 isp3_param_write(params_vdev,
16541719 ISP_PACK_4BYTE(arg->wp_luma_weicurve_w0,
16551720 arg->wp_luma_weicurve_w1,
16561721 arg->wp_luma_weicurve_w2,
16571722 arg->wp_luma_weicurve_w3),
1658
- ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR03);
1723
+ ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR03, id);
16591724
16601725 isp3_param_write(params_vdev,
16611726 ISP_PACK_4BYTE(arg->wp_luma_weicurve_w4,
16621727 arg->wp_luma_weicurve_w5,
16631728 arg->wp_luma_weicurve_w6,
16641729 arg->wp_luma_weicurve_w7),
1665
- ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR47);
1730
+ ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR47, id);
16661731
16671732 isp3_param_write(params_vdev,
16681733 ISP_PACK_2SHORT(arg->wp_luma_weicurve_w8,
16691734 arg->pre_wbgain_inv_r),
1670
- ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR8);
1735
+ ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR8, id);
16711736
16721737 isp3_param_write(params_vdev,
16731738 ISP_PACK_2SHORT(arg->pre_wbgain_inv_g,
16741739 arg->pre_wbgain_inv_b),
1675
- ISP3X_RAWAWB_PRE_WBGAIN_INV);
1740
+ ISP3X_RAWAWB_PRE_WBGAIN_INV, id);
16761741
16771742 isp3_param_write(params_vdev,
16781743 ISP_PACK_2SHORT(arg->vertex0_u_0, arg->vertex0_v_0),
1679
- ISP3X_RAWAWB_UV_DETC_VERTEX0_0);
1744
+ ISP3X_RAWAWB_UV_DETC_VERTEX0_0, id);
16801745
16811746 isp3_param_write(params_vdev,
16821747 ISP_PACK_2SHORT(arg->vertex1_u_0, arg->vertex1_v_0),
1683
- ISP3X_RAWAWB_UV_DETC_VERTEX1_0);
1748
+ ISP3X_RAWAWB_UV_DETC_VERTEX1_0, id);
16841749
16851750 isp3_param_write(params_vdev,
16861751 ISP_PACK_2SHORT(arg->vertex2_u_0, arg->vertex2_v_0),
1687
- ISP3X_RAWAWB_UV_DETC_VERTEX2_0);
1752
+ ISP3X_RAWAWB_UV_DETC_VERTEX2_0, id);
16881753
16891754 isp3_param_write(params_vdev,
16901755 ISP_PACK_2SHORT(arg->vertex3_u_0, arg->vertex3_v_0),
1691
- ISP3X_RAWAWB_UV_DETC_VERTEX3_0);
1756
+ ISP3X_RAWAWB_UV_DETC_VERTEX3_0, id);
16921757
16931758 isp3_param_write(params_vdev, arg->islope01_0,
1694
- ISP3X_RAWAWB_UV_DETC_ISLOPE01_0);
1759
+ ISP3X_RAWAWB_UV_DETC_ISLOPE01_0, id);
16951760
16961761 isp3_param_write(params_vdev, arg->islope12_0,
1697
- ISP3X_RAWAWB_UV_DETC_ISLOPE12_0);
1762
+ ISP3X_RAWAWB_UV_DETC_ISLOPE12_0, id);
16981763
16991764 isp3_param_write(params_vdev, arg->islope23_0,
1700
- ISP3X_RAWAWB_UV_DETC_ISLOPE23_0);
1765
+ ISP3X_RAWAWB_UV_DETC_ISLOPE23_0, id);
17011766
17021767 isp3_param_write(params_vdev, arg->islope30_0,
1703
- ISP3X_RAWAWB_UV_DETC_ISLOPE30_0);
1768
+ ISP3X_RAWAWB_UV_DETC_ISLOPE30_0, id);
17041769
17051770 isp3_param_write(params_vdev,
17061771 ISP_PACK_2SHORT(arg->vertex0_u_1,
17071772 arg->vertex0_v_1),
1708
- ISP3X_RAWAWB_UV_DETC_VERTEX0_1);
1773
+ ISP3X_RAWAWB_UV_DETC_VERTEX0_1, id);
17091774
17101775 isp3_param_write(params_vdev,
17111776 ISP_PACK_2SHORT(arg->vertex1_u_1,
17121777 arg->vertex1_v_1),
1713
- ISP3X_RAWAWB_UV_DETC_VERTEX1_1);
1778
+ ISP3X_RAWAWB_UV_DETC_VERTEX1_1, id);
17141779
17151780 isp3_param_write(params_vdev,
17161781 ISP_PACK_2SHORT(arg->vertex2_u_1,
17171782 arg->vertex2_v_1),
1718
- ISP3X_RAWAWB_UV_DETC_VERTEX2_1);
1783
+ ISP3X_RAWAWB_UV_DETC_VERTEX2_1, id);
17191784
17201785 isp3_param_write(params_vdev,
17211786 ISP_PACK_2SHORT(arg->vertex3_u_1,
17221787 arg->vertex3_v_1),
1723
- ISP3X_RAWAWB_UV_DETC_VERTEX3_1);
1788
+ ISP3X_RAWAWB_UV_DETC_VERTEX3_1, id);
17241789
17251790 isp3_param_write(params_vdev, arg->islope01_1,
1726
- ISP3X_RAWAWB_UV_DETC_ISLOPE01_1);
1791
+ ISP3X_RAWAWB_UV_DETC_ISLOPE01_1, id);
17271792
17281793 isp3_param_write(params_vdev, arg->islope12_1,
1729
- ISP3X_RAWAWB_UV_DETC_ISLOPE12_1);
1794
+ ISP3X_RAWAWB_UV_DETC_ISLOPE12_1, id);
17301795
17311796 isp3_param_write(params_vdev, arg->islope23_1,
1732
- ISP3X_RAWAWB_UV_DETC_ISLOPE23_1);
1797
+ ISP3X_RAWAWB_UV_DETC_ISLOPE23_1, id);
17331798
17341799 isp3_param_write(params_vdev, arg->islope30_1,
1735
- ISP3X_RAWAWB_UV_DETC_ISLOPE30_1);
1800
+ ISP3X_RAWAWB_UV_DETC_ISLOPE30_1, id);
17361801
17371802 isp3_param_write(params_vdev,
17381803 ISP_PACK_2SHORT(arg->vertex0_u_2,
17391804 arg->vertex0_v_2),
1740
- ISP3X_RAWAWB_UV_DETC_VERTEX0_2);
1805
+ ISP3X_RAWAWB_UV_DETC_VERTEX0_2, id);
17411806
17421807 isp3_param_write(params_vdev,
17431808 ISP_PACK_2SHORT(arg->vertex1_u_2,
17441809 arg->vertex1_v_2),
1745
- ISP3X_RAWAWB_UV_DETC_VERTEX1_2);
1810
+ ISP3X_RAWAWB_UV_DETC_VERTEX1_2, id);
17461811
17471812 isp3_param_write(params_vdev,
17481813 ISP_PACK_2SHORT(arg->vertex2_u_2,
17491814 arg->vertex2_v_2),
1750
- ISP3X_RAWAWB_UV_DETC_VERTEX2_2);
1815
+ ISP3X_RAWAWB_UV_DETC_VERTEX2_2, id);
17511816
17521817 isp3_param_write(params_vdev,
17531818 ISP_PACK_2SHORT(arg->vertex3_u_2,
17541819 arg->vertex3_v_2),
1755
- ISP3X_RAWAWB_UV_DETC_VERTEX3_2);
1820
+ ISP3X_RAWAWB_UV_DETC_VERTEX3_2, id);
17561821
17571822 isp3_param_write(params_vdev, arg->islope01_2,
1758
- ISP3X_RAWAWB_UV_DETC_ISLOPE01_2);
1823
+ ISP3X_RAWAWB_UV_DETC_ISLOPE01_2, id);
17591824
17601825 isp3_param_write(params_vdev, arg->islope12_2,
1761
- ISP3X_RAWAWB_UV_DETC_ISLOPE12_2);
1826
+ ISP3X_RAWAWB_UV_DETC_ISLOPE12_2, id);
17621827
17631828 isp3_param_write(params_vdev, arg->islope23_2,
1764
- ISP3X_RAWAWB_UV_DETC_ISLOPE23_2);
1829
+ ISP3X_RAWAWB_UV_DETC_ISLOPE23_2, id);
17651830
17661831 isp3_param_write(params_vdev, arg->islope30_2,
1767
- ISP3X_RAWAWB_UV_DETC_ISLOPE30_2);
1832
+ ISP3X_RAWAWB_UV_DETC_ISLOPE30_2, id);
17681833
17691834 isp3_param_write(params_vdev,
17701835 ISP_PACK_2SHORT(arg->vertex0_u_3,
17711836 arg->vertex0_v_3),
1772
- ISP3X_RAWAWB_UV_DETC_VERTEX0_3);
1837
+ ISP3X_RAWAWB_UV_DETC_VERTEX0_3, id);
17731838
17741839 isp3_param_write(params_vdev,
17751840 ISP_PACK_2SHORT(arg->vertex1_u_3,
17761841 arg->vertex1_v_3),
1777
- ISP3X_RAWAWB_UV_DETC_VERTEX1_3);
1842
+ ISP3X_RAWAWB_UV_DETC_VERTEX1_3, id);
17781843
17791844 isp3_param_write(params_vdev,
17801845 ISP_PACK_2SHORT(arg->vertex2_u_3,
17811846 arg->vertex2_v_3),
1782
- ISP3X_RAWAWB_UV_DETC_VERTEX2_3);
1847
+ ISP3X_RAWAWB_UV_DETC_VERTEX2_3, id);
17831848
17841849 isp3_param_write(params_vdev,
17851850 ISP_PACK_2SHORT(arg->vertex3_u_3,
17861851 arg->vertex3_v_3),
1787
- ISP3X_RAWAWB_UV_DETC_VERTEX3_3);
1852
+ ISP3X_RAWAWB_UV_DETC_VERTEX3_3, id);
17881853
17891854 isp3_param_write(params_vdev, arg->islope01_3,
1790
- ISP3X_RAWAWB_UV_DETC_ISLOPE01_3);
1855
+ ISP3X_RAWAWB_UV_DETC_ISLOPE01_3, id);
17911856
17921857 isp3_param_write(params_vdev, arg->islope12_3,
1793
- ISP3X_RAWAWB_UV_DETC_ISLOPE12_3);
1858
+ ISP3X_RAWAWB_UV_DETC_ISLOPE12_3, id);
17941859
17951860 isp3_param_write(params_vdev, arg->islope23_3,
1796
- ISP3X_RAWAWB_UV_DETC_ISLOPE23_3);
1861
+ ISP3X_RAWAWB_UV_DETC_ISLOPE23_3, id);
17971862
17981863 isp3_param_write(params_vdev, arg->islope30_3,
1799
- ISP3X_RAWAWB_UV_DETC_ISLOPE30_3);
1864
+ ISP3X_RAWAWB_UV_DETC_ISLOPE30_3, id);
18001865
18011866 isp3_param_write(params_vdev,
18021867 ISP_PACK_2SHORT(arg->rgb2ryuvmat0_y,
18031868 arg->rgb2ryuvmat1_y),
1804
- ISP3X_RAWAWB_YUV_RGB2ROTY_0);
1869
+ ISP3X_RAWAWB_YUV_RGB2ROTY_0, id);
18051870
18061871 isp3_param_write(params_vdev,
18071872 ISP_PACK_2SHORT(arg->rgb2ryuvmat2_y,
18081873 arg->rgb2ryuvofs_y),
1809
- ISP3X_RAWAWB_YUV_RGB2ROTY_1);
1874
+ ISP3X_RAWAWB_YUV_RGB2ROTY_1, id);
18101875
18111876 isp3_param_write(params_vdev,
18121877 ISP_PACK_2SHORT(arg->rgb2ryuvmat0_u,
18131878 arg->rgb2ryuvmat1_u),
1814
- ISP3X_RAWAWB_YUV_RGB2ROTU_0);
1879
+ ISP3X_RAWAWB_YUV_RGB2ROTU_0, id);
18151880
18161881
18171882 isp3_param_write(params_vdev,
18181883 ISP_PACK_2SHORT(arg->rgb2ryuvmat2_u,
18191884 arg->rgb2ryuvofs_u),
1820
- ISP3X_RAWAWB_YUV_RGB2ROTU_1);
1885
+ ISP3X_RAWAWB_YUV_RGB2ROTU_1, id);
18211886
18221887 isp3_param_write(params_vdev,
18231888 ISP_PACK_2SHORT(arg->rgb2ryuvmat0_v,
18241889 arg->rgb2ryuvmat1_v),
1825
- ISP3X_RAWAWB_YUV_RGB2ROTV_0);
1890
+ ISP3X_RAWAWB_YUV_RGB2ROTV_0, id);
18261891
18271892 isp3_param_write(params_vdev,
18281893 ISP_PACK_2SHORT(arg->rgb2ryuvmat2_v,
18291894 arg->rgb2ryuvofs_v),
1830
- ISP3X_RAWAWB_YUV_RGB2ROTV_1);
1895
+ ISP3X_RAWAWB_YUV_RGB2ROTV_1, id);
18311896
18321897 isp3_param_write(params_vdev,
18331898 ISP_PACK_2SHORT(arg->coor_x1_ls0_y,
18341899 arg->vec_x21_ls0_y),
1835
- ISP3X_RAWAWB_YUV_X_COOR_Y_0);
1900
+ ISP3X_RAWAWB_YUV_X_COOR_Y_0, id);
18361901
18371902 isp3_param_write(params_vdev,
18381903 ISP_PACK_2SHORT(arg->coor_x1_ls0_u,
18391904 arg->vec_x21_ls0_u),
1840
- ISP3X_RAWAWB_YUV_X_COOR_U_0);
1905
+ ISP3X_RAWAWB_YUV_X_COOR_U_0, id);
18411906
18421907 isp3_param_write(params_vdev,
18431908 ISP_PACK_2SHORT(arg->coor_x1_ls0_v,
18441909 arg->vec_x21_ls0_v),
1845
- ISP3X_RAWAWB_YUV_X_COOR_V_0);
1910
+ ISP3X_RAWAWB_YUV_X_COOR_V_0, id);
18461911
18471912 isp3_param_write(params_vdev,
18481913 ISP_PACK_4BYTE(arg->dis_x1x2_ls0, 0,
18491914 arg->rotu0_ls0, arg->rotu1_ls0),
1850
- ISP3X_RAWAWB_YUV_X1X2_DIS_0);
1915
+ ISP3X_RAWAWB_YUV_X1X2_DIS_0, id);
18511916
18521917 isp3_param_write(params_vdev,
18531918 ISP_PACK_4BYTE(arg->rotu2_ls0, arg->rotu3_ls0,
18541919 arg->rotu4_ls0, arg->rotu5_ls0),
1855
- ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_0);
1920
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_0, id);
18561921
18571922 isp3_param_write(params_vdev,
18581923 ISP_PACK_2SHORT(arg->th0_ls0, arg->th1_ls0),
1859
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_0);
1924
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_0, id);
18601925
18611926 isp3_param_write(params_vdev,
18621927 ISP_PACK_2SHORT(arg->th2_ls0, arg->th3_ls0),
1863
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_0);
1928
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_0, id);
18641929
18651930 isp3_param_write(params_vdev,
18661931 ISP_PACK_2SHORT(arg->th4_ls0, arg->th5_ls0),
1867
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_0);
1932
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_0, id);
18681933
18691934 isp3_param_write(params_vdev,
18701935 ISP_PACK_2SHORT(arg->coor_x1_ls1_y,
18711936 arg->vec_x21_ls1_y),
1872
- ISP3X_RAWAWB_YUV_X_COOR_Y_1);
1937
+ ISP3X_RAWAWB_YUV_X_COOR_Y_1, id);
18731938
18741939 isp3_param_write(params_vdev,
18751940 ISP_PACK_2SHORT(arg->coor_x1_ls1_u,
18761941 arg->vec_x21_ls1_u),
1877
- ISP3X_RAWAWB_YUV_X_COOR_U_1);
1942
+ ISP3X_RAWAWB_YUV_X_COOR_U_1, id);
18781943
18791944 isp3_param_write(params_vdev,
18801945 ISP_PACK_2SHORT(arg->coor_x1_ls1_v,
18811946 arg->vec_x21_ls1_v),
1882
- ISP3X_RAWAWB_YUV_X_COOR_V_1);
1947
+ ISP3X_RAWAWB_YUV_X_COOR_V_1, id);
18831948
18841949 isp3_param_write(params_vdev,
18851950 ISP_PACK_4BYTE(arg->dis_x1x2_ls1, 0,
18861951 arg->rotu0_ls1, arg->rotu1_ls1),
1887
- ISP3X_RAWAWB_YUV_X1X2_DIS_1);
1952
+ ISP3X_RAWAWB_YUV_X1X2_DIS_1, id);
18881953
18891954 isp3_param_write(params_vdev,
18901955 ISP_PACK_4BYTE(arg->rotu2_ls1, arg->rotu3_ls1,
18911956 arg->rotu4_ls1, arg->rotu5_ls1),
1892
- ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_1);
1957
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_1, id);
18931958
18941959 isp3_param_write(params_vdev,
18951960 ISP_PACK_2SHORT(arg->th0_ls1, arg->th1_ls1),
1896
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_1);
1961
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_1, id);
18971962
18981963 isp3_param_write(params_vdev,
18991964 ISP_PACK_2SHORT(arg->th2_ls1, arg->th3_ls1),
1900
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_1);
1965
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_1, id);
19011966
19021967 isp3_param_write(params_vdev,
19031968 ISP_PACK_2SHORT(arg->th4_ls1, arg->th5_ls1),
1904
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_1);
1969
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_1, id);
19051970
19061971 isp3_param_write(params_vdev,
19071972 ISP_PACK_2SHORT(arg->coor_x1_ls2_y, arg->vec_x21_ls2_y),
1908
- ISP3X_RAWAWB_YUV_X_COOR_Y_2);
1973
+ ISP3X_RAWAWB_YUV_X_COOR_Y_2, id);
19091974
19101975 isp3_param_write(params_vdev,
19111976 ISP_PACK_2SHORT(arg->coor_x1_ls2_u, arg->vec_x21_ls2_u),
1912
- ISP3X_RAWAWB_YUV_X_COOR_U_2);
1977
+ ISP3X_RAWAWB_YUV_X_COOR_U_2, id);
19131978
19141979 isp3_param_write(params_vdev,
19151980 ISP_PACK_2SHORT(arg->coor_x1_ls2_v, arg->vec_x21_ls2_v),
1916
- ISP3X_RAWAWB_YUV_X_COOR_V_2);
1981
+ ISP3X_RAWAWB_YUV_X_COOR_V_2, id);
19171982
19181983 isp3_param_write(params_vdev,
19191984 ISP_PACK_4BYTE(arg->dis_x1x2_ls2, 0,
19201985 arg->rotu0_ls2, arg->rotu1_ls2),
1921
- ISP3X_RAWAWB_YUV_X1X2_DIS_2);
1986
+ ISP3X_RAWAWB_YUV_X1X2_DIS_2, id);
19221987
19231988 isp3_param_write(params_vdev,
19241989 ISP_PACK_4BYTE(arg->rotu2_ls2, arg->rotu3_ls2,
19251990 arg->rotu4_ls2, arg->rotu5_ls2),
1926
- ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_2);
1991
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_2, id);
19271992
19281993 isp3_param_write(params_vdev,
19291994 ISP_PACK_2SHORT(arg->th0_ls2, arg->th1_ls2),
1930
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_2);
1995
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_2, id);
19311996
19321997 isp3_param_write(params_vdev,
19331998 ISP_PACK_2SHORT(arg->th2_ls2, arg->th3_ls2),
1934
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_2);
1999
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_2, id);
19352000
19362001 isp3_param_write(params_vdev,
19372002 ISP_PACK_2SHORT(arg->th4_ls2, arg->th5_ls2),
1938
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_2);
2003
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_2, id);
19392004
19402005 isp3_param_write(params_vdev,
19412006 ISP_PACK_2SHORT(arg->coor_x1_ls3_y,
19422007 arg->vec_x21_ls3_y),
1943
- ISP3X_RAWAWB_YUV_X_COOR_Y_3);
2008
+ ISP3X_RAWAWB_YUV_X_COOR_Y_3, id);
19442009
19452010 isp3_param_write(params_vdev,
19462011 ISP_PACK_2SHORT(arg->coor_x1_ls3_u,
19472012 arg->vec_x21_ls3_u),
1948
- ISP3X_RAWAWB_YUV_X_COOR_U_3);
2013
+ ISP3X_RAWAWB_YUV_X_COOR_U_3, id);
19492014
19502015 isp3_param_write(params_vdev,
19512016 ISP_PACK_2SHORT(arg->coor_x1_ls3_v,
19522017 arg->vec_x21_ls3_v),
1953
- ISP3X_RAWAWB_YUV_X_COOR_V_3);
2018
+ ISP3X_RAWAWB_YUV_X_COOR_V_3, id);
19542019
19552020 isp3_param_write(params_vdev,
19562021 ISP_PACK_4BYTE(arg->dis_x1x2_ls3, 0,
19572022 arg->rotu0_ls3, arg->rotu1_ls3),
1958
- ISP3X_RAWAWB_YUV_X1X2_DIS_3);
2023
+ ISP3X_RAWAWB_YUV_X1X2_DIS_3, id);
19592024
19602025 isp3_param_write(params_vdev,
19612026 ISP_PACK_4BYTE(arg->rotu2_ls3, arg->rotu3_ls3,
19622027 arg->rotu4_ls3, arg->rotu5_ls3),
1963
- ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_3);
2028
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_3, id);
19642029
19652030 isp3_param_write(params_vdev,
19662031 ISP_PACK_2SHORT(arg->th0_ls3, arg->th1_ls3),
1967
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_3);
2032
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_3, id);
19682033
19692034 isp3_param_write(params_vdev,
19702035 ISP_PACK_2SHORT(arg->th2_ls3, arg->th3_ls3),
1971
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_3);
2036
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_3, id);
19722037
19732038 isp3_param_write(params_vdev,
19742039 ISP_PACK_2SHORT(arg->th4_ls3, arg->th5_ls3),
1975
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_3);
2040
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_3, id);
19762041
19772042 isp3_param_write(params_vdev,
19782043 ISP_PACK_2SHORT(arg->wt0, arg->wt1),
1979
- ISP3X_RAWAWB_RGB2XY_WT01);
2044
+ ISP3X_RAWAWB_RGB2XY_WT01, id);
19802045
1981
- isp3_param_write(params_vdev, arg->wt2,
1982
- ISP3X_RAWAWB_RGB2XY_WT2);
2046
+ isp3_param_write(params_vdev, arg->wt2, ISP3X_RAWAWB_RGB2XY_WT2, id);
19832047
19842048 isp3_param_write(params_vdev,
19852049 ISP_PACK_2SHORT(arg->mat0_x, arg->mat0_y),
1986
- ISP3X_RAWAWB_RGB2XY_MAT0_XY);
2050
+ ISP3X_RAWAWB_RGB2XY_MAT0_XY, id);
19872051
19882052 isp3_param_write(params_vdev,
19892053 ISP_PACK_2SHORT(arg->mat1_x, arg->mat1_y),
1990
- ISP3X_RAWAWB_RGB2XY_MAT1_XY);
2054
+ ISP3X_RAWAWB_RGB2XY_MAT1_XY, id);
19912055
19922056 isp3_param_write(params_vdev,
19932057 ISP_PACK_2SHORT(arg->mat2_x, arg->mat2_y),
1994
- ISP3X_RAWAWB_RGB2XY_MAT2_XY);
2058
+ ISP3X_RAWAWB_RGB2XY_MAT2_XY, id);
19952059
19962060 isp3_param_write(params_vdev,
19972061 ISP_PACK_2SHORT(arg->nor_x0_0, arg->nor_x1_0),
1998
- ISP3X_RAWAWB_XY_DETC_NOR_X_0);
2062
+ ISP3X_RAWAWB_XY_DETC_NOR_X_0, id);
19992063
20002064 isp3_param_write(params_vdev,
20012065 ISP_PACK_2SHORT(arg->nor_y0_0, arg->nor_y1_0),
2002
- ISP3X_RAWAWB_XY_DETC_NOR_Y_0);
2066
+ ISP3X_RAWAWB_XY_DETC_NOR_Y_0, id);
20032067
20042068 isp3_param_write(params_vdev,
20052069 ISP_PACK_2SHORT(arg->big_x0_0, arg->big_x1_0),
2006
- ISP3X_RAWAWB_XY_DETC_BIG_X_0);
2070
+ ISP3X_RAWAWB_XY_DETC_BIG_X_0, id);
20072071
20082072 isp3_param_write(params_vdev,
20092073 ISP_PACK_2SHORT(arg->big_y0_0, arg->big_y1_0),
2010
- ISP3X_RAWAWB_XY_DETC_BIG_Y_0);
2074
+ ISP3X_RAWAWB_XY_DETC_BIG_Y_0, id);
20112075
20122076 isp3_param_write(params_vdev,
20132077 ISP_PACK_2SHORT(arg->nor_x0_1, arg->nor_x1_1),
2014
- ISP3X_RAWAWB_XY_DETC_NOR_X_1);
2078
+ ISP3X_RAWAWB_XY_DETC_NOR_X_1, id);
20152079
20162080 isp3_param_write(params_vdev,
20172081 ISP_PACK_2SHORT(arg->nor_y0_1, arg->nor_y1_1),
2018
- ISP3X_RAWAWB_XY_DETC_NOR_Y_1);
2082
+ ISP3X_RAWAWB_XY_DETC_NOR_Y_1, id);
20192083
20202084 isp3_param_write(params_vdev,
20212085 ISP_PACK_2SHORT(arg->big_x0_1, arg->big_x1_1),
2022
- ISP3X_RAWAWB_XY_DETC_BIG_X_1);
2086
+ ISP3X_RAWAWB_XY_DETC_BIG_X_1, id);
20232087
20242088 isp3_param_write(params_vdev,
20252089 ISP_PACK_2SHORT(arg->big_y0_1, arg->big_y1_1),
2026
- ISP3X_RAWAWB_XY_DETC_BIG_Y_1);
2090
+ ISP3X_RAWAWB_XY_DETC_BIG_Y_1, id);
20272091
20282092 isp3_param_write(params_vdev,
20292093 ISP_PACK_2SHORT(arg->nor_x0_2, arg->nor_x1_2),
2030
- ISP3X_RAWAWB_XY_DETC_NOR_X_2);
2094
+ ISP3X_RAWAWB_XY_DETC_NOR_X_2, id);
20312095
20322096 isp3_param_write(params_vdev,
20332097 ISP_PACK_2SHORT(arg->nor_y0_2, arg->nor_y1_2),
2034
- ISP3X_RAWAWB_XY_DETC_NOR_Y_2);
2098
+ ISP3X_RAWAWB_XY_DETC_NOR_Y_2, id);
20352099
20362100 isp3_param_write(params_vdev,
20372101 ISP_PACK_2SHORT(arg->big_x0_2, arg->big_x1_2),
2038
- ISP3X_RAWAWB_XY_DETC_BIG_X_2);
2102
+ ISP3X_RAWAWB_XY_DETC_BIG_X_2, id);
20392103
20402104 isp3_param_write(params_vdev,
20412105 ISP_PACK_2SHORT(arg->big_y0_2, arg->big_y1_2),
2042
- ISP3X_RAWAWB_XY_DETC_BIG_Y_2);
2106
+ ISP3X_RAWAWB_XY_DETC_BIG_Y_2, id);
20432107
20442108 isp3_param_write(params_vdev,
20452109 ISP_PACK_2SHORT(arg->nor_x0_3, arg->nor_x1_3),
2046
- ISP3X_RAWAWB_XY_DETC_NOR_X_3);
2110
+ ISP3X_RAWAWB_XY_DETC_NOR_X_3, id);
20472111
20482112 isp3_param_write(params_vdev,
20492113 ISP_PACK_2SHORT(arg->nor_y0_3, arg->nor_y1_3),
2050
- ISP3X_RAWAWB_XY_DETC_NOR_Y_3);
2114
+ ISP3X_RAWAWB_XY_DETC_NOR_Y_3, id);
20512115
20522116 isp3_param_write(params_vdev,
20532117 ISP_PACK_2SHORT(arg->big_x0_3, arg->big_x1_3),
2054
- ISP3X_RAWAWB_XY_DETC_BIG_X_3);
2118
+ ISP3X_RAWAWB_XY_DETC_BIG_X_3, id);
20552119
20562120 isp3_param_write(params_vdev,
20572121 ISP_PACK_2SHORT(arg->big_y0_3, arg->big_y1_3),
2058
- ISP3X_RAWAWB_XY_DETC_BIG_Y_3);
2122
+ ISP3X_RAWAWB_XY_DETC_BIG_Y_3, id);
20592123
20602124 value = (arg->exc_wp_region0_excen & 0x3) |
20612125 !!arg->exc_wp_region0_measen << 2 |
....@@ -2076,138 +2140,136 @@
20762140 (arg->exc_wp_region6_excen & 0x3) << 24 |
20772141 !!arg->exc_wp_region6_domain << 27 |
20782142 !!arg->multiwindow_en << 31;
2079
- isp3_param_write(params_vdev, value, ISP3X_RAWAWB_MULTIWINDOW_EXC_CTRL);
2143
+ isp3_param_write(params_vdev, value, ISP3X_RAWAWB_MULTIWINDOW_EXC_CTRL, id);
20802144
20812145 isp3_param_write(params_vdev,
20822146 ISP_PACK_2SHORT(arg->multiwindow0_h_offs,
20832147 arg->multiwindow0_v_offs),
2084
- ISP3X_RAWAWB_MULTIWINDOW0_OFFS);
2148
+ ISP3X_RAWAWB_MULTIWINDOW0_OFFS, id);
20852149 isp3_param_write(params_vdev,
20862150 ISP_PACK_2SHORT(arg->multiwindow0_h_size,
20872151 arg->multiwindow0_v_size),
2088
- ISP3X_RAWAWB_MULTIWINDOW0_SIZE);
2152
+ ISP3X_RAWAWB_MULTIWINDOW0_SIZE, id);
20892153 isp3_param_write(params_vdev,
20902154 ISP_PACK_2SHORT(arg->multiwindow1_h_offs,
20912155 arg->multiwindow1_v_offs),
2092
- ISP3X_RAWAWB_MULTIWINDOW1_OFFS);
2156
+ ISP3X_RAWAWB_MULTIWINDOW1_OFFS, id);
20932157 isp3_param_write(params_vdev,
20942158 ISP_PACK_2SHORT(arg->multiwindow1_h_size,
20952159 arg->multiwindow1_v_size),
2096
- ISP3X_RAWAWB_MULTIWINDOW1_SIZE);
2160
+ ISP3X_RAWAWB_MULTIWINDOW1_SIZE, id);
20972161 isp3_param_write(params_vdev,
20982162 ISP_PACK_2SHORT(arg->multiwindow2_h_offs,
20992163 arg->multiwindow2_v_offs),
2100
- ISP3X_RAWAWB_MULTIWINDOW2_OFFS);
2164
+ ISP3X_RAWAWB_MULTIWINDOW2_OFFS, id);
21012165 isp3_param_write(params_vdev,
21022166 ISP_PACK_2SHORT(arg->multiwindow2_h_size,
21032167 arg->multiwindow2_v_size),
2104
- ISP3X_RAWAWB_MULTIWINDOW2_SIZE);
2168
+ ISP3X_RAWAWB_MULTIWINDOW2_SIZE, id);
21052169 isp3_param_write(params_vdev,
21062170 ISP_PACK_2SHORT(arg->multiwindow3_h_offs,
21072171 arg->multiwindow3_v_offs),
2108
- ISP3X_RAWAWB_MULTIWINDOW3_OFFS);
2172
+ ISP3X_RAWAWB_MULTIWINDOW3_OFFS, id);
21092173 isp3_param_write(params_vdev,
21102174 ISP_PACK_2SHORT(arg->multiwindow3_h_size,
21112175 arg->multiwindow3_v_size),
2112
- ISP3X_RAWAWB_MULTIWINDOW3_SIZE);
2176
+ ISP3X_RAWAWB_MULTIWINDOW3_SIZE, id);
21132177
21142178 isp3_param_write(params_vdev,
21152179 ISP_PACK_2SHORT(arg->exc_wp_region0_xu0,
21162180 arg->exc_wp_region0_xu1),
2117
- ISP3X_RAWAWB_EXC_WP_REGION0_XU);
2181
+ ISP3X_RAWAWB_EXC_WP_REGION0_XU, id);
21182182
21192183 isp3_param_write(params_vdev,
21202184 ISP_PACK_2SHORT(arg->exc_wp_region0_yv0,
21212185 arg->exc_wp_region0_yv1),
2122
- ISP3X_RAWAWB_EXC_WP_REGION0_YV);
2186
+ ISP3X_RAWAWB_EXC_WP_REGION0_YV, id);
21232187
21242188 isp3_param_write(params_vdev,
21252189 ISP_PACK_2SHORT(arg->exc_wp_region1_xu0,
21262190 arg->exc_wp_region1_xu1),
2127
- ISP3X_RAWAWB_EXC_WP_REGION1_XU);
2191
+ ISP3X_RAWAWB_EXC_WP_REGION1_XU, id);
21282192
21292193 isp3_param_write(params_vdev,
21302194 ISP_PACK_2SHORT(arg->exc_wp_region1_yv0,
21312195 arg->exc_wp_region1_yv1),
2132
- ISP3X_RAWAWB_EXC_WP_REGION1_YV);
2196
+ ISP3X_RAWAWB_EXC_WP_REGION1_YV, id);
21332197
21342198 isp3_param_write(params_vdev,
21352199 ISP_PACK_2SHORT(arg->exc_wp_region2_xu0,
21362200 arg->exc_wp_region2_xu1),
2137
- ISP3X_RAWAWB_EXC_WP_REGION2_XU);
2201
+ ISP3X_RAWAWB_EXC_WP_REGION2_XU, id);
21382202
21392203 isp3_param_write(params_vdev,
21402204 ISP_PACK_2SHORT(arg->exc_wp_region2_yv0,
21412205 arg->exc_wp_region2_yv1),
2142
- ISP3X_RAWAWB_EXC_WP_REGION2_YV);
2206
+ ISP3X_RAWAWB_EXC_WP_REGION2_YV, id);
21432207
21442208 isp3_param_write(params_vdev,
21452209 ISP_PACK_2SHORT(arg->exc_wp_region3_xu0,
21462210 arg->exc_wp_region3_xu1),
2147
- ISP3X_RAWAWB_EXC_WP_REGION3_XU);
2211
+ ISP3X_RAWAWB_EXC_WP_REGION3_XU, id);
21482212
21492213 isp3_param_write(params_vdev,
21502214 ISP_PACK_2SHORT(arg->exc_wp_region3_yv0,
21512215 arg->exc_wp_region3_yv1),
2152
- ISP3X_RAWAWB_EXC_WP_REGION3_YV);
2216
+ ISP3X_RAWAWB_EXC_WP_REGION3_YV, id);
21532217
21542218 isp3_param_write(params_vdev,
21552219 ISP_PACK_2SHORT(arg->exc_wp_region4_xu0,
21562220 arg->exc_wp_region4_xu1),
2157
- ISP3X_RAWAWB_EXC_WP_REGION4_XU);
2221
+ ISP3X_RAWAWB_EXC_WP_REGION4_XU, id);
21582222
21592223 isp3_param_write(params_vdev,
21602224 ISP_PACK_2SHORT(arg->exc_wp_region4_yv0,
21612225 arg->exc_wp_region4_yv1),
2162
- ISP3X_RAWAWB_EXC_WP_REGION4_YV);
2226
+ ISP3X_RAWAWB_EXC_WP_REGION4_YV, id);
21632227
21642228 isp3_param_write(params_vdev,
21652229 ISP_PACK_2SHORT(arg->exc_wp_region5_xu0,
21662230 arg->exc_wp_region5_xu1),
2167
- ISP3X_RAWAWB_EXC_WP_REGION5_XU);
2231
+ ISP3X_RAWAWB_EXC_WP_REGION5_XU, id);
21682232
21692233 isp3_param_write(params_vdev,
21702234 ISP_PACK_2SHORT(arg->exc_wp_region5_yv0,
21712235 arg->exc_wp_region5_yv1),
2172
- ISP3X_RAWAWB_EXC_WP_REGION5_YV);
2236
+ ISP3X_RAWAWB_EXC_WP_REGION5_YV, id);
21732237
21742238 isp3_param_write(params_vdev,
21752239 ISP_PACK_2SHORT(arg->exc_wp_region6_xu0,
21762240 arg->exc_wp_region6_xu1),
2177
- ISP3X_RAWAWB_EXC_WP_REGION6_XU);
2241
+ ISP3X_RAWAWB_EXC_WP_REGION6_XU, id);
21782242
21792243 isp3_param_write(params_vdev,
21802244 ISP_PACK_2SHORT(arg->exc_wp_region6_yv0,
21812245 arg->exc_wp_region6_yv1),
2182
- ISP3X_RAWAWB_EXC_WP_REGION6_YV);
2246
+ ISP3X_RAWAWB_EXC_WP_REGION6_YV, id);
21832247
21842248 isp3_param_write(params_vdev,
21852249 ISP_PACK_4BYTE(arg->exc_wp_region0_weight,
21862250 arg->exc_wp_region1_weight,
21872251 arg->exc_wp_region2_weight,
21882252 arg->exc_wp_region3_weight),
2189
- ISP32_RAWAWB_EXC_WP_WEIGHT0_3);
2253
+ ISP32_RAWAWB_EXC_WP_WEIGHT0_3, id);
21902254
21912255 isp3_param_write(params_vdev,
21922256 ISP_PACK_4BYTE(arg->exc_wp_region4_weight,
21932257 arg->exc_wp_region5_weight,
21942258 arg->exc_wp_region6_weight, 0),
2195
- ISP32_RAWAWB_EXC_WP_WEIGHT4_6);
2259
+ ISP32_RAWAWB_EXC_WP_WEIGHT4_6, id);
21962260
21972261 if (params_vdev->dev->isp_ver == ISP_V32) {
21982262 if (params_vdev->dev->hw_dev->is_single)
2199
- isp_rawawb_cfg_sram(params_vdev, arg, false);
2200
- else
2201
- memcpy(arg_rec->wp_blk_wei_w, arg->wp_blk_wei_w,
2202
- ISP32_RAWAWB_WEIGHT_NUM);
2263
+ isp_rawawb_cfg_sram(params_vdev, arg, false, id);
2264
+ memcpy(arg_rec->wp_blk_wei_w, arg->wp_blk_wei_w, ISP32_RAWAWB_WEIGHT_NUM);
22032265 } else {
22042266 for (i = 0; i < ISP32L_RAWAWB_WEIGHT_NUM; i++)
22052267 isp3_param_write(params_vdev, arg->win_weight[i],
2206
- ISP32L_RAWAWB_WIN_WEIGHT_0 + i * 4);
2268
+ ISP32L_RAWAWB_WIN_WEIGHT_0 + i * 4, id);
22072269 }
22082270
22092271 /* avoid to override the old enable value */
2210
- value = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL);
2272
+ value = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL, id);
22112273 value &= (ISP32_MODULE_EN |
22122274 ISP32_RAWAWB_2DDR_PATH_EN |
22132275 ISP32_RAWAWB_2DDR_PATH_DS);
....@@ -2227,45 +2289,46 @@
22272289 !!arg->yuv3d_en0 << 3 |
22282290 !!arg->xy_en0 << 2 |
22292291 !!arg->uv_en0 << 1;
2230
- isp3_param_write(params_vdev, value, ISP3X_RAWAWB_CTRL);
2292
+ isp3_param_write(params_vdev, value, ISP3X_RAWAWB_CTRL, id);
22312293
22322294 mask = ISP32_DRC2AWB_SEL | ISP32_BNR2AWB_SEL | ISP3X_RAWAWB_SEL(3);
22332295 val = ISP3X_RAWAWB_SEL(arg->rawawb_sel) |
22342296 (arg->bnr2awb_sel & 0x1) << 26 | (arg->drc2awb_sel & 0x1) << 27;
2235
- value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH);
2297
+ value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id);
22362298 if ((value & mask) != val) {
22372299 value &= ~mask;
22382300 value |= val;
2239
- isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH);
2301
+ isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id);
22402302 }
22412303 }
22422304
22432305 static void
2244
-isp_rawawb_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2306
+isp_rawawb_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
22452307 {
22462308 u32 awb_ctrl;
22472309
2248
- awb_ctrl = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL);
2310
+ awb_ctrl = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL, id);
22492311 awb_ctrl &= ~ISP32_REG_WR_MASK;
22502312 if (en)
22512313 awb_ctrl |= ISP32_MODULE_EN;
22522314 else
22532315 awb_ctrl &= ~ISP32_MODULE_EN;
22542316
2255
- isp3_param_write(params_vdev, awb_ctrl, ISP3X_RAWAWB_CTRL);
2317
+ isp3_param_write(params_vdev, awb_ctrl, ISP3X_RAWAWB_CTRL, id);
22562318 }
22572319
22582320 static void
22592321 isp_rawhstlite_config(struct rkisp_isp_params_vdev *params_vdev,
2260
- const struct isp2x_rawhistlite_cfg *arg)
2322
+ const struct isp2x_rawhistlite_cfg *arg, u32 id)
22612323 {
2262
- u32 i;
2263
- u32 value;
2264
- u32 hist_ctrl;
2265
- u32 block_hsize, block_vsize;
2324
+ struct rkisp_device *ispdev = params_vdev->dev;
2325
+ struct v4l2_rect *out_crop = &ispdev->isp_sdev.out_crop;
2326
+ u32 width = out_crop->width, height = out_crop->height;
2327
+ u32 i, value, hist_ctrl, block_hsize, block_vsize;
2328
+ u32 h_size, v_size, h_offs, v_offs;
22662329
22672330 /* avoid to override the old enable value */
2268
- hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL);
2331
+ hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL, id);
22692332 hist_ctrl &= ISP3X_RAWHIST_EN;
22702333 hist_ctrl = hist_ctrl |
22712334 ISP3X_RAWHIST_MODE(arg->mode) |
....@@ -2273,23 +2336,31 @@
22732336 if (params_vdev->dev->isp_ver == ISP_V32)
22742337 hist_ctrl |= ISP3X_RAWHIST_DATASEL(arg->data_sel) |
22752338 ISP3X_RAWHIST_WATERLINE(arg->waterline);
2276
- isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL);
2339
+ isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL, id);
22772340
2341
+ h_offs = arg->win.h_offs & ~0x1;
2342
+ v_offs = arg->win.v_offs & ~0x1;
22782343 isp3_param_write(params_vdev,
2279
- ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs),
2280
- ISP3X_RAWHIST_LITE_OFFS);
2344
+ ISP_PACK_2SHORT(h_offs, v_offs),
2345
+ ISP3X_RAWHIST_LITE_OFFS, id);
22812346
2282
- block_hsize = arg->win.h_size / ISP32_RAWHISTLITE_ROW_NUM - 1;
2283
- block_vsize = arg->win.v_size / ISP32_RAWHISTLITE_COLUMN_NUM - 1;
2284
- block_hsize &= 0xFFFE;
2285
- block_vsize &= 0xFFFE;
2347
+ if (ispdev->hw_dev->unite)
2348
+ width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
2349
+ h_size = arg->win.h_size;
2350
+ v_size = arg->win.v_size;
2351
+ if (!h_size || h_size + h_offs + 1 > width)
2352
+ h_size = width - h_offs - 1;
2353
+ if (!v_size || v_size + v_offs + 1 > height)
2354
+ v_size = height - v_offs - 1;
2355
+ block_hsize = (h_size / ISP32_RAWHISTLITE_ROW_NUM) & ~0x1;
2356
+ block_vsize = (v_size / ISP32_RAWHISTLITE_COLUMN_NUM) & ~0x1;
22862357 isp3_param_write(params_vdev,
22872358 ISP_PACK_2SHORT(block_hsize, block_vsize),
2288
- ISP3X_RAWHIST_LITE_SIZE);
2359
+ ISP3X_RAWHIST_LITE_SIZE, id);
22892360
22902361 isp3_param_write(params_vdev,
22912362 ISP_PACK_4BYTE(arg->rcc, arg->gcc, arg->bcc, arg->off),
2292
- ISP3X_RAWHIST_LITE_RAW2Y_CC);
2363
+ ISP3X_RAWHIST_LITE_RAW2Y_CC, id);
22932364
22942365 for (i = 0; i < (ISP32_RAWHISTLITE_WEIGHT_REG_SIZE / 4); i++) {
22952366 value = ISP_PACK_4BYTE(arg->weight[4 * i + 0],
....@@ -2297,32 +2368,32 @@
22972368 arg->weight[4 * i + 2],
22982369 arg->weight[4 * i + 3]);
22992370 isp3_param_write(params_vdev, value,
2300
- ISP3X_RAWHIST_LITE_WEIGHT + 4 * i);
2371
+ ISP3X_RAWHIST_LITE_WEIGHT + 4 * i, id);
23012372 }
23022373
23032374 value = ISP_PACK_4BYTE(arg->weight[4 * i + 0], 0, 0, 0);
23042375 isp3_param_write(params_vdev, value,
2305
- ISP3X_RAWHIST_LITE_WEIGHT + 4 * i);
2376
+ ISP3X_RAWHIST_LITE_WEIGHT + 4 * i, id);
23062377 }
23072378
23082379 static void
2309
-isp_rawhstlite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2380
+isp_rawhstlite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
23102381 {
23112382 u32 hist_ctrl;
23122383
2313
- hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL);
2384
+ hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL, id);
23142385 hist_ctrl &= ~(ISP32_MODULE_EN | ISP32_REG_WR_MASK);
23152386
23162387 if (en)
23172388 hist_ctrl |= ISP32_MODULE_EN;
23182389
2319
- isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL);
2390
+ isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL, id);
23202391 }
23212392
23222393 static void
23232394 isp_rawhstbig_cfg_sram(struct rkisp_isp_params_vdev *params_vdev,
23242395 const struct isp2x_rawhistbig_cfg *arg,
2325
- u32 blk_no, bool is_check)
2396
+ u32 blk_no, bool is_check, u32 id)
23262397 {
23272398 u32 i, j, wnd_num_idx, value;
23282399 u8 weight15x15[ISP32_RAWHISTBIG_WEIGHT_REG_SIZE];
....@@ -2344,10 +2415,16 @@
23442415
23452416 value = ISP3X_RAWHIST_EN;
23462417 if (is_check &&
2347
- !(isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL) & value))
2418
+ !(isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id) & value))
23482419 return;
23492420
23502421 wnd_num_idx = arg->wnd_num;
2422
+ if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) {
2423
+ wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1;
2424
+ dev_err(params_vdev->dev->dev,
2425
+ "%s invalid wnd_num:%d, set to %d\n",
2426
+ __func__, arg->wnd_num, wnd_num_idx);
2427
+ }
23512428 memset(weight15x15, 0, sizeof(weight15x15));
23522429 for (i = 0; i < hist_wnd_num[wnd_num_idx]; i++) {
23532430 for (j = 0; j < hist_wnd_num[wnd_num_idx]; j++) {
....@@ -2369,13 +2446,16 @@
23692446
23702447 static void
23712448 isp_rawhstbig_config(struct rkisp_isp_params_vdev *params_vdev,
2372
- const struct isp2x_rawhistbig_cfg *arg, u32 blk_no)
2449
+ const struct isp2x_rawhistbig_cfg *arg, u32 blk_no, u32 id)
23732450 {
2374
- struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params;
2451
+ struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params + id;
23752452 struct rkisp_device *dev = params_vdev->dev;
2453
+ struct v4l2_rect *out_crop = &dev->isp_sdev.out_crop;
2454
+ u32 width = out_crop->width, height = out_crop->height;
23762455 struct isp2x_rawhistbig_cfg *arg_rec;
23772456 u32 hist_ctrl, block_hsize, block_vsize, wnd_num_idx;
23782457 const u32 hist_wnd_num[] = {5, 5, 15, 15};
2458
+ u32 h_size, v_size, h_offs, v_offs;
23792459 u32 addr;
23802460
23812461 switch (blk_no) {
....@@ -2395,8 +2475,14 @@
23952475 }
23962476
23972477 wnd_num_idx = arg->wnd_num;
2478
+ if (wnd_num_idx >= ARRAY_SIZE(hist_wnd_num)) {
2479
+ wnd_num_idx = ARRAY_SIZE(hist_wnd_num) - 1;
2480
+ dev_err(params_vdev->dev->dev,
2481
+ "%s invalid wnd_num:%d, set to %d\n",
2482
+ __func__, arg->wnd_num, wnd_num_idx);
2483
+ }
23982484 /* avoid to override the old enable value */
2399
- hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL);
2485
+ hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id);
24002486 hist_ctrl &= ISP3X_RAWHIST_EN;
24012487 hist_ctrl = hist_ctrl |
24022488 ISP3X_RAWHIST_MODE(arg->mode) |
....@@ -2405,33 +2491,40 @@
24052491 if (params_vdev->dev->isp_ver == ISP_V32)
24062492 hist_ctrl |= ISP3X_RAWHIST_DATASEL(arg->data_sel) |
24072493 ISP3X_RAWHIST_WATERLINE(arg->waterline);
2408
- isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL);
2494
+ isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL, id);
24092495
2496
+ h_offs = arg->win.h_offs & ~0x1;
2497
+ v_offs = arg->win.v_offs & ~0x1;
24102498 isp3_param_write(params_vdev,
2411
- ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs),
2412
- addr + ISP3X_RAWHIST_BIG_OFFS);
2499
+ ISP_PACK_2SHORT(h_offs, v_offs),
2500
+ addr + ISP3X_RAWHIST_BIG_OFFS, id);
24132501
2414
- block_hsize = arg->win.h_size / hist_wnd_num[wnd_num_idx] - 1;
2415
- block_vsize = arg->win.v_size / hist_wnd_num[wnd_num_idx] - 1;
2416
- block_hsize &= 0xFFFE;
2417
- block_vsize &= 0xFFFE;
2502
+ if (dev->hw_dev->unite)
2503
+ width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
2504
+ h_size = arg->win.h_size;
2505
+ v_size = arg->win.v_size;
2506
+ if (!h_size || h_size + h_offs + 1 > width)
2507
+ h_size = width - h_offs - 1;
2508
+ if (!v_size || v_size + v_offs + 1 > height)
2509
+ v_size = height - v_offs - 1;
2510
+ block_hsize = (h_size / hist_wnd_num[wnd_num_idx]) & ~0x1;
2511
+ block_vsize = (v_size / hist_wnd_num[wnd_num_idx]) & ~0x1;
24182512 isp3_param_write(params_vdev,
24192513 ISP_PACK_2SHORT(block_hsize, block_vsize),
2420
- addr + ISP3X_RAWHIST_BIG_SIZE);
2514
+ addr + ISP3X_RAWHIST_BIG_SIZE, id);
24212515
24222516 isp3_param_write(params_vdev,
24232517 ISP_PACK_4BYTE(arg->rcc, arg->gcc, arg->bcc, arg->off),
2424
- addr + ISP3X_RAWHIST_BIG_RAW2Y_CC);
2518
+ addr + ISP3X_RAWHIST_BIG_RAW2Y_CC, id);
24252519
24262520 if (dev->hw_dev->is_single)
2427
- isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false);
2428
- else
2429
- *arg_rec = *arg;
2521
+ isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false, id);
2522
+ *arg_rec = *arg;
24302523 }
24312524
24322525 static void
24332526 isp_rawhstbig_enable(struct rkisp_isp_params_vdev *params_vdev,
2434
- bool en, u32 blk_no)
2527
+ bool en, u32 blk_no, u32 id)
24352528 {
24362529 u32 hist_ctrl;
24372530 u32 addr;
....@@ -2449,72 +2542,72 @@
24492542 break;
24502543 }
24512544
2452
- hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL);
2545
+ hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id);
24532546 hist_ctrl &= ~(ISP3X_RAWHIST_EN | ISP32_REG_WR_MASK);
24542547 if (en)
24552548 hist_ctrl |= ISP3X_RAWHIST_EN;
24562549
2457
- isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL);
2550
+ isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL, id);
24582551 }
24592552
24602553 static void
24612554 isp_rawhst1_config(struct rkisp_isp_params_vdev *params_vdev,
2462
- const struct isp2x_rawhistbig_cfg *arg)
2555
+ const struct isp2x_rawhistbig_cfg *arg, u32 id)
24632556 {
2464
- isp_rawhstbig_config(params_vdev, arg, 1);
2557
+ isp_rawhstbig_config(params_vdev, arg, 1, id);
24652558 }
24662559
24672560 static void
2468
-isp_rawhst1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2561
+isp_rawhst1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
24692562 {
2470
- isp_rawhstbig_enable(params_vdev, en, 1);
2563
+ isp_rawhstbig_enable(params_vdev, en, 1, id);
24712564 }
24722565
24732566 static void
24742567 isp_rawhst2_config(struct rkisp_isp_params_vdev *params_vdev,
2475
- const struct isp2x_rawhistbig_cfg *arg)
2568
+ const struct isp2x_rawhistbig_cfg *arg, u32 id)
24762569 {
2477
- isp_rawhstbig_config(params_vdev, arg, 2);
2570
+ isp_rawhstbig_config(params_vdev, arg, 2, id);
24782571 }
24792572
24802573 static void
2481
-isp_rawhst2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2574
+isp_rawhst2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
24822575 {
2483
- isp_rawhstbig_enable(params_vdev, en, 2);
2576
+ isp_rawhstbig_enable(params_vdev, en, 2, id);
24842577 }
24852578
24862579 static void
24872580 isp_rawhst3_config(struct rkisp_isp_params_vdev *params_vdev,
2488
- const struct isp2x_rawhistbig_cfg *arg)
2581
+ const struct isp2x_rawhistbig_cfg *arg, u32 id)
24892582 {
2490
- isp_rawhstbig_config(params_vdev, arg, 0);
2583
+ isp_rawhstbig_config(params_vdev, arg, 0, id);
24912584 }
24922585
24932586 static void
2494
-isp_rawhst3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2587
+isp_rawhst3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
24952588 {
2496
- isp_rawhstbig_enable(params_vdev, en, 0);
2589
+ isp_rawhstbig_enable(params_vdev, en, 0, id);
24972590 }
24982591
24992592 static void
25002593 isp_hdrmge_config(struct rkisp_isp_params_vdev *params_vdev,
25012594 const struct isp32_hdrmge_cfg *arg,
2502
- enum rkisp_params_type type)
2595
+ enum rkisp_params_type type, u32 id)
25032596 {
25042597 u32 value;
25052598 int i;
25062599
25072600 if (type == RKISP_PARAMS_SHD || type == RKISP_PARAMS_ALL) {
25082601 value = ISP_PACK_2SHORT(arg->gain0, arg->gain0_inv);
2509
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN0);
2602
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN0, id);
25102603
25112604 value = ISP_PACK_2SHORT(arg->gain1, arg->gain1_inv);
2512
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN1);
2605
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN1, id);
25132606
25142607 value = arg->gain2;
2515
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN2);
2608
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN2, id);
25162609
2517
- value = isp3_param_read_cache(params_vdev, ISP3X_HDRMGE_CTRL);
2610
+ value = isp3_param_read_cache(params_vdev, ISP3X_HDRMGE_CTRL, id);
25182611 if (arg->s_base)
25192612 value |= BIT(1);
25202613 else
....@@ -2523,48 +2616,48 @@
25232616 value |= BIT(6);
25242617 else
25252618 value &= ~BIT(6);
2526
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_CTRL);
2619
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_CTRL, id);
25272620 }
25282621
25292622 if (type == RKISP_PARAMS_IMD || type == RKISP_PARAMS_ALL) {
25302623 value = ISP_PACK_4BYTE(arg->ms_dif_0p8, arg->ms_diff_0p15,
25312624 arg->lm_dif_0p9, arg->lm_dif_0p15);
2532
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LIGHTZ);
2625
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LIGHTZ, id);
25332626 value = (arg->ms_scl & 0x7ff) |
25342627 (arg->ms_thd0 & 0x3ff) << 12 |
25352628 (arg->ms_thd1 & 0x3ff) << 22;
2536
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_MS_DIFF);
2629
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_MS_DIFF, id);
25372630 value = (arg->lm_scl & 0x7ff) |
25382631 (arg->lm_thd0 & 0x3ff) << 12 |
25392632 (arg->lm_thd1 & 0x3ff) << 22;
2540
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LM_DIFF);
2633
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LM_DIFF, id);
25412634
25422635 for (i = 0; i < ISP32_HDRMGE_L_CURVE_NUM; i++) {
25432636 value = ISP_PACK_2SHORT(arg->curve.curve_0[i], arg->curve.curve_1[i]);
2544
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_DIFF_Y0 + 4 * i);
2637
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_DIFF_Y0 + 4 * i, id);
25452638 }
25462639
25472640 for (i = 0; i < ISP32_HDRMGE_E_CURVE_NUM; i++) {
25482641 value = (arg->l_raw1[i] & 0x3ff) << 20 |
25492642 (arg->l_raw0[i] & 0x3ff) << 10 |
25502643 (arg->e_y[i] & 0x3ff);
2551
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_OVER_Y0 + 4 * i);
2644
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_OVER_Y0 + 4 * i, id);
25522645 }
25532646
25542647 value = ISP_PACK_2SHORT(arg->each_raw_gain0, arg->each_raw_gain1);
2555
- isp3_param_write(params_vdev, value, ISP32_HDRMGE_EACH_GAIN);
2648
+ isp3_param_write(params_vdev, value, ISP32_HDRMGE_EACH_GAIN, id);
25562649 }
25572650 }
25582651
25592652 static void
2560
-isp_hdrmge_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2653
+isp_hdrmge_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
25612654 {
25622655 }
25632656
25642657 static void
25652658 isp_hdrdrc_config(struct rkisp_isp_params_vdev *params_vdev,
25662659 const struct isp32_drc_cfg *arg,
2567
- enum rkisp_params_type type)
2660
+ enum rkisp_params_type type, u32 id)
25682661 {
25692662 u32 i, value;
25702663
....@@ -2574,76 +2667,76 @@
25742667 value = (arg->offset_pow2 & 0x0F) << 28 |
25752668 (arg->compres_scl & 0x1FFF) << 14 |
25762669 (arg->position & 0x03FFF);
2577
- isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL1);
2670
+ isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL1, id);
25782671
25792672 value = arg->delta_scalein << 24 |
25802673 (arg->hpdetail_ratio & 0xFFF) << 12 |
25812674 (arg->lpdetail_ratio & 0xFFF);
2582
- isp3_param_write(params_vdev, value, ISP3X_DRC_LPRATIO);
2675
+ isp3_param_write(params_vdev, value, ISP3X_DRC_LPRATIO, id);
25832676
25842677 value = ISP_PACK_4BYTE(arg->bilat_wt_off, 0, arg->weipre_frame, arg->weicur_pix);
2585
- isp3_param_write(params_vdev, value, ISP3X_DRC_EXPLRATIO);
2678
+ isp3_param_write(params_vdev, value, ISP3X_DRC_EXPLRATIO, id);
25862679
25872680 value = (arg->force_sgm_inv0 & 0xFFFF) << 16 |
25882681 arg->motion_scl << 8 | arg->edge_scl;
2589
- isp3_param_write(params_vdev, value, ISP3X_DRC_SIGMA);
2682
+ isp3_param_write(params_vdev, value, ISP3X_DRC_SIGMA, id);
25902683
25912684 value = ISP_PACK_2SHORT(arg->space_sgm_inv0, arg->space_sgm_inv1);
2592
- isp3_param_write(params_vdev, value, ISP3X_DRC_SPACESGM);
2685
+ isp3_param_write(params_vdev, value, ISP3X_DRC_SPACESGM, id);
25932686
25942687 value = ISP_PACK_2SHORT(arg->range_sgm_inv0, arg->range_sgm_inv1);
2595
- isp3_param_write(params_vdev, value, ISP3X_DRC_RANESGM);
2688
+ isp3_param_write(params_vdev, value, ISP3X_DRC_RANESGM, id);
25962689
25972690 value = (arg->weig_bilat & 0x1f) | (arg->weig_maxl & 0x1f) << 8 |
25982691 (arg->bilat_soft_thd & 0x3fff) << 16;
25992692 if (arg->enable_soft_thd)
26002693 value |= BIT(31);
2601
- isp3_param_write(params_vdev, value, ISP3X_DRC_BILAT);
2694
+ isp3_param_write(params_vdev, value, ISP3X_DRC_BILAT, id);
26022695
26032696 for (i = 0; i < ISP32_DRC_Y_NUM / 2; i++) {
26042697 value = ISP_PACK_2SHORT(arg->gain_y[2 * i],
26052698 arg->gain_y[2 * i + 1]);
2606
- isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i);
2699
+ isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i, id);
26072700 }
26082701 value = ISP_PACK_2SHORT(arg->gain_y[2 * i], 0);
2609
- isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i);
2702
+ isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i, id);
26102703
26112704 for (i = 0; i < ISP32_DRC_Y_NUM / 2; i++) {
26122705 value = ISP_PACK_2SHORT(arg->compres_y[2 * i],
26132706 arg->compres_y[2 * i + 1]);
2614
- isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i);
2707
+ isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i, id);
26152708 }
26162709 value = ISP_PACK_2SHORT(arg->compres_y[2 * i], 0);
2617
- isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i);
2710
+ isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i, id);
26182711
26192712 for (i = 0; i < ISP32_DRC_Y_NUM / 2; i++) {
26202713 value = ISP_PACK_2SHORT(arg->scale_y[2 * i],
26212714 arg->scale_y[2 * i + 1]);
2622
- isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i);
2715
+ isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i, id);
26232716 }
26242717 value = ISP_PACK_2SHORT(arg->scale_y[2 * i], 0);
2625
- isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i);
2718
+ isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i, id);
26262719
26272720 if (params_vdev->dev->isp_ver == ISP_V32)
26282721 value = ISP_PACK_2SHORT(arg->min_ogain, arg->iir_weight);
26292722 else
26302723 value = ISP_PACK_2SHORT(arg->min_ogain, 0);
2631
- isp3_param_write(params_vdev, value, ISP3X_DRC_IIRWG_GAIN);
2724
+ isp3_param_write(params_vdev, value, ISP3X_DRC_IIRWG_GAIN, id);
26322725
26332726 value = arg->gas_t & 0x1fff;
2634
- isp3_param_write(params_vdev, value, ISP32_DRC_LUM3X2_CTRL);
2727
+ isp3_param_write(params_vdev, value, ISP32_DRC_LUM3X2_CTRL, id);
26352728
26362729 value = ISP_PACK_4BYTE(arg->gas_l0, arg->gas_l1, arg->gas_l2, arg->gas_l3);
2637
- isp3_param_write(params_vdev, value, ISP32_DRC_LUM3X2_GAS);
2730
+ isp3_param_write(params_vdev, value, ISP32_DRC_LUM3X2_GAS, id);
26382731 }
26392732
26402733 static void
2641
-isp_hdrdrc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2734
+isp_hdrdrc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
26422735 {
26432736 u32 value;
26442737 bool real_en;
26452738
2646
- value = isp3_param_read(params_vdev, ISP3X_DRC_CTRL0);
2739
+ value = isp3_param_read(params_vdev, ISP3X_DRC_CTRL0, id);
26472740 real_en = !!(value & ISP32_MODULE_EN);
26482741 if ((en && real_en) || (!en && !real_en))
26492742 return;
....@@ -2651,17 +2744,17 @@
26512744 if (en) {
26522745 value |= ISP32_MODULE_EN;
26532746 isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1,
2654
- ISP3X_ADRC_FST_FRAME);
2747
+ ISP3X_ADRC_FST_FRAME, id);
26552748 } else {
26562749 value = 0;
2657
- isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(12));
2750
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(12), id);
26582751 }
2659
- isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL0);
2752
+ isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL0, id);
26602753 }
26612754
26622755 static void
26632756 isp_gic_config(struct rkisp_isp_params_vdev *params_vdev,
2664
- const struct isp21_gic_cfg *arg)
2757
+ const struct isp21_gic_cfg *arg, u32 id)
26652758 {
26662759 u32 value;
26672760 s32 i;
....@@ -2669,12 +2762,12 @@
26692762 value = (arg->regmingradthrdark2 & 0x03FF) << 20 |
26702763 (arg->regmingradthrdark1 & 0x03FF) << 10 |
26712764 (arg->regminbusythre & 0x03FF);
2672
- isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA1);
2765
+ isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA1, id);
26732766
26742767 value = (arg->regdarkthre & 0x07FF) << 21 |
26752768 (arg->regmaxcorvboth & 0x03FF) << 11 |
26762769 (arg->regdarktthrehi & 0x07FF);
2677
- isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA2);
2770
+ isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA2, id);
26782771
26792772 value = (arg->regkgrad2dark & 0x0F) << 28 |
26802773 (arg->regkgrad1dark & 0x0F) << 24 |
....@@ -2683,46 +2776,46 @@
26832776 (arg->regkgrad2 & 0x0F) << 8 |
26842777 (arg->regkgrad1 & 0x0F) << 4 |
26852778 (arg->reggbthre & 0x0F);
2686
- isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA3);
2779
+ isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA3, id);
26872780
26882781 value = (arg->regmaxcorv & 0x03FF) << 20 |
26892782 (arg->regmingradthr2 & 0x03FF) << 10 |
26902783 (arg->regmingradthr1 & 0x03FF);
2691
- isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA4);
2784
+ isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA4, id);
26922785
26932786 value = (arg->gr_ratio & 0x03) << 28 |
26942787 (arg->noise_scale & 0x7F) << 12 |
26952788 (arg->noise_base & 0xFFF);
2696
- isp3_param_write(params_vdev, value, ISP3X_GIC_NOISE_PARA1);
2789
+ isp3_param_write(params_vdev, value, ISP3X_GIC_NOISE_PARA1, id);
26972790
26982791 value = arg->diff_clip & 0x7fff;
2699
- isp3_param_write(params_vdev, value, ISP3X_GIC_NOISE_PARA2);
2792
+ isp3_param_write(params_vdev, value, ISP3X_GIC_NOISE_PARA2, id);
27002793
27012794 for (i = 0; i < ISP32_GIC_SIGMA_Y_NUM / 2; i++) {
27022795 value = ISP_PACK_2SHORT(arg->sigma_y[2 * i], arg->sigma_y[2 * i + 1]);
2703
- isp3_param_write(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i);
2796
+ isp3_param_write(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i, id);
27042797 }
27052798 value = ISP_PACK_2SHORT(arg->sigma_y[2 * i], 0);
2706
- isp3_param_write(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i);
2799
+ isp3_param_write(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i, id);
27072800 }
27082801
27092802 static void
2710
-isp_gic_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2803
+isp_gic_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
27112804 {
27122805 u32 value = 0;
27132806
27142807 if (en)
27152808 value |= ISP32_MODULE_EN;
2716
- isp3_param_write(params_vdev, value, ISP3X_GIC_CONTROL);
2809
+ isp3_param_write(params_vdev, value, ISP3X_GIC_CONTROL, id);
27172810 }
27182811
27192812 static void
27202813 isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev,
2721
- const struct isp32_dhaz_cfg *arg)
2814
+ const struct isp32_dhaz_cfg *arg, u32 id)
27222815 {
27232816 u32 i, value, ctrl;
27242817
2725
- ctrl = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL);
2818
+ ctrl = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL, id);
27262819 ctrl &= ISP3X_DHAZ_ENMUX;
27272820
27282821 ctrl |= !!arg->enh_luma_en << 28 | !!arg->color_deviate_en << 27 |
....@@ -2736,109 +2829,109 @@
27362829 value = (arg->hist_wr[i * 3] & 0x3ff) |
27372830 (arg->hist_wr[i * 3 + 1] & 0x3ff) << 10 |
27382831 (arg->hist_wr[i * 3 + 2] & 0x3ff) << 20;
2739
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4);
2832
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4, id);
27402833 }
27412834 value = arg->hist_wr[i * 3] & 0x3ff;
2742
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4);
2835
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4, id);
27432836 }
2744
- isp3_param_write(params_vdev, ctrl, ISP3X_DHAZ_CTRL);
2837
+ isp3_param_write(params_vdev, ctrl, ISP3X_DHAZ_CTRL, id);
27452838
27462839 value = ISP_PACK_4BYTE(arg->dc_min_th, arg->dc_max_th,
27472840 arg->yhist_th, arg->yblk_th);
2748
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP0);
2841
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP0, id);
27492842
27502843 value = ISP_PACK_4BYTE(arg->bright_min, arg->bright_max,
27512844 arg->wt_max, 0);
2752
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP1);
2845
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP1, id);
27532846
27542847 value = ISP_PACK_4BYTE(arg->air_min, arg->air_max,
27552848 arg->dark_th, arg->tmax_base);
2756
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP2);
2849
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP2, id);
27572850
27582851 value = ISP_PACK_2SHORT(arg->tmax_off, arg->tmax_max);
2759
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_TMAX);
2852
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_TMAX, id);
27602853
27612854 value = (arg->hist_min & 0xFFFF) << 16 |
27622855 (arg->hist_th_off & 0xFF) << 8 |
27632856 (arg->hist_k & 0x1F);
2764
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST0);
2857
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST0, id);
27652858
27662859 value = ISP_PACK_2SHORT(arg->hist_scale, arg->hist_gratio);
2767
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST1);
2860
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST1, id);
27682861
27692862 value = ISP_PACK_2SHORT(arg->enhance_chroma, arg->enhance_value);
2770
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENHANCE);
2863
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENHANCE, id);
27712864
27722865 value = (arg->iir_wt_sigma & 0x07FF) << 16 |
27732866 (arg->iir_sigma & 0xFF) << 8 |
27742867 (arg->stab_fnum & 0x1F);
2775
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR0);
2868
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR0, id);
27762869
27772870 value = (arg->iir_pre_wet & 0x0F) << 24 |
27782871 (arg->iir_tmax_sigma & 0x7FF) << 8 |
27792872 (arg->iir_air_sigma & 0xFF);
2780
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR1);
2873
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR1, id);
27812874
27822875 value = (arg->cfg_wt & 0x01FF) << 16 |
27832876 (arg->cfg_air & 0xFF) << 8 |
27842877 (arg->cfg_alpha & 0xFF);
2785
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG0);
2878
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG0, id);
27862879
27872880 value = ISP_PACK_2SHORT(arg->cfg_tmax, arg->cfg_gratio);
2788
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG1);
2881
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG1, id);
27892882
27902883 value = (arg->range_sima & 0x01FF) << 16 |
27912884 (arg->space_sigma_pre & 0xFF) << 8 |
27922885 (arg->space_sigma_cur & 0xFF);
2793
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_SIGMA);
2886
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_SIGMA, id);
27942887
27952888 value = ISP_PACK_2SHORT(arg->bf_weight, arg->dc_weitcur);
2796
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_WET);
2889
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_WET, id);
27972890
27982891 for (i = 0; i < ISP32_DHAZ_ENH_CURVE_NUM / 2; i++) {
27992892 value = ISP_PACK_2SHORT(arg->enh_curve[2 * i], arg->enh_curve[2 * i + 1]);
2800
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i);
2893
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i, id);
28012894 }
28022895 value = ISP_PACK_2SHORT(arg->enh_curve[2 * i], 0);
2803
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i);
2896
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i, id);
28042897
28052898 value = ISP_PACK_4BYTE(arg->gaus_h0, arg->gaus_h1, arg->gaus_h2, 0);
2806
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAUS);
2899
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAUS, id);
28072900
28082901 for (i = 0; i < ISP32_DHAZ_SIGMA_IDX_NUM / 4; i++) {
28092902 value = ISP_PACK_4BYTE(arg->sigma_idx[i * 4], arg->sigma_idx[i * 4 + 1],
28102903 arg->sigma_idx[i * 4 + 2], arg->sigma_idx[i * 4 + 3]);
2811
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4);
2904
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4, id);
28122905 }
28132906 value = ISP_PACK_4BYTE(arg->sigma_idx[i * 4], arg->sigma_idx[i * 4 + 1],
28142907 arg->sigma_idx[i * 4 + 2], 0);
2815
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4);
2908
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4, id);
28162909
28172910 for (i = 0; i < ISP32_DHAZ_SIGMA_LUT_NUM / 2; i++) {
28182911 value = ISP_PACK_2SHORT(arg->sigma_lut[i * 2], arg->sigma_lut[i * 2 + 1]);
2819
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4);
2912
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4, id);
28202913 }
28212914 value = ISP_PACK_2SHORT(arg->sigma_lut[i * 2], 0);
2822
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4);
2915
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4, id);
28232916
28242917 for (i = 0; i < ISP32_DHAZ_ENH_LUMA_NUM / 3; i++) {
28252918 value = (arg->enh_luma[i * 3 + 2] & 0x3ff) << 20 |
28262919 (arg->enh_luma[i * 3 + 1] & 0x3ff) << 10 |
28272920 (arg->enh_luma[i * 3] & 0x3ff);
2828
- isp3_param_write(params_vdev, value, ISP32_DHAZ_ENH_LUMA0 + i * 4);
2921
+ isp3_param_write(params_vdev, value, ISP32_DHAZ_ENH_LUMA0 + i * 4, id);
28292922 }
28302923 value = (arg->enh_luma[i * 3 + 1] & 0x3ff) << 10 |
28312924 (arg->enh_luma[i * 3] & 0x3ff);
2832
- isp3_param_write(params_vdev, value, ISP32_DHAZ_ENH_LUMA0 + i * 4);
2925
+ isp3_param_write(params_vdev, value, ISP32_DHAZ_ENH_LUMA0 + i * 4, id);
28332926 }
28342927
28352928 static void
2836
-isp_dhaz_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2929
+isp_dhaz_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
28372930 {
28382931 u32 value;
28392932 bool real_en;
28402933
2841
- value = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL);
2934
+ value = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL, id);
28422935 real_en = !!(value & ISP3X_DHAZ_ENMUX);
28432936 if ((en && real_en) || (!en && !real_en))
28442937 return;
....@@ -2846,17 +2939,17 @@
28462939 if (en) {
28472940 value |= ISP32_SELF_FORCE_UPD | ISP3X_DHAZ_ENMUX;
28482941 isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1,
2849
- ISP3X_DHAZ_FST_FRAME);
2942
+ ISP3X_DHAZ_FST_FRAME, id);
28502943 } else {
28512944 value &= ~ISP3X_DHAZ_ENMUX;
2852
- isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(16));
2945
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(16), id);
28532946 }
2854
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_CTRL);
2947
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_CTRL, id);
28552948 }
28562949
28572950 static void
28582951 isp_3dlut_config(struct rkisp_isp_params_vdev *params_vdev,
2859
- const struct isp2x_3dlut_cfg *arg)
2952
+ const struct isp2x_3dlut_cfg *arg, u32 id)
28602953 {
28612954 struct rkisp_device *dev = params_vdev->dev;
28622955 struct rkisp_isp_params_val_v32 *priv_val;
....@@ -2864,58 +2957,58 @@
28642957 u32 *data;
28652958
28662959 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
2867
- buf_idx = (priv_val->buf_3dlut_idx++) % ISP32_3DLUT_BUF_NUM;
2960
+ buf_idx = (priv_val->buf_3dlut_idx[id]++) % ISP32_3DLUT_BUF_NUM;
28682961
2869
- if (!priv_val->buf_3dlut[buf_idx].vaddr) {
2962
+ if (!priv_val->buf_3dlut[id][buf_idx].vaddr) {
28702963 dev_err(dev->dev, "no find 3dlut buf\n");
28712964 return;
28722965 }
2873
- data = (u32 *)priv_val->buf_3dlut[buf_idx].vaddr;
2966
+ data = (u32 *)priv_val->buf_3dlut[id][buf_idx].vaddr;
28742967 for (i = 0; i < arg->actual_size; i++)
28752968 data[i] = (arg->lut_b[i] & 0x3FF) |
28762969 (arg->lut_g[i] & 0xFFF) << 10 |
28772970 (arg->lut_r[i] & 0x3FF) << 22;
2878
- rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_3dlut[buf_idx]);
2879
- value = priv_val->buf_3dlut[buf_idx].dma_addr;
2880
- isp3_param_write(params_vdev, value, ISP3X_MI_LUT_3D_RD_BASE);
2881
- isp3_param_write(params_vdev, arg->actual_size, ISP3X_MI_LUT_3D_RD_WSIZE);
2971
+ rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_3dlut[id][buf_idx]);
2972
+ value = priv_val->buf_3dlut[id][buf_idx].dma_addr;
2973
+ isp3_param_write(params_vdev, value, ISP3X_MI_LUT_3D_RD_BASE, id);
2974
+ isp3_param_write(params_vdev, arg->actual_size, ISP3X_MI_LUT_3D_RD_WSIZE, id);
28822975
2883
- value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL);
2976
+ value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL, id);
28842977 value &= ISP3X_3DLUT_EN;
28852978
28862979 if (value)
2887
- isp3_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01);
2980
+ isp3_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01, id);
28882981
2889
- isp3_param_write(params_vdev, value, ISP3X_3DLUT_CTRL);
2982
+ isp3_param_write(params_vdev, value, ISP3X_3DLUT_CTRL, id);
28902983 }
28912984
28922985 static void
2893
-isp_3dlut_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2986
+isp_3dlut_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
28942987 {
28952988 u32 value;
28962989 bool en_state;
28972990 struct rkisp_isp_params_val_v32 *priv_val;
28982991
2899
- value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL);
2992
+ value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL, id);
29002993 en_state = (value & ISP3X_3DLUT_EN) ? true : false;
29012994
29022995 if (en == en_state)
29032996 return;
29042997
29052998 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
2906
- if (en && priv_val->buf_3dlut[0].vaddr) {
2907
- isp3_param_set_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01);
2908
- isp3_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01);
2999
+ if (en && priv_val->buf_3dlut[id][0].vaddr) {
3000
+ isp3_param_set_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01, id);
3001
+ isp3_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01, id);
29093002 } else {
2910
- isp3_param_clear_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01);
2911
- isp3_param_clear_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01);
2912
- isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(20));
3003
+ isp3_param_clear_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01, id);
3004
+ isp3_param_clear_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01, id);
3005
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(20), id);
29133006 }
29143007 }
29153008
29163009 static void
29173010 isp_ldch_config(struct rkisp_isp_params_vdev *params_vdev,
2918
- const struct isp32_ldch_cfg *arg)
3011
+ const struct isp32_ldch_cfg *arg, u32 id)
29193012 {
29203013 struct rkisp_device *dev = params_vdev->dev;
29213014 struct rkisp_isp_params_val_v32 *priv_val;
....@@ -2923,7 +3016,7 @@
29233016 int buf_idx, i;
29243017 u32 value;
29253018
2926
- value = isp3_param_read(params_vdev, ISP3X_LDCH_STS);
3019
+ value = isp3_param_read(params_vdev, ISP3X_LDCH_STS, id);
29273020 value &= ISP32_MODULE_EN;
29283021 value |= !!arg->map13p3_en << 7 |
29293022 !!arg->force_map_en << 6 |
....@@ -2931,20 +3024,20 @@
29313024 !!arg->sample_avr_en << 3 |
29323025 !!arg->zero_interp_en << 2 |
29333026 !!arg->frm_end_dis << 1;
2934
- isp3_param_write(params_vdev, value, ISP3X_LDCH_STS);
3027
+ isp3_param_write(params_vdev, value, ISP3X_LDCH_STS, id);
29353028 if (arg->bic_mode_en) {
29363029 for (i = 0; i < ISP32_LDCH_BIC_NUM / 4; i++) {
29373030 value = ISP_PACK_4BYTE(arg->bicubic[i * 4], arg->bicubic[i * 4 + 1],
29383031 arg->bicubic[i * 4 + 2], arg->bicubic[i * 4 + 3]);
2939
- isp3_param_write(params_vdev, value, ISP32_LDCH_BIC_TABLE0 + i * 4);
3032
+ isp3_param_write(params_vdev, value, ISP32_LDCH_BIC_TABLE0 + i * 4, id);
29403033 }
29413034 }
29423035
29433036 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
29443037 for (i = 0; i < ISP32_MESH_BUF_NUM; i++) {
2945
- if (!priv_val->buf_ldch[i].mem_priv)
3038
+ if (!priv_val->buf_ldch[id][i].mem_priv)
29463039 continue;
2947
- if (arg->buf_fd == priv_val->buf_ldch[i].dma_fd)
3040
+ if (arg->buf_fd == priv_val->buf_ldch[id][i].dma_fd)
29483041 break;
29493042 }
29503043 if (i == ISP32_MESH_BUF_NUM) {
....@@ -2952,28 +3045,28 @@
29523045 return;
29533046 }
29543047
2955
- if (!priv_val->buf_ldch[i].vaddr) {
3048
+ if (!priv_val->buf_ldch[id][i].vaddr) {
29563049 dev_err(dev->dev, "no ldch buffer allocated\n");
29573050 return;
29583051 }
29593052
2960
- buf_idx = priv_val->buf_ldch_idx;
2961
- head = (struct isp2x_mesh_head *)priv_val->buf_ldch[buf_idx].vaddr;
3053
+ buf_idx = priv_val->buf_ldch_idx[id];
3054
+ head = (struct isp2x_mesh_head *)priv_val->buf_ldch[id][buf_idx].vaddr;
29623055 head->stat = MESH_BUF_INIT;
29633056
29643057 buf_idx = i;
2965
- head = (struct isp2x_mesh_head *)priv_val->buf_ldch[buf_idx].vaddr;
3058
+ head = (struct isp2x_mesh_head *)priv_val->buf_ldch[id][buf_idx].vaddr;
29663059 head->stat = MESH_BUF_CHIPINUSE;
2967
- priv_val->buf_ldch_idx = buf_idx;
2968
- rkisp_prepare_buffer(dev, &priv_val->buf_ldch[buf_idx]);
2969
- value = priv_val->buf_ldch[buf_idx].dma_addr + head->data_oft;
2970
- isp3_param_write(params_vdev, value, ISP3X_MI_LUT_LDCH_RD_BASE);
2971
- isp3_param_write(params_vdev, arg->hsize, ISP3X_MI_LUT_LDCH_RD_H_WSIZE);
2972
- isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_LDCH_RD_V_SIZE);
3060
+ priv_val->buf_ldch_idx[id] = buf_idx;
3061
+ rkisp_prepare_buffer(dev, &priv_val->buf_ldch[id][buf_idx]);
3062
+ value = priv_val->buf_ldch[id][buf_idx].dma_addr + head->data_oft;
3063
+ isp3_param_write(params_vdev, value, ISP3X_MI_LUT_LDCH_RD_BASE, id);
3064
+ isp3_param_write(params_vdev, arg->hsize, ISP3X_MI_LUT_LDCH_RD_H_WSIZE, id);
3065
+ isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_LDCH_RD_V_SIZE, id);
29733066 }
29743067
29753068 static void
2976
-isp_ldch_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3069
+isp_ldch_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
29773070 {
29783071 struct rkisp_device *dev = params_vdev->dev;
29793072 struct rkisp_isp_params_val_v32 *priv_val;
....@@ -2981,24 +3074,24 @@
29813074
29823075 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
29833076 if (en) {
2984
- buf_idx = priv_val->buf_ldch_idx;
2985
- if (!priv_val->buf_ldch[buf_idx].vaddr) {
3077
+ buf_idx = priv_val->buf_ldch_idx[id];
3078
+ if (!priv_val->buf_ldch[id][buf_idx].vaddr) {
29863079 dev_err(dev->dev, "no ldch buffer allocated\n");
29873080 return;
29883081 }
2989
- isp3_param_set_bits(params_vdev, ISP3X_LDCH_STS, 0x01);
3082
+ isp3_param_set_bits(params_vdev, ISP3X_LDCH_STS, 0x01, id);
29903083 } else {
2991
- isp3_param_clear_bits(params_vdev, ISP3X_LDCH_STS, 0x01);
3084
+ isp3_param_clear_bits(params_vdev, ISP3X_LDCH_STS, 0x01, id);
29923085 }
29933086 }
29943087
29953088 static void
29963089 isp_ynr_config(struct rkisp_isp_params_vdev *params_vdev,
2997
- const struct isp32_ynr_cfg *arg)
3090
+ const struct isp32_ynr_cfg *arg, u32 id)
29983091 {
29993092 u32 i, value;
30003093
3001
- value = isp3_param_read(params_vdev, ISP3X_YNR_GLOBAL_CTRL);
3094
+ value = isp3_param_read(params_vdev, ISP3X_YNR_GLOBAL_CTRL, id);
30023095 value &= ISP32_MODULE_EN;
30033096
30043097 value |= !!arg->rnr_en << 26 |
....@@ -3011,96 +3104,96 @@
30113104 !!arg->lgft3x3_bypass << 3 |
30123105 !!arg->lbft5x5_bypass << 2 |
30133106 !!arg->bft3x3_bypass << 1;
3014
- isp3_param_write(params_vdev, value, ISP3X_YNR_GLOBAL_CTRL);
3107
+ isp3_param_write(params_vdev, value, ISP3X_YNR_GLOBAL_CTRL, id);
30153108
30163109 value = ISP_PACK_2SHORT(arg->rnr_max_r, arg->local_gainscale);
3017
- isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_MAX_R);
3110
+ isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_MAX_R, id);
30183111
30193112 value = ISP_PACK_2SHORT(arg->rnr_center_coorh, arg->rnr_center_coorv);
3020
- isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_CENTER_COOR);
3113
+ isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_CENTER_COOR, id);
30213114
30223115 value = ISP_PACK_2SHORT(arg->loclagain_adj_thresh, arg->localgain_adj);
3023
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOCAL_GAIN_CTRL);
3116
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOCAL_GAIN_CTRL, id);
30243117
30253118 value = ISP_PACK_2SHORT(arg->low_bf_inv0, arg->low_bf_inv1);
3026
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL0);
3119
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL0, id);
30273120
30283121 value = ISP_PACK_2SHORT(arg->low_thred_adj, arg->low_peak_supress);
3029
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL1);
3122
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL1, id);
30303123
30313124 value = ISP_PACK_2SHORT(arg->low_edge_adj_thresh, arg->low_dist_adj);
3032
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL2);
3125
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL2, id);
30333126
30343127 value = (arg->low_bi_weight & 0xFF) << 24 |
30353128 (arg->low_weight & 0xFF) << 16 |
30363129 (arg->low_center_weight & 0xFFFF);
3037
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL3);
3130
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL3, id);
30383131
30393132 value = ISP_PACK_2SHORT(arg->lbf_weight_thres, arg->frame_full_size);
30403133 if (params_vdev->dev->isp_ver == ISP_V32_L)
30413134 value |= (arg->frame_add4line & 0xf) << 12;
3042
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL4);
3135
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL4, id);
30433136
30443137 value = (arg->low_gauss1_coeff2 & 0xFFFF) << 16 |
30453138 (arg->low_gauss1_coeff1 & 0xFF) << 8 |
30463139 (arg->low_gauss1_coeff0 & 0xFF);
3047
- isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS1_COEFF);
3140
+ isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS1_COEFF, id);
30483141
30493142 value = (arg->low_gauss2_coeff2 & 0xFFFF) << 16 |
30503143 (arg->low_gauss2_coeff1 & 0xFF) << 8 |
30513144 (arg->low_gauss2_coeff0 & 0xFF);
3052
- isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS2_COEFF);
3145
+ isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS2_COEFF, id);
30533146
30543147 for (i = 0; i < ISP32_YNR_XY_NUM / 2; i++) {
30553148 value = ISP_PACK_2SHORT(arg->luma_points_x[2 * i],
30563149 arg->luma_points_x[2 * i + 1]);
3057
- isp3_param_write(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i);
3150
+ isp3_param_write(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i, id);
30583151 }
30593152 value = ISP_PACK_2SHORT(arg->luma_points_x[2 * i], 0);
3060
- isp3_param_write(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i);
3153
+ isp3_param_write(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i, id);
30613154
30623155 for (i = 0; i < ISP32_YNR_XY_NUM / 2; i++) {
30633156 value = ISP_PACK_2SHORT(arg->lsgm_y[2 * i],
30643157 arg->lsgm_y[2 * i + 1]);
3065
- isp3_param_write(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i);
3158
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i, id);
30663159 }
30673160 value = ISP_PACK_2SHORT(arg->lsgm_y[2 * i], 0);
3068
- isp3_param_write(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i);
3161
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i, id);
30693162
30703163 for (i = 0; i < ISP32_YNR_XY_NUM / 4; i++) {
30713164 value = ISP_PACK_4BYTE(arg->rnr_strength3[4 * i],
30723165 arg->rnr_strength3[4 * i + 1],
30733166 arg->rnr_strength3[4 * i + 2],
30743167 arg->rnr_strength3[4 * i + 3]);
3075
- isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i);
3168
+ isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i, id);
30763169 }
30773170 value = ISP_PACK_4BYTE(arg->rnr_strength3[4 * i], 0, 0, 0);
3078
- isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i);
3171
+ isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i, id);
30793172
30803173 value = (arg->nlm_hi_bf_scale & 0x3ff) << 16 |
30813174 (arg->nlm_hi_gain_alpha & 0x1f) << 11 |
30823175 (arg->nlm_min_sigma & 0x7ff);
3083
- isp3_param_write(params_vdev, value, ISP32_YNR_NLM_SIGMA_GAIN);
3176
+ isp3_param_write(params_vdev, value, ISP32_YNR_NLM_SIGMA_GAIN, id);
30843177
30853178 value = (arg->nlm_coe[5] & 0xf) << 20 | (arg->nlm_coe[4] & 0xf) << 16 |
30863179 (arg->nlm_coe[3] & 0xf) << 12 | (arg->nlm_coe[2] & 0xf) << 8 |
30873180 (arg->nlm_coe[1] & 0xf) << 4 | (arg->nlm_coe[0] & 0xf);
3088
- isp3_param_write(params_vdev, value, ISP32_YNR_NLM_COE);
3181
+ isp3_param_write(params_vdev, value, ISP32_YNR_NLM_COE, id);
30893182
30903183 value = (arg->nlm_center_weight & 0x3ffff) << 10 | (arg->nlm_weight_offset & 0x3ff);
3091
- isp3_param_write(params_vdev, value, ISP32_YNR_NLM_WEIGHT);
3184
+ isp3_param_write(params_vdev, value, ISP32_YNR_NLM_WEIGHT, id);
30923185
30933186 value = arg->nlm_nr_weight & 0x7ff;
3094
- isp3_param_write(params_vdev, value, ISP32_YNR_NLM_NR_WEIGHT);
3187
+ isp3_param_write(params_vdev, value, ISP32_YNR_NLM_NR_WEIGHT, id);
30953188 }
30963189
30973190 static void
3098
-isp_ynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3191
+isp_ynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
30993192 {
31003193 u32 ynr_ctrl;
31013194 bool real_en;
31023195
3103
- ynr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_YNR_GLOBAL_CTRL);
3196
+ ynr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_YNR_GLOBAL_CTRL, id);
31043197 real_en = !!(ynr_ctrl & ISP32_MODULE_EN);
31053198 if ((en && real_en) || (!en && !real_en))
31063199 return;
....@@ -3108,22 +3201,22 @@
31083201 if (en) {
31093202 ynr_ctrl |= ISP32_MODULE_EN;
31103203 isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1,
3111
- ISP3X_YNR_FST_FRAME);
3204
+ ISP3X_YNR_FST_FRAME, id);
31123205 } else {
31133206 ynr_ctrl &= ~ISP32_MODULE_EN;
31143207 }
31153208
3116
- isp3_param_write(params_vdev, ynr_ctrl, ISP3X_YNR_GLOBAL_CTRL);
3209
+ isp3_param_write(params_vdev, ynr_ctrl, ISP3X_YNR_GLOBAL_CTRL, id);
31173210 }
31183211
31193212 static void
31203213 isp_cnr_config(struct rkisp_isp_params_vdev *params_vdev,
3121
- const struct isp32_cnr_cfg *arg)
3214
+ const struct isp32_cnr_cfg *arg, u32 id)
31223215 {
31233216 u32 i, value, ctrl, gain_ctrl;
31243217
3125
- gain_ctrl = isp3_param_read(params_vdev, ISP3X_GAIN_CTRL);
3126
- ctrl = isp3_param_read(params_vdev, ISP3X_CNR_CTRL);
3218
+ gain_ctrl = isp3_param_read(params_vdev, ISP3X_GAIN_CTRL, id);
3219
+ ctrl = isp3_param_read(params_vdev, ISP3X_CNR_CTRL, id);
31273220 ctrl &= ISP32_MODULE_EN;
31283221
31293222 ctrl |= !!arg->bf3x3_wgt0_sel << 8 |
....@@ -3139,63 +3232,63 @@
31393232 value &= ~ISP3X_CNR_GLOBAL_GAIN_ALPHA_MAX;
31403233 value |= BIT(15);
31413234 }
3142
- isp3_param_write(params_vdev, ctrl, ISP3X_CNR_CTRL);
3143
- isp3_param_write(params_vdev, value, ISP3X_CNR_EXGAIN);
3235
+ isp3_param_write(params_vdev, ctrl, ISP3X_CNR_CTRL, id);
3236
+ isp3_param_write(params_vdev, value, ISP3X_CNR_EXGAIN, id);
31443237
31453238 value = ISP_PACK_2SHORT(arg->thumb_sigma_c, arg->thumb_sigma_y);
3146
- isp3_param_write(params_vdev, value, ISP32_CNR_THUMB1);
3239
+ isp3_param_write(params_vdev, value, ISP32_CNR_THUMB1, id);
31473240
31483241 value = arg->thumb_bf_ratio & 0x7ff;
3149
- isp3_param_write(params_vdev, value, ISP32_CNR_THUMB_BF_RATIO);
3242
+ isp3_param_write(params_vdev, value, ISP32_CNR_THUMB_BF_RATIO, id);
31503243
31513244 value = ISP_PACK_4BYTE(arg->lbf1x7_weit_d0, arg->lbf1x7_weit_d1,
31523245 arg->lbf1x7_weit_d2, arg->lbf1x7_weit_d3);
3153
- isp3_param_write(params_vdev, value, ISP32_CNR_LBF_WEITD);
3246
+ isp3_param_write(params_vdev, value, ISP32_CNR_LBF_WEITD, id);
31543247
31553248 value = (arg->wgt_slope & 0x3ff) << 20 | (arg->exp_shift & 0x3f) << 12 |
31563249 arg->iir_strength << 4 | (arg->iir_uvgain & 0xf);
3157
- isp3_param_write(params_vdev, value, ISP32_CNR_IIR_PARA1);
3250
+ isp3_param_write(params_vdev, value, ISP32_CNR_IIR_PARA1, id);
31583251
31593252 value = ISP_PACK_4BYTE(arg->chroma_ghost, arg->iir_uv_clip, 0, 0);
3160
- isp3_param_write(params_vdev, value, ISP32_CNR_IIR_PARA2);
3253
+ isp3_param_write(params_vdev, value, ISP32_CNR_IIR_PARA2, id);
31613254
31623255 value = ISP_PACK_4BYTE(arg->gaus_coe[0], arg->gaus_coe[1],
31633256 arg->gaus_coe[2], arg->gaus_coe[3]);
3164
- isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_COE1);
3257
+ isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_COE1, id);
31653258
31663259 value = ISP_PACK_4BYTE(arg->gaus_coe[4], arg->gaus_coe[5], 0, 0);
3167
- isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_COE2);
3260
+ isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_COE2, id);
31683261
31693262 value = (arg->global_alpha & 0x7ff) << 20 | arg->bf_wgt_clip << 12 |
31703263 (arg->gaus_ratio & 0x7ff);
3171
- isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_RATIO);
3264
+ isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_RATIO, id);
31723265
31733266 value = arg->bf_ratio << 24 | (arg->sigma_r & 0x3fff) << 8 |
31743267 (arg->uv_gain & 0x7f);
3175
- isp3_param_write(params_vdev, value, ISP32_CNR_BF_PARA1);
3268
+ isp3_param_write(params_vdev, value, ISP32_CNR_BF_PARA1, id);
31763269
31773270 value = (arg->adj_ratio & 0x7fff) << 16 | (arg->adj_offset & 0x1ff);
3178
- isp3_param_write(params_vdev, value, ISP32_CNR_BF_PARA2);
3271
+ isp3_param_write(params_vdev, value, ISP32_CNR_BF_PARA2, id);
31793272
31803273 for (i = 0; i < ISP32_CNR_SIGMA_Y_NUM / 4; i++) {
31813274 value = ISP_PACK_4BYTE(arg->sigma_y[i * 4], arg->sigma_y[i * 4 + 1],
31823275 arg->sigma_y[i * 4 + 2], arg->sigma_y[i * 4 + 3]);
3183
- isp3_param_write(params_vdev, value, ISP32_CNR_SIGMA0 + i * 4);
3276
+ isp3_param_write(params_vdev, value, ISP32_CNR_SIGMA0 + i * 4, id);
31843277 }
31853278 value = arg->sigma_y[i * 4];
3186
- isp3_param_write(params_vdev, value, ISP32_CNR_SIGMA0 + i * 4);
3279
+ isp3_param_write(params_vdev, value, ISP32_CNR_SIGMA0 + i * 4, id);
31873280
31883281 value = (arg->iir_gain_alpha & 0xf) << 8 | arg->iir_global_gain;
3189
- isp3_param_write(params_vdev, value, ISP32_CNR_IIR_GLOBAL_GAIN);
3282
+ isp3_param_write(params_vdev, value, ISP32_CNR_IIR_GLOBAL_GAIN, id);
31903283 }
31913284
31923285 static void
3193
-isp_cnr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3286
+isp_cnr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
31943287 {
31953288 u32 cnr_ctrl;
31963289 bool real_en;
31973290
3198
- cnr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_CNR_CTRL);
3291
+ cnr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_CNR_CTRL, id);
31993292 real_en = !!(cnr_ctrl & ISP32_MODULE_EN);
32003293 if ((en && real_en) || (!en && !real_en))
32013294 return;
....@@ -3203,21 +3296,21 @@
32033296 if (en) {
32043297 cnr_ctrl |= ISP32_MODULE_EN;
32053298 isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1,
3206
- ISP3X_CNR_FST_FRAME);
3299
+ ISP3X_CNR_FST_FRAME, id);
32073300 } else {
32083301 cnr_ctrl &= ~ISP32_MODULE_EN;
32093302 }
32103303
3211
- isp3_param_write(params_vdev, cnr_ctrl, ISP3X_CNR_CTRL);
3304
+ isp3_param_write(params_vdev, cnr_ctrl, ISP3X_CNR_CTRL, id);
32123305 }
32133306
32143307 static void
32153308 isp_sharp_config(struct rkisp_isp_params_vdev *params_vdev,
3216
- const struct isp32_sharp_cfg *arg)
3309
+ const struct isp32_sharp_cfg *arg, u32 id)
32173310 {
32183311 u32 i, value;
32193312
3220
- value = isp3_param_read(params_vdev, ISP3X_SHARP_EN);
3313
+ value = isp3_param_read(params_vdev, ISP3X_SHARP_EN, id);
32213314 value &= ISP32_MODULE_EN;
32223315
32233316 value |= !!arg->bypass << 1 |
....@@ -3229,11 +3322,11 @@
32293322 else
32303323 value |= !!arg->clip_hf_mode << 6 |
32313324 !!arg->add_mode << 7;
3232
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EN);
3325
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EN, id);
32333326
32343327 value = ISP_PACK_4BYTE(arg->pbf_ratio, arg->gaus_ratio,
32353328 arg->bf_ratio, arg->sharp_ratio);
3236
- isp3_param_write(params_vdev, value, ISP3X_SHARP_RATIO);
3329
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_RATIO, id);
32373330
32383331 value = (arg->luma_dx[6] & 0x0F) << 24 |
32393332 (arg->luma_dx[5] & 0x0F) << 20 |
....@@ -3242,217 +3335,222 @@
32423335 (arg->luma_dx[2] & 0x0F) << 8 |
32433336 (arg->luma_dx[1] & 0x0F) << 4 |
32443337 (arg->luma_dx[0] & 0x0F);
3245
- isp3_param_write(params_vdev, value, ISP3X_SHARP_LUMA_DX);
3338
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_LUMA_DX, id);
32463339
32473340 value = (arg->pbf_sigma_inv[2] & 0x3FF) << 20 |
32483341 (arg->pbf_sigma_inv[1] & 0x3FF) << 10 |
32493342 (arg->pbf_sigma_inv[0] & 0x3FF);
3250
- isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_0);
3343
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_0, id);
32513344
32523345 value = (arg->pbf_sigma_inv[5] & 0x3FF) << 20 |
32533346 (arg->pbf_sigma_inv[4] & 0x3FF) << 10 |
32543347 (arg->pbf_sigma_inv[3] & 0x3FF);
3255
- isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_1);
3348
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_1, id);
32563349
32573350 value = (arg->pbf_sigma_inv[7] & 0x3FF) << 10 |
32583351 (arg->pbf_sigma_inv[6] & 0x3FF);
3259
- isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_2);
3352
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_2, id);
32603353
32613354 value = (arg->bf_sigma_inv[2] & 0x3FF) << 20 |
32623355 (arg->bf_sigma_inv[1] & 0x3FF) << 10 |
32633356 (arg->bf_sigma_inv[0] & 0x3FF);
3264
- isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_0);
3357
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_0, id);
32653358
32663359 value = (arg->bf_sigma_inv[5] & 0x3FF) << 20 |
32673360 (arg->bf_sigma_inv[4] & 0x3FF) << 10 |
32683361 (arg->bf_sigma_inv[3] & 0x3FF);
3269
- isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_1);
3362
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_1, id);
32703363
32713364 value = (arg->bf_sigma_inv[7] & 0x3FF) << 10 |
32723365 (arg->bf_sigma_inv[6] & 0x3FF);
3273
- isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_2);
3366
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_2, id);
32743367
32753368 value = (arg->bf_sigma_shift & 0x0F) << 4 |
32763369 (arg->pbf_sigma_shift & 0x0F);
3277
- isp3_param_write(params_vdev, value, ISP3X_SHARP_SIGMA_SHIFT);
3370
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_SIGMA_SHIFT, id);
32783371
32793372 value = (arg->clip_hf[2] & 0x3FF) << 20 |
32803373 (arg->clip_hf[1] & 0x3FF) << 10 |
32813374 (arg->clip_hf[0] & 0x3FF);
3282
- isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_0);
3375
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_0, id);
32833376
32843377 value = (arg->clip_hf[5] & 0x3FF) << 20 |
32853378 (arg->clip_hf[4] & 0x3FF) << 10 |
32863379 (arg->clip_hf[3] & 0x3FF);
3287
- isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_1);
3380
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_1, id);
32883381
32893382 value = (arg->clip_hf[7] & 0x3FF) << 10 |
32903383 (arg->clip_hf[6] & 0x3FF);
3291
- isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_2);
3384
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_2, id);
32923385
32933386 value = ISP_PACK_4BYTE(arg->pbf_coef0, arg->pbf_coef1, arg->pbf_coef2, 0);
3294
- isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_COEF);
3387
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_COEF, id);
32953388
32963389 value = ISP_PACK_4BYTE(arg->bf_coef0, arg->bf_coef1, arg->bf_coef2, 0);
3297
- isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_COEF);
3390
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_COEF, id);
32983391
32993392 value = ISP_PACK_4BYTE(arg->gaus_coef[0], arg->gaus_coef[1], arg->gaus_coef[2], 0);
3300
- isp3_param_write(params_vdev, value, ISP3X_SHARP_GAUS_COEF0);
3393
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_GAUS_COEF0, id);
33013394
33023395 value = ISP_PACK_4BYTE(arg->gaus_coef[3], arg->gaus_coef[4], arg->gaus_coef[5], 0);
3303
- isp3_param_write(params_vdev, value, ISP3X_SHARP_GAUS_COEF1);
3396
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_GAUS_COEF1, id);
33043397
33053398 value = arg->local_gainscale << 24 | (arg->global_gain_alpha & 0xf) << 16 |
33063399 (arg->global_gain & 0x3ff);
3307
- isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN);
3400
+ isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN, id);
33083401
33093402 for (i = 0; i < ISP32_SHARP_GAIN_ADJ_NUM / 2; i++) {
33103403 value = ISP_PACK_2SHORT(arg->gain_adj[i * 2], arg->gain_adj[i * 2 + 1]);
3311
- isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_ADJUST0 + i * 4);
3404
+ isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_ADJUST0 + i * 4, id);
33123405 }
33133406
33143407 value = ISP_PACK_2SHORT(arg->center_wid, arg->center_het);
3315
- isp3_param_write(params_vdev, value, ISP32_SHARP_CENTER);
3408
+ isp3_param_write(params_vdev, value, ISP32_SHARP_CENTER, id);
33163409
33173410 for (i = 0; i < ISP32_SHARP_STRENGTH_NUM / 4; i++) {
33183411 value = ISP_PACK_4BYTE(arg->strength[i * 4], arg->strength[i * 4 + 1],
33193412 arg->strength[i * 4 + 2], arg->strength[i * 4 + 3]);
3320
- isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_DIS_STRENGTH0 + i * 4);
3413
+ isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_DIS_STRENGTH0 + i * 4, id);
33213414 }
33223415 value = ISP_PACK_4BYTE(arg->strength[i * 4], arg->strength[i * 4 + 1], 0, 0);
3323
- isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_DIS_STRENGTH0 + i * 4);
3416
+ isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_DIS_STRENGTH0 + i * 4, id);
33243417
33253418 if (params_vdev->dev->isp_ver == ISP_V32) {
33263419 value = (arg->noise_strength & 0x3fff) << 16 | (arg->enhance_bit & 0xf) << 12 |
33273420 (arg->noise_sigma & 0x3ff);
3328
- isp3_param_write(params_vdev, value, ISP32_SHARP_TEXTURE);
3421
+ isp3_param_write(params_vdev, value, ISP32_SHARP_TEXTURE, id);
33293422 } else {
33303423 value = (arg->ehf_th[2] & 0x3FF) << 20 |
33313424 (arg->ehf_th[1] & 0x3FF) << 10 |
33323425 (arg->ehf_th[0] & 0x3FF);
3333
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_0);
3426
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_0, id);
33343427 value = (arg->ehf_th[5] & 0x3FF) << 20 |
33353428 (arg->ehf_th[4] & 0x3FF) << 10 |
33363429 (arg->ehf_th[3] & 0x3FF);
3337
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_1);
3430
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_1, id);
33383431 value = (arg->ehf_th[7] & 0x3FF) << 10 |
33393432 (arg->ehf_th[6] & 0x3FF);
3340
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_2);
3433
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_2, id);
33413434
33423435 value = (arg->clip_neg[2] & 0x3FF) << 20 |
33433436 (arg->clip_neg[1] & 0x3FF) << 10 |
33443437 (arg->clip_neg[0] & 0x3FF);
3345
- isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_0);
3438
+ isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_0, id);
33463439 value = (arg->clip_neg[5] & 0x3FF) << 20 |
33473440 (arg->clip_neg[4] & 0x3FF) << 10 |
33483441 (arg->clip_neg[3] & 0x3FF);
3349
- isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_1);
3442
+ isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_1, id);
33503443 value = (arg->clip_neg[7] & 0x3FF) << 10 |
33513444 (arg->clip_neg[6] & 0x3FF);
3352
- isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_2);
3445
+ isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_2, id);
33533446 }
33543447 }
33553448
33563449 static void
3357
-isp_sharp_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3450
+isp_sharp_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
33583451 {
33593452 u32 value;
33603453
3361
- value = isp3_param_read_cache(params_vdev, ISP3X_SHARP_EN);
3454
+ value = isp3_param_read_cache(params_vdev, ISP3X_SHARP_EN, id);
3455
+ if ((en && (value & ISP32_MODULE_EN)) ||
3456
+ (!en && !(value & ISP32_MODULE_EN)))
3457
+ return;
3458
+
33623459 value &= ~ISP32_MODULE_EN;
3363
-
3364
- if (en)
3460
+ if (en) {
3461
+ isp3_param_set_bits(params_vdev,
3462
+ ISP3X_ISP_CTRL1, ISP32_SHP_FST_FRAME, id);
33653463 value |= ISP32_MODULE_EN;
3366
-
3367
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EN);
3464
+ }
3465
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EN, id);
33683466 }
33693467
33703468 static void
33713469 isp_baynr_config(struct rkisp_isp_params_vdev *params_vdev,
3372
- const struct isp32_baynr_cfg *arg)
3470
+ const struct isp32_baynr_cfg *arg, u32 id)
33733471 {
33743472 u32 i, value;
33753473
3376
- value = isp3_param_read(params_vdev, ISP3X_BAYNR_CTRL);
3474
+ value = isp3_param_read(params_vdev, ISP3X_BAYNR_CTRL, id);
33773475 value &= ISP32_MODULE_EN;
33783476
33793477 value |= !!arg->bay3d_gain_en << 16 |
33803478 (arg->lg2_mode & 0x3) << 12 |
33813479 !!arg->gauss_en << 8 |
33823480 !!arg->log_bypass << 4;
3383
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL);
3481
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL, id);
33843482
33853483 value = ISP_PACK_2SHORT(arg->dgain0, arg->dgain1);
3386
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_DGAIN0);
3484
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_DGAIN0, id);
33873485
3388
- isp3_param_write(params_vdev, arg->dgain2, ISP3X_BAYNR_DGAIN1);
3389
- isp3_param_write(params_vdev, arg->pix_diff, ISP3X_BAYNR_PIXDIFF);
3486
+ isp3_param_write(params_vdev, arg->dgain2, ISP3X_BAYNR_DGAIN1, id);
3487
+ isp3_param_write(params_vdev, arg->pix_diff, ISP3X_BAYNR_PIXDIFF, id);
33903488
33913489 value = ISP_PACK_2SHORT(arg->softthld, arg->diff_thld);
3392
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_THLD);
3490
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_THLD, id);
33933491
33943492 value = ISP_PACK_2SHORT(arg->reg_w1, arg->bltflt_streng);
3395
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_W1_STRENG);
3493
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_W1_STRENG, id);
33963494
33973495 for (i = 0; i < ISP32_BAYNR_XY_NUM / 2; i++) {
33983496 value = ISP_PACK_2SHORT(arg->sigma_x[2 * i], arg->sigma_x[2 * i + 1]);
3399
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_SIGMAX01 + 4 * i);
3497
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_SIGMAX01 + 4 * i, id);
34003498 }
34013499
34023500 for (i = 0; i < ISP32_BAYNR_XY_NUM / 2; i++) {
34033501 value = ISP_PACK_2SHORT(arg->sigma_y[2 * i], arg->sigma_y[2 * i + 1]);
3404
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_SIGMAY01 + 4 * i);
3502
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_SIGMAY01 + 4 * i, id);
34053503 }
34063504
34073505 value = (arg->weit_d2 & 0x3FF) << 20 |
34083506 (arg->weit_d1 & 0x3FF) << 10 |
34093507 (arg->weit_d0 & 0x3FF);
3410
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_WRIT_D);
3508
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_WRIT_D, id);
34113509
34123510 value = ISP_PACK_2SHORT(arg->lg2_off, arg->lg2_lgoff);
3413
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_LG_OFF);
3511
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_LG_OFF, id);
34143512
34153513 value = arg->dat_max & 0xfffff;
3416
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_DAT_MAX);
3514
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_DAT_MAX, id);
34173515
34183516 value = ISP_PACK_2SHORT(arg->rgain_off, arg->bgain_off);
3419
- isp3_param_write(params_vdev, value, ISP32_BAYNR_SIGOFF);
3517
+ isp3_param_write(params_vdev, value, ISP32_BAYNR_SIGOFF, id);
34203518
34213519 for (i = 0; i < ISP32_BAYNR_GAIN_NUM / 4; i++) {
34223520 value = ISP_PACK_4BYTE(arg->gain_x[i * 4], arg->gain_x[i * 4 + 1],
34233521 arg->gain_x[i * 4 + 2], arg->gain_x[i * 4 + 3]);
3424
- isp3_param_write(params_vdev, value, ISP32_BAYNR_GAINX03 + i * 4);
3522
+ isp3_param_write(params_vdev, value, ISP32_BAYNR_GAINX03 + i * 4, id);
34253523 }
34263524
34273525 for (i = 0; i < ISP32_BAYNR_GAIN_NUM / 2; i++) {
34283526 value = ISP_PACK_2SHORT(arg->gain_y[i * 2], arg->gain_y[i * 2 + 1]);
3429
- isp3_param_write(params_vdev, value, ISP32_BAYNR_GAINY01 + i * 4);
3527
+ isp3_param_write(params_vdev, value, ISP32_BAYNR_GAINY01 + i * 4, id);
34303528 }
34313529 }
34323530
34333531 static void
3434
-isp_baynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3532
+isp_baynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
34353533 {
34363534 u32 value;
34373535
3438
- value = isp3_param_read_cache(params_vdev, ISP3X_BAYNR_CTRL);
3536
+ value = isp3_param_read_cache(params_vdev, ISP3X_BAYNR_CTRL, id);
34393537 value &= ~ISP32_MODULE_EN;
34403538
34413539 if (en)
34423540 value |= ISP32_MODULE_EN;
34433541
3444
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL);
3542
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL, id);
34453543 }
34463544
34473545 static void
34483546 isp_bay3d_config(struct rkisp_isp_params_vdev *params_vdev,
3449
- const struct isp32_bay3d_cfg *arg)
3547
+ const struct isp32_bay3d_cfg *arg, u32 id)
34503548 {
34513549 struct rkisp_isp_params_val_v32 *priv_val;
34523550 u32 i, value;
34533551
34543552 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
3455
- value = isp3_param_read(params_vdev, ISP3X_BAY3D_CTRL);
3553
+ value = isp3_param_read(params_vdev, ISP3X_BAY3D_CTRL, id);
34563554 value &= (ISP32_MODULE_EN | ISP32_BAY3D_BWSAVING(1));
34573555
34583556 value |= !!arg->loswitch_protect << 12 |
....@@ -3478,7 +3576,7 @@
34783576 "bwsaving to %d no support change for bay3d en\n",
34793577 arg->bwsaving_en);
34803578 }
3481
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_CTRL);
3579
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_CTRL, id);
34823580
34833581 value = !!arg->wgtmix_opt_en << 12 |
34843582 !!arg->curds_high_en << 8 |
....@@ -3500,72 +3598,72 @@
35003598 value &= ~(BIT(3) | BIT(4));
35013599 else if (!(value & (BIT(3) | BIT(4))))
35023600 value |= BIT(3);
3503
- isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1);
3601
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1, id);
35043602
35053603 value = ISP_PACK_2SHORT(arg->softwgt, arg->hidif_th);
3506
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_KALRATIO);
3604
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_KALRATIO, id);
35073605
3508
- isp3_param_write(params_vdev, arg->glbpk2, ISP3X_BAY3D_GLBPK2);
3606
+ isp3_param_write(params_vdev, arg->glbpk2, ISP3X_BAY3D_GLBPK2, id);
35093607
35103608 value = ISP_PACK_2SHORT(arg->wgtlmt, arg->wgtratio);
3511
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_WGTLMT);
3609
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_WGTLMT, id);
35123610
35133611 for (i = 0; i < ISP32_BAY3D_XY_NUM / 2; i++) {
35143612 value = ISP_PACK_2SHORT(arg->sig0_x[2 * i],
35153613 arg->sig0_x[2 * i + 1]);
3516
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_X0 + 4 * i);
3614
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_X0 + 4 * i, id);
35173615
35183616 value = ISP_PACK_2SHORT(arg->sig1_x[2 * i],
35193617 arg->sig1_x[2 * i + 1]);
3520
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_X0 + 4 * i);
3618
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_X0 + 4 * i, id);
35213619 }
35223620
35233621 for (i = 0; i < ISP32_BAY3D_XY_NUM / 2; i++) {
35243622 value = ISP_PACK_2SHORT(arg->sig0_y[2 * i],
35253623 arg->sig0_y[2 * i + 1]);
3526
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_Y0 + 4 * i);
3624
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_Y0 + 4 * i, id);
35273625
35283626 value = ISP_PACK_2SHORT(arg->sig1_y[2 * i],
35293627 arg->sig1_y[2 * i + 1]);
3530
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_Y0 + 4 * i);
3628
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_Y0 + 4 * i, id);
35313629
35323630 value = ISP_PACK_2SHORT(arg->sig2_y[2 * i],
35333631 arg->sig2_y[2 * i + 1]);
3534
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG2_Y0 + 4 * i);
3632
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG2_Y0 + 4 * i, id);
35353633 }
35363634
35373635 if (params_vdev->dev->isp_ver == ISP_V32_L) {
35383636 value = ISP_PACK_2SHORT(0, arg->wgtmin);
3539
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_LODIF_STAT1);
3637
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_LODIF_STAT1, id);
35403638 }
35413639
35423640 value = ISP_PACK_2SHORT(arg->hisigrat0, arg->hisigrat1);
3543
- isp3_param_write(params_vdev, value, ISP32_BAY3D_HISIGRAT);
3641
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_HISIGRAT, id);
35443642
35453643 value = ISP_PACK_2SHORT(arg->hisigoff0, arg->hisigoff1);
3546
- isp3_param_write(params_vdev, value, ISP32_BAY3D_HISIGOFF);
3644
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_HISIGOFF, id);
35473645
35483646 value = ISP_PACK_2SHORT(arg->losigoff, arg->losigrat);
3549
- isp3_param_write(params_vdev, value, ISP32_BAY3D_LOSIG);
3647
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_LOSIG, id);
35503648
35513649 value = ISP_PACK_2SHORT(arg->rgain_off, arg->bgain_off);
3552
- isp3_param_write(params_vdev, value, ISP32_BAY3D_SIGPK);
3650
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_SIGPK, id);
35533651
35543652 value = ISP_PACK_4BYTE(arg->siggaus0, arg->siggaus1, arg->siggaus2, 0);
35553653 if (params_vdev->dev->isp_ver == ISP_V32)
35563654 value |= (arg->siggaus3 << 24);
3557
- isp3_param_write(params_vdev, value, ISP32_BAY3D_SIGGAUS);
3655
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_SIGGAUS, id);
35583656 }
35593657
35603658 static void
3561
-isp_bay3d_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3659
+isp_bay3d_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
35623660 {
35633661 struct rkisp_device *ispdev = params_vdev->dev;
35643662 struct rkisp_isp_params_val_v32 *priv_val;
35653663 u32 value, bay3d_ctrl;
35663664
35673665 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
3568
- bay3d_ctrl = isp3_param_read_cache(params_vdev, ISP3X_BAY3D_CTRL);
3666
+ bay3d_ctrl = isp3_param_read_cache(params_vdev, ISP3X_BAY3D_CTRL, id);
35693667 if ((en && (bay3d_ctrl & ISP32_MODULE_EN)) ||
35703668 (!en && !(bay3d_ctrl & ISP32_MODULE_EN)))
35713669 return;
....@@ -3576,85 +3674,85 @@
35763674 return;
35773675 }
35783676
3579
- value = priv_val->buf_3dnr_iir.size;
3580
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_SIZE);
3581
- value = priv_val->buf_3dnr_iir.dma_addr;
3582
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_BASE);
3583
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_RD_BASE);
3677
+ value = priv_val->bay3d_iir_size;
3678
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_SIZE, id);
3679
+ value = priv_val->buf_3dnr_iir.dma_addr + value * id;
3680
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_BASE, id);
3681
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_RD_BASE, id);
35843682
3585
- value = priv_val->buf_3dnr_ds.size;
3586
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_SIZE);
3587
- value = priv_val->buf_3dnr_ds.dma_addr;
3588
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_BASE);
3589
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_RD_BASE);
3683
+ value = priv_val->bay3d_ds_size;
3684
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_SIZE, id);
3685
+ value = priv_val->buf_3dnr_ds.dma_addr + value * id;
3686
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_BASE, id);
3687
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_RD_BASE, id);
35903688
35913689 value = priv_val->is_sram ?
35923690 ispdev->hw_dev->sram.dma_addr : priv_val->buf_3dnr_cur.dma_addr;
3593
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_BASE);
3594
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_RD_BASE);
3691
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_BASE, id);
3692
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_RD_BASE, id);
35953693 value = priv_val->bay3d_cur_size;
3596
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_SIZE);
3597
- isp3_param_write(params_vdev, value, ISP32_MI_BAY3D_CUR_RD_SIZE);
3694
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_SIZE, id);
3695
+ isp3_param_write(params_vdev, value, ISP32_MI_BAY3D_CUR_RD_SIZE, id);
35983696 value = priv_val->bay3d_cur_wsize;
3599
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_LENGTH);
3600
- isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_RD_LENGTH);
3697
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_LENGTH, id);
3698
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_RD_LENGTH, id);
36013699 value = priv_val->bay3d_cur_wrap_line << 16 |
36023700 (ispdev->isp_ver == ISP_V32 ? 28 : 20);
3603
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_MI_ST);
3701
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_MI_ST, id);
36043702
36053703 /* mibuf_size for fifo_cur_full, set to max: (3072 - 2) / 2, 2 align */
36063704 if (ispdev->isp_ver == ISP_V32) {
36073705 value = 0x5fe << 16;
3608
- isp3_param_set_bits(params_vdev, ISP3X_BAY3D_IN_IRQ_LINECNT, value);
3706
+ isp3_param_set_bits(params_vdev, ISP3X_BAY3D_IN_IRQ_LINECNT, value, id);
36093707 }
36103708
3611
- value = isp3_param_read_cache(params_vdev, ISP32_BAY3D_CTRL1);
3709
+ value = isp3_param_read_cache(params_vdev, ISP32_BAY3D_CTRL1, id);
36123710 if (priv_val->is_lo8x8) {
36133711 if (value & (BIT(3) | BIT(4))) {
36143712 value &= ~(BIT(3) | BIT(4));
3615
- isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1);
3713
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1, id);
36163714 }
36173715 } else if (!(value & (BIT(3) | BIT(4)))) {
36183716 value |= BIT(3);
3619
- isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1);
3717
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1, id);
36203718 }
36213719 bay3d_ctrl |= ISP32_MODULE_EN;
3622
- isp3_param_write(params_vdev, bay3d_ctrl, ISP3X_BAY3D_CTRL);
3720
+ isp3_param_write(params_vdev, bay3d_ctrl, ISP3X_BAY3D_CTRL, id);
36233721
36243722 value = ISP3X_BAY3D_IIR_WR_AUTO_UPD | ISP3X_BAY3D_CUR_WR_AUTO_UPD |
36253723 ISP3X_BAY3D_DS_WR_AUTO_UPD | ISP3X_BAY3D_IIRSELF_UPD |
36263724 ISP3X_BAY3D_CURSELF_UPD | ISP3X_BAY3D_DSSELF_UPD |
36273725 ISP3X_BAY3D_RDSELF_UPD;
3628
- isp3_param_set_bits(params_vdev, MI_WR_CTRL2, value);
3726
+ isp3_param_set_bits(params_vdev, MI_WR_CTRL2, value, id);
36293727
3630
- isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1, ISP3X_RAW3D_FST_FRAME);
3728
+ isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1, ISP3X_RAW3D_FST_FRAME, id);
36313729 } else {
36323730 bay3d_ctrl &= ~ISP32_MODULE_EN;
3633
- isp3_param_write(params_vdev, bay3d_ctrl, ISP3X_BAY3D_CTRL);
3634
- isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(4));
3731
+ isp3_param_write(params_vdev, bay3d_ctrl, ISP3X_BAY3D_CTRL, id);
3732
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(4), id);
36353733 }
36363734 }
36373735
36383736 static void
36393737 isp_gain_config(struct rkisp_isp_params_vdev *params_vdev,
3640
- const struct isp3x_gain_cfg *arg)
3738
+ const struct isp3x_gain_cfg *arg, u32 id)
36413739 {
36423740 u32 val;
36433741
36443742 val = arg->g0 & 0x3ffff;
3645
- isp3_param_write(params_vdev, val, ISP3X_GAIN_G0);
3743
+ isp3_param_write(params_vdev, val, ISP3X_GAIN_G0, id);
36463744 val = ISP_PACK_2SHORT(arg->g1, arg->g2);
3647
- isp3_param_write(params_vdev, val, ISP3X_GAIN_G1_G2);
3745
+ isp3_param_write(params_vdev, val, ISP3X_GAIN_G1_G2, id);
36483746 }
36493747
36503748 static void
3651
-isp_gain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3749
+isp_gain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
36523750 {
36533751 struct rkisp_isp_params_val_v32 *priv_val =
36543752 (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
36553753 u32 val = 0;
36563754
3657
- val = isp3_param_read_cache(params_vdev, ISP3X_GAIN_CTRL);
3755
+ val = isp3_param_read_cache(params_vdev, ISP3X_GAIN_CTRL, id);
36583756 if (en) {
36593757 if (params_vdev->dev->isp_ver == ISP_V32) {
36603758 val |= priv_val->lut3d_en << 20 |
....@@ -3662,7 +3760,7 @@
36623760 priv_val->drc_en << 12 |
36633761 priv_val->lsc_en << 8 |
36643762 priv_val->bay3d_en << 4;
3665
- if (isp3_param_read(params_vdev, ISP3X_HDRMGE_CTRL) & BIT(0))
3763
+ if (isp3_param_read(params_vdev, ISP3X_HDRMGE_CTRL, id) & BIT(0))
36663764 val |= BIT(1);
36673765 if (val)
36683766 val |= ISP32_MODULE_EN;
....@@ -3670,12 +3768,12 @@
36703768 val |= ISP32_MODULE_EN;
36713769 }
36723770 }
3673
- isp3_param_write(params_vdev, val, ISP3X_GAIN_CTRL);
3771
+ isp3_param_write(params_vdev, val, ISP3X_GAIN_CTRL, id);
36743772 }
36753773
36763774 static void
36773775 isp_cac_config(struct rkisp_isp_params_vdev *params_vdev,
3678
- const struct isp32_cac_cfg *arg)
3776
+ const struct isp32_cac_cfg *arg, u32 id)
36793777 {
36803778 struct rkisp_device *dev = params_vdev->dev;
36813779 struct rkisp_isp_params_val_v32 *priv_val;
....@@ -3684,7 +3782,7 @@
36843782
36853783 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
36863784
3687
- ctrl = isp3_param_read(params_vdev, ISP3X_CAC_CTRL);
3785
+ ctrl = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
36883786 ctrl &= ISP3X_CAC_EN;
36893787 ctrl |= !!arg->bypass_en << 1 | !!arg->center_en << 3 |
36903788 (arg->clip_g_mode & 0x3) << 5 | !!arg->edge_detect_en << 7 |
....@@ -3692,38 +3790,38 @@
36923790
36933791 val = (arg->psf_sft_bit & 0xff) |
36943792 (arg->cfg_num & 0x7ff) << 8;
3695
- isp3_param_write(params_vdev, val, ISP3X_CAC_PSF_PARA);
3793
+ isp3_param_write(params_vdev, val, ISP3X_CAC_PSF_PARA, id);
36963794
36973795 val = ISP_PACK_2SHORT(arg->center_width, arg->center_height);
3698
- isp3_param_write(params_vdev, val, ISP3X_CAC_STRENGTH_CENTER);
3796
+ isp3_param_write(params_vdev, val, ISP3X_CAC_STRENGTH_CENTER, id);
36993797
37003798 for (i = 0; i < ISP32_CAC_STRENGTH_NUM / 2; i++) {
37013799 val = ISP_PACK_2SHORT(arg->strength[2 * i], arg->strength[2 * i + 1]);
3702
- isp3_param_write(params_vdev, val, ISP3X_CAC_STRENGTH0 + i * 4);
3800
+ isp3_param_write(params_vdev, val, ISP3X_CAC_STRENGTH0 + i * 4, id);
37033801 }
37043802
37053803 val = (arg->flat_thed_r & 0x1f) << 8 | (arg->flat_thed_b & 0x1f);
3706
- isp3_param_write(params_vdev, val, ISP32_CAC_FLAT_THED);
3804
+ isp3_param_write(params_vdev, val, ISP32_CAC_FLAT_THED, id);
37073805
37083806 val = ISP_PACK_2SHORT(arg->offset_b, arg->offset_r);
3709
- isp3_param_write(params_vdev, val, ISP32_CAC_OFFSET);
3807
+ isp3_param_write(params_vdev, val, ISP32_CAC_OFFSET, id);
37103808
37113809 val = arg->expo_thed_b & 0x1fffff;
3712
- isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_THED_B);
3810
+ isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_THED_B, id);
37133811
37143812 val = arg->expo_thed_r & 0x1fffff;
3715
- isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_THED_R);
3813
+ isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_THED_R, id);
37163814
37173815 val = arg->expo_adj_b & 0xfffff;
3718
- isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_ADJ_B);
3816
+ isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_ADJ_B, id);
37193817
37203818 val = arg->expo_adj_r & 0xfffff;
3721
- isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_ADJ_R);
3819
+ isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_ADJ_R, id);
37223820
37233821 for (i = 0; i < ISP32_MESH_BUF_NUM; i++) {
3724
- if (!priv_val->buf_cac[i].mem_priv)
3822
+ if (!priv_val->buf_cac[id][i].mem_priv)
37253823 continue;
3726
- if (arg->buf_fd == priv_val->buf_cac[i].dma_fd)
3824
+ if (arg->buf_fd == priv_val->buf_cac[id][i].dma_fd)
37273825 break;
37283826 }
37293827
....@@ -3732,44 +3830,53 @@
37323830 return;
37333831 }
37343832
3735
- if (!priv_val->buf_cac[i].vaddr) {
3833
+ if (!priv_val->buf_cac[id][i].vaddr) {
37363834 dev_err(dev->dev, "no cac buffer allocated\n");
37373835 return;
37383836 }
37393837
3740
- val = priv_val->buf_cac_idx;
3741
- head = (struct isp2x_mesh_head *)priv_val->buf_cac[val].vaddr;
3838
+ val = priv_val->buf_cac_idx[id];
3839
+ head = (struct isp2x_mesh_head *)priv_val->buf_cac[id][val].vaddr;
37423840 head->stat = MESH_BUF_INIT;
37433841
3744
- head = (struct isp2x_mesh_head *)priv_val->buf_cac[i].vaddr;
3842
+ head = (struct isp2x_mesh_head *)priv_val->buf_cac[id][i].vaddr;
37453843 head->stat = MESH_BUF_CHIPINUSE;
3746
- priv_val->buf_cac_idx = i;
3747
- rkisp_prepare_buffer(dev, &priv_val->buf_cac[i]);
3748
- val = priv_val->buf_cac[i].dma_addr + head->data_oft;
3749
- isp3_param_write(params_vdev, val, ISP3X_MI_LUT_CAC_RD_BASE);
3750
- isp3_param_write(params_vdev, arg->hsize, ISP3X_MI_LUT_CAC_RD_H_WSIZE);
3751
- isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_CAC_RD_V_SIZE);
3844
+ priv_val->buf_cac_idx[id] = i;
3845
+ rkisp_prepare_buffer(dev, &priv_val->buf_cac[id][i]);
3846
+ val = priv_val->buf_cac[id][i].dma_addr + head->data_oft;
3847
+ isp3_param_write(params_vdev, val, ISP3X_MI_LUT_CAC_RD_BASE, id);
3848
+ isp3_param_write(params_vdev, arg->hsize, ISP3X_MI_LUT_CAC_RD_H_WSIZE, id);
3849
+ isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_CAC_RD_V_SIZE, id);
37523850 if (ctrl & ISP3X_CAC_EN)
37533851 ctrl |= ISP3X_CAC_LUT_EN | ISP32_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
3754
- isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL);
3852
+ isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL, id);
37553853 }
37563854
37573855 static void
3758
-isp_cac_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3856
+isp_cac_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
37593857 {
3858
+ struct rkisp_device *dev = params_vdev->dev;
3859
+ struct rkisp_isp_params_val_v32 *priv_val;
37603860 u32 val;
37613861
3762
- val = isp3_param_read(params_vdev, ISP3X_CAC_CTRL);
3862
+ priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
3863
+ val = priv_val->buf_cac_idx[id];
3864
+ if (en && !priv_val->buf_cac[id][val].vaddr) {
3865
+ dev_err(dev->dev, "no cac buffer allocated\n");
3866
+ return;
3867
+ }
3868
+
3869
+ val = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
37633870 val &= ~(ISP3X_CAC_EN | ISP3X_CAC_LUT_EN | ISP32_SELF_FORCE_UPD);
37643871 if (en)
37653872 val |= ISP3X_CAC_EN | ISP3X_CAC_LUT_EN |
37663873 ISP32_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
3767
- isp3_param_write(params_vdev, val, ISP3X_CAC_CTRL);
3874
+ isp3_param_write(params_vdev, val, ISP3X_CAC_CTRL, id);
37683875 }
37693876
37703877 static void
37713878 isp_csm_config(struct rkisp_isp_params_vdev *params_vdev,
3772
- const struct isp21_csm_cfg *arg)
3879
+ const struct isp21_csm_cfg *arg, u32 id)
37733880 {
37743881 u32 i, val;
37753882
....@@ -3780,19 +3887,19 @@
37803887 (arg->csm_coeff[i] & 0x1ff);
37813888 else
37823889 val = arg->csm_coeff[i] & 0x1ff;
3783
- isp3_param_write(params_vdev, val, ISP3X_ISP_CC_COEFF_0 + i * 4);
3890
+ isp3_param_write(params_vdev, val, ISP3X_ISP_CC_COEFF_0 + i * 4, id);
37843891 }
37853892
3786
- val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0);
3893
+ val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0, id);
37873894 val |= CIF_ISP_CTRL_ISP_CSM_Y_FULL_ENA | CIF_ISP_CTRL_ISP_CSM_C_FULL_ENA;
3788
- isp3_param_write(params_vdev, val, ISP3X_ISP_CTRL0);
3895
+ isp3_param_write(params_vdev, val, ISP3X_ISP_CTRL0, id);
37893896 }
37903897
37913898 static void
37923899 isp_cgc_config(struct rkisp_isp_params_vdev *params_vdev,
3793
- const struct isp21_cgc_cfg *arg)
3900
+ const struct isp21_cgc_cfg *arg, u32 id)
37943901 {
3795
- u32 val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0);
3902
+ u32 val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0, id);
37963903 u32 eff_ctrl, cproc_ctrl;
37973904
37983905 params_vdev->quantization = V4L2_QUANTIZATION_FULL_RANGE;
....@@ -3803,31 +3910,31 @@
38033910 }
38043911 if (arg->ratio_en)
38053912 val |= ISP3X_SW_CGC_RATIO_EN;
3806
- isp3_param_write(params_vdev, val, ISP3X_ISP_CTRL0);
3913
+ isp3_param_write(params_vdev, val, ISP3X_ISP_CTRL0, id);
38073914
3808
- cproc_ctrl = isp3_param_read(params_vdev, ISP3X_CPROC_CTRL);
3915
+ cproc_ctrl = isp3_param_read(params_vdev, ISP3X_CPROC_CTRL, id);
38093916 if (cproc_ctrl & CIF_C_PROC_CTR_ENABLE) {
38103917 val = CIF_C_PROC_YOUT_FULL | CIF_C_PROC_YIN_FULL | CIF_C_PROC_COUT_FULL;
38113918 if (arg->yuv_limit)
38123919 cproc_ctrl &= ~val;
38133920 else
38143921 cproc_ctrl |= val;
3815
- isp3_param_write(params_vdev, cproc_ctrl, ISP3X_CPROC_CTRL);
3922
+ isp3_param_write(params_vdev, cproc_ctrl, ISP3X_CPROC_CTRL, id);
38163923 }
38173924
3818
- eff_ctrl = isp3_param_read(params_vdev, ISP3X_IMG_EFF_CTRL);
3925
+ eff_ctrl = isp3_param_read(params_vdev, ISP3X_IMG_EFF_CTRL, id);
38193926 if (eff_ctrl & CIF_IMG_EFF_CTRL_ENABLE) {
38203927 if (arg->yuv_limit)
38213928 eff_ctrl &= ~CIF_IMG_EFF_CTRL_YCBCR_FULL;
38223929 else
38233930 eff_ctrl |= CIF_IMG_EFF_CTRL_YCBCR_FULL;
3824
- isp3_param_write(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL);
3931
+ isp3_param_write(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL, id);
38253932 }
38263933 }
38273934
38283935 static void
38293936 isp_vsm_config(struct rkisp_isp_params_vdev *params_vdev,
3830
- const struct isp32_vsm_cfg *arg)
3937
+ const struct isp32_vsm_cfg *arg, u32 id)
38313938 {
38323939 struct rkisp_device *ispdev = params_vdev->dev;
38333940 struct v4l2_rect *out_crop = &ispdev->isp_sdev.out_crop;
....@@ -3836,38 +3943,38 @@
38363943 u32 val, h, v;
38373944
38383945 val = arg->h_offs;
3839
- isp3_param_write(params_vdev, val, ISP32_VSM_H_OFFS);
3946
+ isp3_param_write(params_vdev, val, ISP32_VSM_H_OFFS, id);
38403947 val = arg->v_offs;
3841
- isp3_param_write(params_vdev, val, ISP32_VSM_V_OFFS);
3948
+ isp3_param_write(params_vdev, val, ISP32_VSM_V_OFFS, id);
38423949
38433950 h = arg->h_size;
38443951 if (h > width - arg->h_offs)
38453952 h = width - arg->h_offs;
38463953 h &= ~1;
3847
- isp3_param_write(params_vdev, h, ISP32_VSM_H_SIZE);
3954
+ isp3_param_write(params_vdev, h, ISP32_VSM_H_SIZE, id);
38483955
38493956 v = arg->v_size;
38503957 if (v > height - arg->v_offs)
38513958 v = height - arg->v_offs;
38523959 v &= ~1;
3853
- isp3_param_write(params_vdev, v, ISP32_VSM_V_SIZE);
3960
+ isp3_param_write(params_vdev, v, ISP32_VSM_V_SIZE, id);
38543961
38553962 val = arg->h_segments;
38563963 if (val > (h - 48) / 16)
38573964 val = (h - 48) / 16;
3858
- isp3_param_write(params_vdev, val, ISP32_VSM_H_SEGMENTS);
3965
+ isp3_param_write(params_vdev, val, ISP32_VSM_H_SEGMENTS, id);
38593966
38603967 val = arg->v_segments;
38613968 if (val > (v - 48) / 16)
38623969 val = (v - 48) / 16;
3863
- isp3_param_write(params_vdev, val, ISP32_VSM_V_SEGMENTS);
3970
+ isp3_param_write(params_vdev, val, ISP32_VSM_V_SEGMENTS, id);
38643971 }
38653972
38663973 static void
38673974 isp_vsm_enable(struct rkisp_isp_params_vdev *params_vdev,
3868
- bool en)
3975
+ bool en, u32 id)
38693976 {
3870
- isp3_param_write(params_vdev, en, ISP32_VSM_MODE);
3977
+ isp3_param_write(params_vdev, en, ISP32_VSM_MODE, id);
38713978 }
38723979
38733980 struct rkisp_isp_params_ops_v32 isp_params_ops_v32 = {
....@@ -3946,7 +4053,7 @@
39464053 static __maybe_unused
39474054 void __isp_isr_other_config(struct rkisp_isp_params_vdev *params_vdev,
39484055 const struct isp32_isp_params_cfg *new_params,
3949
- enum rkisp_params_type type)
4056
+ enum rkisp_params_type type, u32 id)
39504057 {
39514058 struct rkisp_isp_params_ops_v32 *ops =
39524059 (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
....@@ -3958,101 +4065,101 @@
39584065
39594066 if (type == RKISP_PARAMS_SHD) {
39604067 if ((module_cfg_update & ISP32_MODULE_HDRMGE))
3961
- ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type);
4068
+ ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type, id);
39624069
39634070 if ((module_cfg_update & ISP32_MODULE_DRC))
3964
- ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type);
4071
+ ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type, id);
39654072 return;
39664073 }
39674074
39684075 v4l2_dbg(4, rkisp_debug, &params_vdev->dev->v4l2_dev,
3969
- "%s seq:%d module_cfg_update:0x%llx\n",
3970
- __func__, new_params->frame_id, module_cfg_update);
4076
+ "%s id:%d seq:%d module_cfg_update:0x%llx\n",
4077
+ __func__, id, new_params->frame_id, module_cfg_update);
39714078
39724079 if (module_cfg_update & ISP32_MODULE_LSC)
3973
- ops->lsc_config(params_vdev, &new_params->others.lsc_cfg);
4080
+ ops->lsc_config(params_vdev, &new_params->others.lsc_cfg, id);
39744081
39754082 if (module_cfg_update & ISP32_MODULE_DPCC)
3976
- ops->dpcc_config(params_vdev, &new_params->others.dpcc_cfg);
4083
+ ops->dpcc_config(params_vdev, &new_params->others.dpcc_cfg, id);
39774084
39784085 if (module_cfg_update & ISP32_MODULE_BLS)
3979
- ops->bls_config(params_vdev, &new_params->others.bls_cfg);
4086
+ ops->bls_config(params_vdev, &new_params->others.bls_cfg, id);
39804087
39814088 if (module_cfg_update & ISP32_MODULE_SDG)
3982
- ops->sdg_config(params_vdev, &new_params->others.sdg_cfg);
4089
+ ops->sdg_config(params_vdev, &new_params->others.sdg_cfg, id);
39834090
39844091 if (module_cfg_update & ISP32_MODULE_AWB_GAIN)
3985
- ops->awbgain_config(params_vdev, &new_params->others.awb_gain_cfg);
4092
+ ops->awbgain_config(params_vdev, &new_params->others.awb_gain_cfg, id);
39864093
39874094 if (module_cfg_update & ISP32_MODULE_DEBAYER)
3988
- ops->debayer_config(params_vdev, &new_params->others.debayer_cfg);
4095
+ ops->debayer_config(params_vdev, &new_params->others.debayer_cfg, id);
39894096
39904097 if (module_cfg_update & ISP32_MODULE_CCM)
3991
- ops->ccm_config(params_vdev, &new_params->others.ccm_cfg);
4098
+ ops->ccm_config(params_vdev, &new_params->others.ccm_cfg, id);
39924099
39934100 if (module_cfg_update & ISP32_MODULE_GOC)
3994
- ops->goc_config(params_vdev, &new_params->others.gammaout_cfg);
4101
+ ops->goc_config(params_vdev, &new_params->others.gammaout_cfg, id);
39954102
39964103 /* range csm->cgc->cproc->ie */
39974104 if (module_cfg_update & ISP3X_MODULE_CSM)
3998
- ops->csm_config(params_vdev, &new_params->others.csm_cfg);
4105
+ ops->csm_config(params_vdev, &new_params->others.csm_cfg, id);
39994106
40004107 if (module_cfg_update & ISP3X_MODULE_CGC)
4001
- ops->cgc_config(params_vdev, &new_params->others.cgc_cfg);
4108
+ ops->cgc_config(params_vdev, &new_params->others.cgc_cfg, id);
40024109
40034110 if (module_cfg_update & ISP32_MODULE_CPROC)
4004
- ops->cproc_config(params_vdev, &new_params->others.cproc_cfg);
4111
+ ops->cproc_config(params_vdev, &new_params->others.cproc_cfg, id);
40054112
40064113 if (module_cfg_update & ISP32_MODULE_IE)
4007
- ops->ie_config(params_vdev, &new_params->others.ie_cfg);
4114
+ ops->ie_config(params_vdev, &new_params->others.ie_cfg, id);
40084115
40094116 if (module_cfg_update & ISP32_MODULE_HDRMGE)
4010
- ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type);
4117
+ ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type, id);
40114118
40124119 if (module_cfg_update & ISP32_MODULE_DRC)
4013
- ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type);
4120
+ ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type, id);
40144121
40154122 if (module_cfg_update & ISP32_MODULE_GIC)
4016
- ops->gic_config(params_vdev, &new_params->others.gic_cfg);
4123
+ ops->gic_config(params_vdev, &new_params->others.gic_cfg, id);
40174124
40184125 if (module_cfg_update & ISP32_MODULE_DHAZ)
4019
- ops->dhaz_config(params_vdev, &new_params->others.dhaz_cfg);
4126
+ ops->dhaz_config(params_vdev, &new_params->others.dhaz_cfg, id);
40204127
40214128 if (module_cfg_update & ISP32_MODULE_3DLUT)
4022
- ops->isp3dlut_config(params_vdev, &new_params->others.isp3dlut_cfg);
4129
+ ops->isp3dlut_config(params_vdev, &new_params->others.isp3dlut_cfg, id);
40234130
40244131 if (module_cfg_update & ISP32_MODULE_LDCH)
4025
- ops->ldch_config(params_vdev, &new_params->others.ldch_cfg);
4132
+ ops->ldch_config(params_vdev, &new_params->others.ldch_cfg, id);
40264133
40274134 if (module_cfg_update & ISP32_MODULE_YNR)
4028
- ops->ynr_config(params_vdev, &new_params->others.ynr_cfg);
4135
+ ops->ynr_config(params_vdev, &new_params->others.ynr_cfg, id);
40294136
40304137 if (module_cfg_update & ISP32_MODULE_CNR)
4031
- ops->cnr_config(params_vdev, &new_params->others.cnr_cfg);
4138
+ ops->cnr_config(params_vdev, &new_params->others.cnr_cfg, id);
40324139
40334140 if (module_cfg_update & ISP32_MODULE_SHARP)
4034
- ops->sharp_config(params_vdev, &new_params->others.sharp_cfg);
4141
+ ops->sharp_config(params_vdev, &new_params->others.sharp_cfg, id);
40354142
40364143 if (module_cfg_update & ISP32_MODULE_BAYNR)
4037
- ops->baynr_config(params_vdev, &new_params->others.baynr_cfg);
4144
+ ops->baynr_config(params_vdev, &new_params->others.baynr_cfg, id);
40384145
40394146 if (module_cfg_update & ISP32_MODULE_BAY3D)
4040
- ops->bay3d_config(params_vdev, &new_params->others.bay3d_cfg);
4147
+ ops->bay3d_config(params_vdev, &new_params->others.bay3d_cfg, id);
40414148
40424149 if (module_cfg_update & ISP32_MODULE_CAC)
4043
- ops->cac_config(params_vdev, &new_params->others.cac_cfg);
4150
+ ops->cac_config(params_vdev, &new_params->others.cac_cfg, id);
40444151
40454152 if (module_cfg_update & ISP32_MODULE_GAIN)
4046
- ops->gain_config(params_vdev, &new_params->others.gain_cfg);
4153
+ ops->gain_config(params_vdev, &new_params->others.gain_cfg, id);
40474154
40484155 if (module_cfg_update & ISP32_MODULE_VSM)
4049
- ops->vsm_config(params_vdev, &new_params->others.vsm_cfg);
4156
+ ops->vsm_config(params_vdev, &new_params->others.vsm_cfg, id);
40504157 }
40514158
40524159 static __maybe_unused
40534160 void __isp_isr_other_en(struct rkisp_isp_params_vdev *params_vdev,
40544161 const struct isp32_isp_params_cfg *new_params,
4055
- enum rkisp_params_type type)
4162
+ enum rkisp_params_type type, u32 id)
40564163 {
40574164 struct rkisp_isp_params_ops_v32 *ops =
40584165 (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
....@@ -4070,115 +4177,113 @@
40704177 return;
40714178
40724179 v4l2_dbg(4, rkisp_debug, &params_vdev->dev->v4l2_dev,
4073
- "%s seq:%d module_en_update:0x%llx module_ens:0x%llx\n",
4074
- __func__, new_params->frame_id, module_en_update, module_ens);
4180
+ "%s id:%d seq:%d module_en_update:0x%llx module_ens:0x%llx\n",
4181
+ __func__, id, new_params->frame_id, module_en_update, module_ens);
40754182
40764183 if (module_en_update & ISP32_MODULE_DPCC)
4077
- ops->dpcc_enable(params_vdev, !!(module_ens & ISP32_MODULE_DPCC));
4184
+ ops->dpcc_enable(params_vdev, !!(module_ens & ISP32_MODULE_DPCC), id);
40784185
40794186 if (module_en_update & ISP32_MODULE_BLS)
4080
- ops->bls_enable(params_vdev, !!(module_ens & ISP32_MODULE_BLS));
4187
+ ops->bls_enable(params_vdev, !!(module_ens & ISP32_MODULE_BLS), id);
40814188
40824189 if (module_en_update & ISP32_MODULE_SDG)
4083
- ops->sdg_enable(params_vdev, !!(module_ens & ISP32_MODULE_SDG));
4190
+ ops->sdg_enable(params_vdev, !!(module_ens & ISP32_MODULE_SDG), id);
40844191
40854192 if (module_en_update & ISP32_MODULE_LSC) {
4086
- ops->lsc_enable(params_vdev, !!(module_ens & ISP32_MODULE_LSC));
4193
+ ops->lsc_enable(params_vdev, !!(module_ens & ISP32_MODULE_LSC), id);
40874194 priv_val->lsc_en = !!(module_ens & ISP32_MODULE_LSC);
40884195 }
40894196
40904197 if (module_en_update & ISP32_MODULE_AWB_GAIN)
4091
- ops->awbgain_enable(params_vdev, !!(module_ens & ISP32_MODULE_AWB_GAIN));
4198
+ ops->awbgain_enable(params_vdev, !!(module_ens & ISP32_MODULE_AWB_GAIN), id);
40924199
40934200 if (module_en_update & ISP32_MODULE_DEBAYER)
4094
- ops->debayer_enable(params_vdev, !!(module_ens & ISP32_MODULE_DEBAYER));
4201
+ ops->debayer_enable(params_vdev, !!(module_ens & ISP32_MODULE_DEBAYER), id);
40954202
40964203 if (module_en_update & ISP32_MODULE_CCM)
4097
- ops->ccm_enable(params_vdev, !!(module_ens & ISP32_MODULE_CCM));
4204
+ ops->ccm_enable(params_vdev, !!(module_ens & ISP32_MODULE_CCM), id);
40984205
40994206 if (module_en_update & ISP32_MODULE_GOC)
4100
- ops->goc_enable(params_vdev, !!(module_ens & ISP32_MODULE_GOC));
4207
+ ops->goc_enable(params_vdev, !!(module_ens & ISP32_MODULE_GOC), id);
41014208
41024209 if (module_en_update & ISP32_MODULE_CPROC)
4103
- ops->cproc_enable(params_vdev, !!(module_ens & ISP32_MODULE_CPROC));
4210
+ ops->cproc_enable(params_vdev, !!(module_ens & ISP32_MODULE_CPROC), id);
41044211
41054212 if (module_en_update & ISP32_MODULE_IE)
4106
- ops->ie_enable(params_vdev, !!(module_ens & ISP32_MODULE_IE));
4213
+ ops->ie_enable(params_vdev, !!(module_ens & ISP32_MODULE_IE), id);
41074214
41084215 if (module_en_update & ISP32_MODULE_HDRMGE) {
4109
- ops->hdrmge_enable(params_vdev, !!(module_ens & ISP32_MODULE_HDRMGE));
4216
+ ops->hdrmge_enable(params_vdev, !!(module_ens & ISP32_MODULE_HDRMGE), id);
41104217 priv_val->mge_en = !!(module_ens & ISP32_MODULE_HDRMGE);
41114218 }
41124219
41134220 if (module_en_update & ISP32_MODULE_DRC) {
4114
- ops->hdrdrc_enable(params_vdev, !!(module_ens & ISP32_MODULE_DRC));
4221
+ ops->hdrdrc_enable(params_vdev, !!(module_ens & ISP32_MODULE_DRC), id);
41154222 priv_val->drc_en = !!(module_ens & ISP32_MODULE_DRC);
41164223 }
41174224
41184225 if (module_en_update & ISP32_MODULE_GIC)
4119
- ops->gic_enable(params_vdev, !!(module_ens & ISP32_MODULE_GIC));
4226
+ ops->gic_enable(params_vdev, !!(module_ens & ISP32_MODULE_GIC), id);
41204227
41214228 if (module_en_update & ISP32_MODULE_DHAZ) {
4122
- ops->dhaz_enable(params_vdev, !!(module_ens & ISP32_MODULE_DHAZ));
4229
+ ops->dhaz_enable(params_vdev, !!(module_ens & ISP32_MODULE_DHAZ), id);
41234230 priv_val->dhaz_en = !!(module_ens & ISP32_MODULE_DHAZ);
41244231 }
41254232
41264233 if (module_en_update & ISP32_MODULE_3DLUT) {
4127
- ops->isp3dlut_enable(params_vdev, !!(module_ens & ISP32_MODULE_3DLUT));
4234
+ ops->isp3dlut_enable(params_vdev, !!(module_ens & ISP32_MODULE_3DLUT), id);
41284235 priv_val->lut3d_en = !!(module_ens & ISP32_MODULE_3DLUT);
41294236 }
41304237
41314238 if (module_en_update & ISP32_MODULE_LDCH)
4132
- ops->ldch_enable(params_vdev, !!(module_ens & ISP32_MODULE_LDCH));
4239
+ ops->ldch_enable(params_vdev, !!(module_ens & ISP32_MODULE_LDCH), id);
41334240
41344241 if (module_en_update & ISP32_MODULE_YNR)
4135
- ops->ynr_enable(params_vdev, !!(module_ens & ISP32_MODULE_YNR));
4242
+ ops->ynr_enable(params_vdev, !!(module_ens & ISP32_MODULE_YNR), id);
41364243
41374244 if (module_en_update & ISP32_MODULE_CNR)
4138
- ops->cnr_enable(params_vdev, !!(module_ens & ISP32_MODULE_CNR));
4245
+ ops->cnr_enable(params_vdev, !!(module_ens & ISP32_MODULE_CNR), id);
41394246
41404247 if (module_en_update & ISP32_MODULE_SHARP)
4141
- ops->sharp_enable(params_vdev, !!(module_ens & ISP32_MODULE_SHARP));
4248
+ ops->sharp_enable(params_vdev, !!(module_ens & ISP32_MODULE_SHARP), id);
41424249
41434250 if (module_en_update & ISP32_MODULE_BAYNR)
4144
- ops->baynr_enable(params_vdev, !!(module_ens & ISP32_MODULE_BAYNR));
4251
+ ops->baynr_enable(params_vdev, !!(module_ens & ISP32_MODULE_BAYNR), id);
41454252
41464253 if (module_en_update & ISP32_MODULE_BAY3D) {
4147
- ops->bay3d_enable(params_vdev, !!(module_ens & ISP32_MODULE_BAY3D));
4254
+ ops->bay3d_enable(params_vdev, !!(module_ens & ISP32_MODULE_BAY3D), id);
41484255 priv_val->bay3d_en = !!(module_ens & ISP32_MODULE_BAY3D);
41494256 }
41504257
41514258 if (module_en_update & ISP32_MODULE_CAC)
4152
- ops->cac_enable(params_vdev, !!(module_ens & ISP32_MODULE_CAC));
4259
+ ops->cac_enable(params_vdev, !!(module_ens & ISP32_MODULE_CAC), id);
41534260
41544261 if (module_en_update & ISP32_MODULE_GAIN ||
41554262 ((priv_val->buf_info_owner == RKISP_INFO2DRR_OWNER_GAIN) &&
4156
- !(isp3_param_read(params_vdev, ISP3X_GAIN_CTRL) & ISP3X_GAIN_2DDR_EN)))
4157
- ops->gain_enable(params_vdev, !!(module_ens & ISP32_MODULE_GAIN));
4263
+ !(isp3_param_read(params_vdev, ISP3X_GAIN_CTRL, id) & ISP3X_GAIN_2DDR_EN)))
4264
+ ops->gain_enable(params_vdev, !!(module_ens & ISP32_MODULE_GAIN), id);
41584265
41594266 if (module_en_update & ISP32_MODULE_VSM)
4160
- ops->vsm_enable(params_vdev, !!(module_ens & ISP32_MODULE_VSM));
4267
+ ops->vsm_enable(params_vdev, !!(module_ens & ISP32_MODULE_VSM), id);
41614268
41624269 /* gain disable, using global gain for cnr */
4163
- gain_ctrl = isp3_param_read_cache(params_vdev, ISP3X_GAIN_CTRL);
4164
- cnr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_CNR_CTRL);
4270
+ gain_ctrl = isp3_param_read_cache(params_vdev, ISP3X_GAIN_CTRL, id);
4271
+ cnr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_CNR_CTRL, id);
41654272 if (!(gain_ctrl & ISP32_MODULE_EN) && cnr_ctrl & ISP32_MODULE_EN) {
41664273 cnr_ctrl |= BIT(1);
4167
- isp3_param_write(params_vdev, cnr_ctrl, ISP3X_CNR_CTRL);
4168
- val = isp3_param_read(params_vdev, ISP3X_CNR_EXGAIN) & 0x3ff;
4169
- isp3_param_write(params_vdev, val | 0x8000, ISP3X_CNR_EXGAIN);
4274
+ isp3_param_write(params_vdev, cnr_ctrl, ISP3X_CNR_CTRL, id);
4275
+ val = isp3_param_read(params_vdev, ISP3X_CNR_EXGAIN, id) & 0x3ff;
4276
+ isp3_param_write(params_vdev, val | 0x8000, ISP3X_CNR_EXGAIN, id);
41704277 }
41714278 }
41724279
41734280 static __maybe_unused
41744281 void __isp_isr_meas_config(struct rkisp_isp_params_vdev *params_vdev,
41754282 struct isp32_isp_params_cfg *new_params,
4176
- enum rkisp_params_type type)
4283
+ enum rkisp_params_type type, u32 id)
41774284 {
41784285 struct rkisp_isp_params_ops_v32 *ops =
41794286 (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
4180
- struct rkisp_isp_params_val_v32 *priv_val =
4181
- (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
41824287 u64 module_cfg_update = new_params->module_cfg_update;
41834288
41844289 params_vdev->cur_frame_id = new_params->frame_id;
....@@ -4190,48 +4295,46 @@
41904295 return;
41914296
41924297 v4l2_dbg(4, rkisp_debug, &params_vdev->dev->v4l2_dev,
4193
- "%s seq:%d module_cfg_update:0x%llx\n",
4194
- __func__, new_params->frame_id, module_cfg_update);
4298
+ "%s id:%d seq:%d module_cfg_update:0x%llx\n",
4299
+ __func__, id, new_params->frame_id, module_cfg_update);
41954300
41964301 if ((module_cfg_update & ISP32_MODULE_RAWAF))
4197
- ops->rawaf_config(params_vdev, &new_params->meas.rawaf);
4302
+ ops->rawaf_config(params_vdev, &new_params->meas.rawaf, id);
41984303
41994304 if ((module_cfg_update & ISP32_MODULE_RAWAE0) &&
42004305 !(params_vdev->afaemode_en && params_vdev->dev->isp_ver == ISP_V32_L))
4201
- ops->rawae0_config(params_vdev, &new_params->meas.rawae0);
4306
+ ops->rawae0_config(params_vdev, &new_params->meas.rawae0, id);
42024307
42034308 if ((module_cfg_update & ISP32_MODULE_RAWAE1))
4204
- ops->rawae1_config(params_vdev, &new_params->meas.rawae1);
4309
+ ops->rawae1_config(params_vdev, &new_params->meas.rawae1, id);
42054310
42064311 if ((module_cfg_update & ISP32_MODULE_RAWAE2))
4207
- ops->rawae2_config(params_vdev, &new_params->meas.rawae2);
4312
+ ops->rawae2_config(params_vdev, &new_params->meas.rawae2, id);
42084313
42094314 if ((module_cfg_update & ISP32_MODULE_RAWAE3) &&
42104315 !(params_vdev->afaemode_en && params_vdev->dev->isp_ver == ISP_V32))
4211
- ops->rawae3_config(params_vdev, &new_params->meas.rawae3);
4316
+ ops->rawae3_config(params_vdev, &new_params->meas.rawae3, id);
42124317
42134318 if ((module_cfg_update & ISP32_MODULE_RAWHIST0))
4214
- ops->rawhst0_config(params_vdev, &new_params->meas.rawhist0);
4319
+ ops->rawhst0_config(params_vdev, &new_params->meas.rawhist0, id);
42154320
42164321 if ((module_cfg_update & ISP32_MODULE_RAWHIST1))
4217
- ops->rawhst1_config(params_vdev, &new_params->meas.rawhist1);
4322
+ ops->rawhst1_config(params_vdev, &new_params->meas.rawhist1, id);
42184323
42194324 if ((module_cfg_update & ISP32_MODULE_RAWHIST2))
4220
- ops->rawhst2_config(params_vdev, &new_params->meas.rawhist2);
4325
+ ops->rawhst2_config(params_vdev, &new_params->meas.rawhist2, id);
42214326
42224327 if ((module_cfg_update & ISP32_MODULE_RAWHIST3))
4223
- ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3);
4328
+ ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3, id);
42244329
4225
- if ((module_cfg_update & ISP32_MODULE_RAWAWB) ||
4226
- ((priv_val->buf_info_owner == RKISP_INFO2DRR_OWNER_AWB) &&
4227
- !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL) & ISP32_RAWAWB_2DDR_PATH_EN)))
4228
- ops->rawawb_config(params_vdev, &new_params->meas.rawawb);
4330
+ if ((module_cfg_update & ISP32_MODULE_RAWAWB))
4331
+ ops->rawawb_config(params_vdev, &new_params->meas.rawawb, id);
42294332 }
42304333
42314334 static __maybe_unused
42324335 void __isp_isr_meas_en(struct rkisp_isp_params_vdev *params_vdev,
42334336 struct isp32_isp_params_cfg *new_params,
4234
- enum rkisp_params_type type)
4337
+ enum rkisp_params_type type, u32 id)
42354338 {
42364339 struct rkisp_isp_params_ops_v32 *ops =
42374340 (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
....@@ -4245,64 +4348,53 @@
42454348 return;
42464349
42474350 v4l2_dbg(4, rkisp_debug, &params_vdev->dev->v4l2_dev,
4248
- "%s seq:%d module_en_update:0x%llx module_ens:0x%llx\n",
4249
- __func__, new_params->frame_id, module_en_update, module_ens);
4351
+ "%s id:%d seq:%d module_en_update:0x%llx module_ens:0x%llx\n",
4352
+ __func__, id, new_params->frame_id, module_en_update, module_ens);
42504353
42514354 if (module_en_update & ISP32_MODULE_RAWAF)
4252
- ops->rawaf_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAF));
4355
+ ops->rawaf_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAF), id);
42534356
42544357 if ((module_en_update & ISP32_MODULE_RAWAE0) &&
42554358 !(params_vdev->afaemode_en && params_vdev->dev->isp_ver == ISP_V32_L))
4256
- ops->rawae0_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE0));
4359
+ ops->rawae0_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE0), id);
42574360
42584361 if (module_en_update & ISP32_MODULE_RAWAE1)
4259
- ops->rawae1_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE1));
4362
+ ops->rawae1_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE1), id);
42604363
42614364 if (module_en_update & ISP32_MODULE_RAWAE2)
4262
- ops->rawae2_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE2));
4365
+ ops->rawae2_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE2), id);
42634366
42644367 if ((module_en_update & ISP32_MODULE_RAWAE3) &&
42654368 !(params_vdev->afaemode_en && params_vdev->dev->isp_ver == ISP_V32))
4266
- ops->rawae3_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE3));
4369
+ ops->rawae3_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE3), id);
42674370
42684371 if (module_en_update & ISP32_MODULE_RAWHIST0)
4269
- ops->rawhst0_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST0));
4372
+ ops->rawhst0_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST0), id);
42704373
42714374 if (module_en_update & ISP32_MODULE_RAWHIST1)
4272
- ops->rawhst1_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST1));
4375
+ ops->rawhst1_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST1), id);
42734376
42744377 if (module_en_update & ISP32_MODULE_RAWHIST2)
4275
- ops->rawhst2_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST2));
4378
+ ops->rawhst2_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST2), id);
42764379
42774380 if (module_en_update & ISP32_MODULE_RAWHIST3)
4278
- ops->rawhst3_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST3));
4381
+ ops->rawhst3_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST3), id);
42794382
42804383 if (module_en_update & ISP32_MODULE_RAWAWB)
4281
- ops->rawawb_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAWB));
4282
-}
4283
-
4284
-static __maybe_unused
4285
-void __isp_config_hdrshd(struct rkisp_isp_params_vdev *params_vdev)
4286
-{
4287
- struct rkisp_isp_params_ops_v32 *ops =
4288
- (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
4289
- struct rkisp_isp_params_val_v32 *priv_val =
4290
- (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
4291
-
4292
- ops->hdrmge_config(params_vdev, &priv_val->last_hdrmge, RKISP_PARAMS_SHD);
4293
- ops->hdrdrc_config(params_vdev, &priv_val->last_hdrdrc, RKISP_PARAMS_SHD);
4384
+ ops->rawawb_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAWB), id);
42944385 }
42954386
42964387 static
42974388 void rkisp_params_cfgsram_v32(struct rkisp_isp_params_vdev *params_vdev)
42984389 {
4299
- struct isp32_isp_params_cfg *params = params_vdev->isp32_params;
4390
+ u32 id = params_vdev->dev->unite_index;
4391
+ struct isp32_isp_params_cfg *params = params_vdev->isp32_params + id;
43004392
4301
- isp_lsc_matrix_cfg_sram(params_vdev, &params->others.lsc_cfg, true);
4302
- isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist1, 1, true);
4303
- isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist2, 2, true);
4304
- isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist3, 0, true);
4305
- isp_rawawb_cfg_sram(params_vdev, &params->meas.rawawb, true);
4393
+ isp_lsc_matrix_cfg_sram(params_vdev, &params->others.lsc_cfg, true, id);
4394
+ isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist1, 1, true, id);
4395
+ isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist2, 2, true, id);
4396
+ isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist3, 0, true, id);
4397
+ isp_rawawb_cfg_sram(params_vdev, &params->meas.rawawb, true, id);
43064398 }
43074399
43084400 static int
....@@ -4313,22 +4405,24 @@
43134405 struct rkisp_isp_subdev *isp_sdev = &dev->isp_sdev;
43144406 struct rkisp_isp_params_val_v32 *priv_val;
43154407 u64 module_en_update, module_ens;
4316
- int ret, i;
4408
+ int ret, i, id;
43174409
43184410 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
43194411 module_en_update = new_params->module_en_update;
43204412 module_ens = new_params->module_ens;
43214413
4322
- priv_val->buf_3dlut_idx = 0;
4323
- for (i = 0; i < ISP32_3DLUT_BUF_NUM; i++) {
4324
- if (priv_val->buf_3dlut[i].mem_priv)
4325
- continue;
4326
- priv_val->buf_3dlut[i].is_need_vaddr = true;
4327
- priv_val->buf_3dlut[i].size = ISP32_3DLUT_BUF_SIZE;
4328
- ret = rkisp_alloc_buffer(dev, &priv_val->buf_3dlut[i]);
4329
- if (ret) {
4330
- dev_err(dev->dev, "alloc 3dlut buf fail:%d\n", ret);
4331
- goto err_3dlut;
4414
+ for (id = 0; id <= !!dev->hw_dev->unite; id++) {
4415
+ priv_val->buf_3dlut_idx[id] = 0;
4416
+ for (i = 0; i < ISP32_3DLUT_BUF_NUM; i++) {
4417
+ if (priv_val->buf_3dlut[id][i].mem_priv)
4418
+ continue;
4419
+ priv_val->buf_3dlut[id][i].is_need_vaddr = true;
4420
+ priv_val->buf_3dlut[id][i].size = ISP32_3DLUT_BUF_SIZE;
4421
+ ret = rkisp_alloc_buffer(dev, &priv_val->buf_3dlut[id][i]);
4422
+ if (ret) {
4423
+ dev_err(dev->dev, "alloc 3dlut buf fail:%d\n", ret);
4424
+ goto err_3dlut;
4425
+ }
43324426 }
43334427 }
43344428
....@@ -4343,6 +4437,9 @@
43434437 u32 h = ALIGN(isp_sdev->in_crop.height, 16);
43444438 u32 val, wrap_line, wsize, div;
43454439 bool is_alloc;
4440
+
4441
+ if (dev->hw_dev->unite)
4442
+ w = ALIGN(isp_sdev->in_crop.width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL, 16);
43464443
43474444 priv_val->is_lo8x8 = (!new_params->others.bay3d_cfg.lo4x8_en &&
43484445 !new_params->others.bay3d_cfg.lo4x4_en);
....@@ -4361,6 +4458,9 @@
43614458 wsize *= 2;
43624459 div = is_bwopt_dis ? 1 : 2;
43634460 val = ALIGN(wsize * h / div, 16);
4461
+ priv_val->bay3d_iir_size = val;
4462
+ if (dev->hw_dev->unite)
4463
+ val *= 2;
43644464 is_alloc = true;
43654465 if (priv_val->buf_3dnr_iir.mem_priv) {
43664466 if (val > priv_val->buf_3dnr_iir.size)
....@@ -4381,6 +4481,9 @@
43814481 val = w * h / div;
43824482 /* pixel to Byte and align */
43834483 val = ALIGN(val * 2, 16);
4484
+ priv_val->bay3d_ds_size = val;
4485
+ if (dev->hw_dev->unite)
4486
+ val *= 2;
43844487 is_alloc = true;
43854488 if (priv_val->buf_3dnr_ds.mem_priv) {
43864489 if (val > priv_val->buf_3dnr_ds.size)
....@@ -4413,8 +4516,7 @@
44134516 val = ALIGN(wsize * wrap_line / div, 16);
44144517 is_alloc = true;
44154518 if (priv_val->buf_3dnr_cur.mem_priv) {
4416
- if (val > priv_val->buf_3dnr_cur.size ||
4417
- val < dev->hw_dev->sram.size)
4519
+ if (val > priv_val->buf_3dnr_cur.size || val < dev->hw_dev->sram.size)
44184520 rkisp_free_buffer(dev, &priv_val->buf_3dnr_cur);
44194521 else
44204522 is_alloc = false;
....@@ -4440,6 +4542,8 @@
44404542 if (dev->isp_ver == ISP_V32_L) {
44414543 if (dev->hw_dev->is_frm_buf && !priv_val->buf_frm.mem_priv) {
44424544 priv_val->buf_frm.size = ISP32_LITE_FRM_BUF_SIZE;
4545
+ if (dev->hw_dev->unite)
4546
+ priv_val->buf_frm.size *= 2;
44434547 ret = rkisp_alloc_buffer(dev, &priv_val->buf_frm);
44444548 if (ret) {
44454549 dev_err(dev->dev, "alloc frm buf fail:%d\n", ret);
....@@ -4469,10 +4573,14 @@
44694573 rkisp_free_buffer(dev, &priv_val->buf_3dnr_iir);
44704574 rkisp_free_buffer(dev, &priv_val->buf_3dnr_ds);
44714575 err_3dnr:
4576
+ id = dev->hw_dev->unite ? 1 : 0;
44724577 i = ISP32_3DLUT_BUF_NUM;
44734578 err_3dlut:
4474
- for (i -= 1; i >= 0; i--)
4475
- rkisp_free_buffer(dev, &priv_val->buf_3dlut[i]);
4579
+ for (; id >= 0; id--) {
4580
+ for (i -= 1; i >= 0; i--)
4581
+ rkisp_free_buffer(dev, &priv_val->buf_3dlut[id][i]);
4582
+ i = ISP32_3DLUT_BUF_NUM;
4583
+ }
44764584 return ret;
44774585 }
44784586
....@@ -4664,6 +4772,8 @@
46644772 if (ispdev->isp_ver == ISP_V32_L)
46654773 return rkisp_params_check_bigmode_v32_lite(params_vdev);
46664774
4775
+ if (hw->unite == ISP_UNITE_ONE)
4776
+ hw->is_multi_overflow = true;
46674777 multi_overflow:
46684778 if (hw->is_multi_overflow) {
46694779 ispdev->multi_index = 0;
....@@ -4831,6 +4941,7 @@
48314941 rkisp_params_first_cfg_v32(struct rkisp_isp_params_vdev *params_vdev)
48324942 {
48334943 struct rkisp_device *dev = params_vdev->dev;
4944
+ struct rkisp_hw_dev *hw = dev->hw_dev;
48344945 struct rkisp_isp_params_val_v32 *priv_val =
48354946 (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
48364947
....@@ -4847,25 +4958,39 @@
48474958 priv_val->lsc_en = 0;
48484959 priv_val->mge_en = 0;
48494960 priv_val->lut3d_en = 0;
4961
+ if (hw->unite) {
4962
+ if (dev->is_bigmode)
4963
+ rkisp_next_set_bits(dev, ISP3X_ISP_CTRL1, 0,
4964
+ ISP3X_BIGMODE_MANUAL | ISP3X_BIGMODE_FORCE_EN, false);
4965
+ __isp_isr_meas_config(params_vdev, params_vdev->isp32_params + 1, RKISP_PARAMS_ALL, 1);
4966
+ __isp_isr_other_config(params_vdev, params_vdev->isp32_params + 1, RKISP_PARAMS_ALL, 1);
4967
+ __isp_isr_other_en(params_vdev, params_vdev->isp32_params + 1, RKISP_PARAMS_ALL, 1);
4968
+ __isp_isr_meas_en(params_vdev, params_vdev->isp32_params + 1, RKISP_PARAMS_ALL, 1);
4969
+ }
48504970 if (dev->is_bigmode)
4851
- rkisp_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, 0,
4971
+ rkisp_set_bits(dev, ISP3X_ISP_CTRL1, 0,
48524972 ISP3X_BIGMODE_MANUAL | ISP3X_BIGMODE_FORCE_EN, false);
48534973
4854
- __isp_isr_meas_config(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL);
4855
- __isp_isr_other_config(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL);
4856
- __isp_isr_other_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL);
4857
- __isp_isr_meas_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL);
4974
+ __isp_isr_meas_config(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
4975
+ __isp_isr_other_config(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
4976
+ __isp_isr_other_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
4977
+ __isp_isr_meas_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
48584978
4859
- priv_val->cur_hdrmge = params_vdev->isp32_params->others.hdrmge_cfg;
4860
- priv_val->cur_hdrdrc = params_vdev->isp32_params->others.drc_cfg;
4861
- priv_val->last_hdrmge = priv_val->cur_hdrmge;
4862
- priv_val->last_hdrdrc = priv_val->cur_hdrdrc;
48634979 spin_unlock(&params_vdev->config_lock);
48644980
48654981 if (dev->hw_dev->is_frm_buf && priv_val->buf_frm.mem_priv) {
4866
- isp3_param_write(params_vdev, priv_val->buf_frm.size, ISP32L_FRM_BUF_WR_SIZE);
4867
- isp3_param_write(params_vdev, priv_val->buf_frm.dma_addr, ISP32L_FRM_BUF_WR_BASE);
4868
- isp3_param_write(params_vdev, priv_val->buf_frm.dma_addr, ISP32L_FRM_BUF_RD_BASE);
4982
+ u32 size = priv_val->buf_frm.size;
4983
+ u32 addr = priv_val->buf_frm.dma_addr;
4984
+
4985
+ if (hw->unite) {
4986
+ size /= 2;
4987
+ isp3_param_write(params_vdev, size, ISP32L_FRM_BUF_WR_SIZE, 1);
4988
+ isp3_param_write(params_vdev, addr + size, ISP32L_FRM_BUF_WR_BASE, 1);
4989
+ isp3_param_write(params_vdev, addr + size, ISP32L_FRM_BUF_RD_BASE, 1);
4990
+ }
4991
+ isp3_param_write(params_vdev, size, ISP32L_FRM_BUF_WR_SIZE, 0);
4992
+ isp3_param_write(params_vdev, addr, ISP32L_FRM_BUF_WR_BASE, 0);
4993
+ isp3_param_write(params_vdev, addr, ISP32L_FRM_BUF_RD_BASE, 0);
48694994 }
48704995 if (dev->hw_dev->is_single && (dev->isp_state & ISP_START))
48714996 rkisp_set_bits(dev, ISP3X_ISP_CTRL0, 0, CIF_ISP_CTRL_ISP_CFG_UPD, true);
....@@ -4879,11 +5004,15 @@
48795004
48805005 static void rkisp_clear_first_param_v32(struct rkisp_isp_params_vdev *params_vdev)
48815006 {
4882
- memset(params_vdev->isp32_params, 0, sizeof(struct isp32_isp_params_cfg));
5007
+ u32 size = sizeof(struct isp32_isp_params_cfg);
5008
+
5009
+ if (params_vdev->dev->hw_dev->unite)
5010
+ size *= 2;
5011
+ memset(params_vdev->isp32_params, 0, size);
48835012 }
48845013
48855014 static void rkisp_deinit_mesh_buf(struct rkisp_isp_params_vdev *params_vdev,
4886
- u64 module_id)
5015
+ u64 module_id, u32 id)
48875016 {
48885017 struct rkisp_isp_params_val_v32 *priv_val;
48895018 struct rkisp_dummy_buffer *buf;
....@@ -4895,11 +5024,11 @@
48955024
48965025 switch (module_id) {
48975026 case ISP32_MODULE_CAC:
4898
- buf = priv_val->buf_cac;
5027
+ buf = priv_val->buf_cac[id];
48995028 break;
49005029 case ISP32_MODULE_LDCH:
49015030 default:
4902
- buf = priv_val->buf_ldch;
5031
+ buf = priv_val->buf_ldch[id];
49035032 break;
49045033 }
49055034
....@@ -4919,6 +5048,7 @@
49195048 u32 mesh_h = meshsize->meas_height;
49205049 u32 mesh_size, buf_size;
49215050 int i, ret, buf_cnt = meshsize->buf_cnt;
5051
+ int id = meshsize->unite_isp_id;
49225052 bool is_alloc;
49235053
49245054 priv_val = params_vdev->priv_val;
....@@ -4929,16 +5059,16 @@
49295059
49305060 switch (meshsize->module_id) {
49315061 case ISP32_MODULE_CAC:
4932
- priv_val->buf_cac_idx = 0;
4933
- buf = priv_val->buf_cac;
5062
+ priv_val->buf_cac_idx[id] = 0;
5063
+ buf = priv_val->buf_cac[id];
49345064 mesh_w = (mesh_w + 62) / 64 * 9;
49355065 mesh_h = (mesh_h + 62) / 64 * 2;
49365066 mesh_size = mesh_w * 4 * mesh_h;
49375067 break;
49385068 case ISP32_MODULE_LDCH:
49395069 default:
4940
- priv_val->buf_ldch_idx = 0;
4941
- buf = priv_val->buf_ldch;
5070
+ priv_val->buf_ldch_idx[id] = 0;
5071
+ buf = priv_val->buf_ldch[id];
49425072 mesh_w = ((mesh_w + 15) / 16 + 2) / 2;
49435073 mesh_h = (mesh_h + 7) / 8 + 1;
49445074 mesh_size = mesh_w * 4 * mesh_h;
....@@ -4979,7 +5109,7 @@
49795109
49805110 return 0;
49815111 err:
4982
- rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id);
5112
+ rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id, id);
49835113 return -ENOMEM;
49845114 }
49855115
....@@ -4987,7 +5117,9 @@
49875117 rkisp_get_param_size_v32(struct rkisp_isp_params_vdev *params_vdev,
49885118 unsigned int sizes[])
49895119 {
4990
- sizes[0] = sizeof(struct isp32_isp_params_cfg);
5120
+ u32 mult = params_vdev->dev->hw_dev->unite ? 2 : 1;
5121
+
5122
+ sizes[0] = sizeof(struct isp32_isp_params_cfg) * mult;
49915123 }
49925124
49935125 static void
....@@ -4997,18 +5129,18 @@
49975129 struct rkisp_isp_params_val_v32 *priv_val;
49985130 struct rkisp_meshbuf_info *meshbuf = meshbuf_inf;
49995131 struct rkisp_dummy_buffer *buf;
5000
- int i;
5132
+ int i, id = meshbuf->unite_isp_id;
50015133
50025134 priv_val = params_vdev->priv_val;
50035135 switch (meshbuf->module_id) {
50045136 case ISP32_MODULE_CAC:
5005
- priv_val->buf_cac_idx = 0;
5006
- buf = priv_val->buf_cac;
5137
+ priv_val->buf_cac_idx[id] = 0;
5138
+ buf = priv_val->buf_cac[id];
50075139 break;
50085140 case ISP32_MODULE_LDCH:
50095141 default:
5010
- priv_val->buf_ldch_idx = 0;
5011
- buf = priv_val->buf_ldch;
5142
+ priv_val->buf_ldch_idx[id] = 0;
5143
+ buf = priv_val->buf_ldch[id];
50125144 break;
50135145 }
50145146
....@@ -5030,6 +5162,8 @@
50305162 {
50315163 struct rkisp_meshbuf_size *meshsize = size;
50325164
5165
+ if (!params_vdev->dev->hw_dev->unite)
5166
+ meshsize->unite_isp_id = 0;
50335167 return rkisp_init_mesh_buf(params_vdev, meshsize);
50345168 }
50355169
....@@ -5037,7 +5171,10 @@
50375171 rkisp_params_free_meshbuf_v32(struct rkisp_isp_params_vdev *params_vdev,
50385172 u64 module_id)
50395173 {
5040
- rkisp_deinit_mesh_buf(params_vdev, module_id);
5174
+ int id;
5175
+
5176
+ for (id = 0; id <= !!params_vdev->dev->hw_dev->unite; id++)
5177
+ rkisp_deinit_mesh_buf(params_vdev, module_id, id);
50415178 }
50425179
50435180 static int
....@@ -5134,9 +5271,9 @@
51345271 cfg->buf_fd[i] = buf->dma_fd;
51355272 }
51365273 buf = &priv_val->buf_info[0];
5137
- isp3_param_write(params_vdev, buf->dma_addr, ISP3X_MI_GAIN_WR_BASE);
5138
- isp3_param_write(params_vdev, buf->size, ISP3X_MI_GAIN_WR_SIZE);
5139
- isp3_param_write(params_vdev, wsize, ISP3X_MI_GAIN_WR_LENGTH);
5274
+ isp3_param_write(params_vdev, buf->dma_addr, ISP3X_MI_GAIN_WR_BASE, 0);
5275
+ isp3_param_write(params_vdev, buf->size, ISP3X_MI_GAIN_WR_SIZE, 0);
5276
+ isp3_param_write(params_vdev, wsize, ISP3X_MI_GAIN_WR_LENGTH, 0);
51405277 if (dev->hw_dev->is_single)
51415278 rkisp_write(dev, ISP3X_MI_WR_CTRL2, ISP3X_GAINSELF_UPD, true);
51425279 rkisp_set_reg_cache_bits(dev, reg, mask, ctrl);
....@@ -5164,7 +5301,7 @@
51645301 {
51655302 struct rkisp_device *ispdev = params_vdev->dev;
51665303 struct rkisp_isp_params_val_v32 *priv_val;
5167
- int i;
5304
+ int i, id;
51685305
51695306 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
51705307 rkisp_free_buffer(ispdev, &priv_val->buf_frm);
....@@ -5173,10 +5310,12 @@
51735310 rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_ds);
51745311 for (i = 0; i < ISP32_LSC_LUT_BUF_NUM; i++)
51755312 rkisp_free_buffer(ispdev, &priv_val->buf_lsclut[i]);
5176
- for (i = 0; i < ISP32_3DLUT_BUF_NUM; i++)
5177
- rkisp_free_buffer(ispdev, &priv_val->buf_3dlut[i]);
51785313 for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++)
51795314 rkisp_free_buffer(ispdev, &ispdev->stats_vdev.stats_buf[i]);
5315
+ for (id = 0; id <= !!ispdev->hw_dev->unite; id++) {
5316
+ for (i = 0; i < ISP32_3DLUT_BUF_NUM; i++)
5317
+ rkisp_free_buffer(ispdev, &priv_val->buf_3dlut[id][i]);
5318
+ }
51805319 priv_val->buf_info_owner = 0;
51815320 priv_val->buf_info_cnt = 0;
51825321 priv_val->buf_info_idx = -1;
....@@ -5187,8 +5326,12 @@
51875326 static void
51885327 rkisp_params_fop_release_v32(struct rkisp_isp_params_vdev *params_vdev)
51895328 {
5190
- rkisp_deinit_mesh_buf(params_vdev, ISP32_MODULE_LDCH);
5191
- rkisp_deinit_mesh_buf(params_vdev, ISP32_MODULE_CAC);
5329
+ int id;
5330
+
5331
+ for (id = 0; id <= !!params_vdev->dev->hw_dev->unite; id++) {
5332
+ rkisp_deinit_mesh_buf(params_vdev, ISP32_MODULE_LDCH, id);
5333
+ rkisp_deinit_mesh_buf(params_vdev, ISP32_MODULE_CAC, id);
5334
+ }
51925335 }
51935336
51945337 /* Not called when the camera active, thus not isr protection. */
....@@ -5198,13 +5341,17 @@
51985341 params_vdev->isp32_params->module_ens = 0;
51995342 params_vdev->isp32_params->module_en_update = 0x7ffffffffff;
52005343
5201
- __isp_isr_other_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL);
5202
- __isp_isr_meas_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL);
5344
+ __isp_isr_other_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
5345
+ __isp_isr_meas_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
5346
+ if (params_vdev->dev->hw_dev->unite) {
5347
+ __isp_isr_other_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 1);
5348
+ __isp_isr_meas_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 1);
5349
+ }
52035350 }
52045351
52055352 static void
52065353 module_data_abandon(struct rkisp_isp_params_vdev *params_vdev,
5207
- struct isp32_isp_params_cfg *params)
5354
+ struct isp32_isp_params_cfg *params, u32 id)
52085355 {
52095356 struct rkisp_isp_params_val_v32 *priv_val;
52105357 struct isp2x_mesh_head *mesh_head;
....@@ -5215,9 +5362,9 @@
52155362 const struct isp32_ldch_cfg *arg = &params->others.ldch_cfg;
52165363
52175364 for (i = 0; i < ISP32_MESH_BUF_NUM; i++) {
5218
- if (priv_val->buf_ldch[i].vaddr &&
5219
- arg->buf_fd == priv_val->buf_ldch[i].dma_fd) {
5220
- mesh_head = (struct isp2x_mesh_head *)priv_val->buf_ldch[i].vaddr;
5365
+ if (priv_val->buf_ldch[id][i].vaddr &&
5366
+ arg->buf_fd == priv_val->buf_ldch[id][i].dma_fd) {
5367
+ mesh_head = (struct isp2x_mesh_head *)priv_val->buf_ldch[id][i].vaddr;
52215368 mesh_head->stat = MESH_BUF_CHIPINUSE;
52225369 break;
52235370 }
....@@ -5228,9 +5375,9 @@
52285375 const struct isp32_cac_cfg *arg = &params->others.cac_cfg;
52295376
52305377 for (i = 0; i < ISP32_MESH_BUF_NUM; i++) {
5231
- if (priv_val->buf_cac[i].vaddr &&
5232
- arg->buf_fd == priv_val->buf_cac[i].dma_fd) {
5233
- mesh_head = (struct isp2x_mesh_head *)priv_val->buf_cac[i].vaddr;
5378
+ if (priv_val->buf_cac[id][i].vaddr &&
5379
+ arg->buf_fd == priv_val->buf_cac[id][i].dma_fd) {
5380
+ mesh_head = (struct isp2x_mesh_head *)priv_val->buf_cac[id][i].vaddr;
52345381 mesh_head->stat = MESH_BUF_CHIPINUSE;
52355382 break;
52365383 }
....@@ -5242,10 +5389,9 @@
52425389 rkisp_params_cfg_v32(struct rkisp_isp_params_vdev *params_vdev,
52435390 u32 frame_id, enum rkisp_params_type type)
52445391 {
5392
+ struct rkisp_hw_dev *hw = params_vdev->dev->hw_dev;
52455393 struct isp32_isp_params_cfg *new_params = NULL;
52465394 struct rkisp_buffer *cur_buf = params_vdev->cur_buf;
5247
- struct rkisp_device *dev = params_vdev->dev;
5248
- struct rkisp_hw_dev *hw_dev = dev->hw_dev;
52495395
52505396 spin_lock(&params_vdev->config_lock);
52515397 if (!params_vdev->streamon)
....@@ -5264,15 +5410,27 @@
52645410 else if (new_params->module_en_update ||
52655411 (new_params->module_cfg_update & ISP32_MODULE_FORCE)) {
52665412 /* update en immediately */
5267
- __isp_isr_meas_config(params_vdev, new_params, type);
5268
- __isp_isr_other_config(params_vdev, new_params, type);
5269
- __isp_isr_other_en(params_vdev, new_params, type);
5270
- __isp_isr_meas_en(params_vdev, new_params, type);
5413
+ __isp_isr_meas_config(params_vdev, new_params, RKISP_PARAMS_ALL, 0);
5414
+ __isp_isr_other_config(params_vdev, new_params, RKISP_PARAMS_ALL, 0);
5415
+ __isp_isr_other_en(params_vdev, new_params, RKISP_PARAMS_ALL, 0);
5416
+ __isp_isr_meas_en(params_vdev, new_params, RKISP_PARAMS_ALL, 0);
52715417 new_params->module_cfg_update = 0;
5418
+ if (hw->unite) {
5419
+ struct isp32_isp_params_cfg *params = new_params + 1;
5420
+
5421
+ __isp_isr_meas_config(params_vdev, params, RKISP_PARAMS_ALL, 1);
5422
+ __isp_isr_other_config(params_vdev, params, RKISP_PARAMS_ALL, 1);
5423
+ __isp_isr_other_en(params_vdev, params, RKISP_PARAMS_ALL, 1);
5424
+ __isp_isr_meas_en(params_vdev, params, RKISP_PARAMS_ALL, 1);
5425
+ params->module_cfg_update = 0;
5426
+ }
52725427 }
52735428 if (new_params->module_cfg_update &
52745429 (ISP32_MODULE_LDCH | ISP32_MODULE_CAC)) {
5275
- module_data_abandon(params_vdev, new_params);
5430
+ module_data_abandon(params_vdev, new_params, 0);
5431
+ if (hw->unite)
5432
+ module_data_abandon(params_vdev, new_params, 1);
5433
+
52765434 }
52775435 vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
52785436 cur_buf = NULL;
....@@ -5289,22 +5447,21 @@
52895447 goto unlock;
52905448
52915449 new_params = (struct isp32_isp_params_cfg *)(cur_buf->vaddr[0]);
5292
- __isp_isr_meas_config(params_vdev, new_params, type);
5293
- __isp_isr_other_config(params_vdev, new_params, type);
5294
- __isp_isr_other_en(params_vdev, new_params, type);
5295
- __isp_isr_meas_en(params_vdev, new_params, type);
5296
- if (!hw_dev->is_single && type != RKISP_PARAMS_SHD)
5297
- __isp_config_hdrshd(params_vdev);
5450
+ if (hw->unite) {
5451
+ __isp_isr_meas_config(params_vdev, new_params + 1, type, 1);
5452
+ __isp_isr_other_config(params_vdev, new_params + 1, type, 1);
5453
+ __isp_isr_other_en(params_vdev, new_params + 1, type, 1);
5454
+ __isp_isr_meas_en(params_vdev, new_params + 1, type, 1);
5455
+ }
5456
+ __isp_isr_meas_config(params_vdev, new_params, type, 0);
5457
+ __isp_isr_other_config(params_vdev, new_params, type, 0);
5458
+ __isp_isr_other_en(params_vdev, new_params, type, 0);
5459
+ __isp_isr_meas_en(params_vdev, new_params, type, 0);
52985460
52995461 if (type != RKISP_PARAMS_IMD) {
5300
- struct rkisp_isp_params_val_v32 *priv_val =
5301
- (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
5302
-
5303
- priv_val->last_hdrmge = priv_val->cur_hdrmge;
5304
- priv_val->last_hdrdrc = priv_val->cur_hdrdrc;
5305
- priv_val->cur_hdrmge = new_params->others.hdrmge_cfg;
5306
- priv_val->cur_hdrdrc = new_params->others.drc_cfg;
53075462 new_params->module_cfg_update = 0;
5463
+ if (hw->unite)
5464
+ (new_params++)->module_cfg_update = 0;
53085465 vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
53095466 cur_buf = NULL;
53105467 }
....@@ -5317,13 +5474,15 @@
53175474 static void
53185475 rkisp_params_clear_fstflg(struct rkisp_isp_params_vdev *params_vdev)
53195476 {
5320
- u32 value = isp3_param_read(params_vdev, ISP3X_ISP_CTRL1);
5477
+ u32 value = isp3_param_read(params_vdev, ISP3X_ISP_CTRL1, 0);
53215478
53225479 value &= (ISP3X_YNR_FST_FRAME | ISP3X_ADRC_FST_FRAME |
53235480 ISP3X_DHAZ_FST_FRAME | ISP3X_CNR_FST_FRAME |
5324
- ISP3X_RAW3D_FST_FRAME);
5481
+ ISP3X_RAW3D_FST_FRAME | ISP32_SHP_FST_FRAME);
53255482 if (value) {
5326
- isp3_param_clear_bits(params_vdev, ISP3X_ISP_CTRL1, value);
5483
+ isp3_param_clear_bits(params_vdev, ISP3X_ISP_CTRL1, value, 0);
5484
+ if (params_vdev->dev->hw_dev->unite)
5485
+ isp3_param_clear_bits(params_vdev, ISP3X_ISP_CTRL1, value, 1);
53275486 }
53285487 }
53295488
....@@ -5382,6 +5541,8 @@
53825541 return -ENOMEM;
53835542
53845543 size = sizeof(struct isp32_isp_params_cfg);
5544
+ if (params_vdev->dev->hw_dev->unite)
5545
+ size *= 2;
53855546 params_vdev->isp32_params = vmalloc(size);
53865547 if (!params_vdev->isp32_params) {
53875548 kfree(priv_val);