hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
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;
537558 u32 sram_addr, data, table;
538559 int i, j;
539560
540561 if (is_check &&
541
- !(isp3_param_read(params_vdev, ISP3X_LSC_CTRL) & ISP_LSC_EN))
562
+ !(isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id) & ISP_LSC_EN))
542563 return;
543564
544565 table = isp3_param_read_direct(params_vdev, ISP3X_LSC_STATUS);
....@@ -601,21 +622,21 @@
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
....@@ -625,7 +646,7 @@
625646 if (!IS_HDR_RDBK(dev->rd_mode))
626647 isp_lsc_matrix_cfg_ddr(params_vdev, arg);
627648 else if (dev->hw_dev->is_single)
628
- isp_lsc_matrix_cfg_sram(params_vdev, arg, false);
649
+ isp_lsc_matrix_cfg_sram(params_vdev, arg, false, id);
629650 else
630651 params_rec->others.lsc_cfg = *arg;
631652 } else {
....@@ -637,27 +658,27 @@
637658 for (i = 0; i < ISP32_LSC_SIZE_TBL_SIZE / 4; i++) {
638659 /* program x size tables */
639660 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);
661
+ isp3_param_write(params_vdev, data, ISP3X_LSC_XSIZE_01 + i * 4, id);
641662 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);
663
+ isp3_param_write(params_vdev, data, ISP3X_LSC_XSIZE_89 + i * 4, id);
643664
644665 /* program x grad tables */
645666 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);
667
+ isp3_param_write(params_vdev, data, ISP3X_LSC_XGRAD_01 + i * 4, id);
647668 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);
669
+ isp3_param_write(params_vdev, data, ISP3X_LSC_XGRAD_89 + i * 4, id);
649670
650671 /* program y size tables */
651672 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);
673
+ isp3_param_write(params_vdev, data, ISP3X_LSC_YSIZE_01 + i * 4, id);
653674 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);
675
+ isp3_param_write(params_vdev, data, ISP3X_LSC_YSIZE_89 + i * 4, id);
655676
656677 /* program y grad tables */
657678 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);
679
+ isp3_param_write(params_vdev, data, ISP3X_LSC_YGRAD_01 + i * 4, id);
659680 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);
681
+ isp3_param_write(params_vdev, data, ISP3X_LSC_YGRAD_89 + i * 4, id);
661682 }
662683
663684 if (arg->sector_16x16)
....@@ -666,15 +687,15 @@
666687 lsc_ctrl &= ~ISP3X_LSC_SECTOR_16X16;
667688 if (dev->isp_ver == ISP_V32_L && !IS_HDR_RDBK(dev->rd_mode))
668689 lsc_ctrl |= ISP3X_LSC_LUT_EN;
669
- isp3_param_write(params_vdev, lsc_ctrl, ISP3X_LSC_CTRL);
690
+ isp3_param_write(params_vdev, lsc_ctrl, ISP3X_LSC_CTRL, id);
670691 }
671692
672693 static void
673
-isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
694
+isp_lsc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
674695 {
675696 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);
697
+ struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params + id;
698
+ u32 val = isp3_param_read(params_vdev, ISP3X_LSC_CTRL, id);
678699
679700 if (en == !!(val & ISP_LSC_EN))
680701 return;
....@@ -683,99 +704,99 @@
683704 val = ISP_LSC_EN | ISP32_SELF_FORCE_UPD;
684705 if (dev->isp_ver == ISP_V32_L && !IS_HDR_RDBK(dev->rd_mode))
685706 val |= ISP3X_LSC_LUT_EN;
686
- isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, val);
707
+ isp3_param_set_bits(params_vdev, ISP3X_LSC_CTRL, val, id);
687708 if (dev->isp_ver == ISP_V32 && params_vdev->dev->hw_dev->is_single)
688709 isp_lsc_matrix_cfg_sram(params_vdev,
689
- &params_rec->others.lsc_cfg, false);
710
+ &params_rec->others.lsc_cfg, false, id);
690711 } 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));
712
+ isp3_param_clear_bits(params_vdev, ISP3X_LSC_CTRL, ISP_LSC_EN, id);
713
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(8), id);
693714 }
694715 }
695716
696717 static void
697718 isp_debayer_config(struct rkisp_isp_params_vdev *params_vdev,
698
- const struct isp32_debayer_cfg *arg)
719
+ const struct isp32_debayer_cfg *arg, u32 id)
699720 {
700721 u32 value;
701722
702
- value = isp3_param_read(params_vdev, ISP3X_DEBAYER_CONTROL);
723
+ value = isp3_param_read(params_vdev, ISP3X_DEBAYER_CONTROL, id);
703724 value &= ISP_DEBAYER_EN;
704725
705726 value |= !!arg->filter_g_en << 4;
706727 if (params_vdev->dev->isp_ver == ISP_V32)
707728 value |= !!arg->filter_c_en << 8;
708
- isp3_param_write(params_vdev, value, ISP3X_DEBAYER_CONTROL);
729
+ isp3_param_write(params_vdev, value, ISP3X_DEBAYER_CONTROL, id);
709730
710731 value = (arg->max_ratio & 0x3F) << 24 | arg->select_thed << 16 |
711732 (arg->thed1 & 0x0F) << 12 | (arg->thed0 & 0x0F) << 8 |
712733 (arg->dist_scale & 0x0F) << 4 | !!arg->clip_en;
713
- isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP);
734
+ isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP, id);
714735
715736 value = (arg->filter1_coe4 & 0x1F) << 24 | (arg->filter1_coe3 & 0x1F) << 16 |
716737 (arg->filter1_coe2 & 0x1F) << 8 | (arg->filter1_coe1 & 0x1F);
717
- isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER1);
738
+ isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER1, id);
718739
719740 value = (arg->filter2_coe4 & 0x1F) << 24 | (arg->filter2_coe3 & 0x1F) << 16 |
720741 (arg->filter2_coe2 & 0x1F) << 8 | (arg->filter2_coe1 & 0x1F);
721
- isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER2);
742
+ isp3_param_write(params_vdev, value, ISP3X_DEBAYER_G_INTERP_FILTER2, id);
722743
723744 value = arg->hf_offset << 16 | (arg->gain_offset & 0xFFF);
724
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_G_INTERP_OFFSET);
745
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_G_INTERP_OFFSET, id);
725746
726747 value = (arg->offset & 0x7FF);
727
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_G_FILTER_OFFSET);
748
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_G_FILTER_OFFSET, id);
728749
729750 if (params_vdev->dev->isp_ver != ISP_V32)
730751 return;
731752
732753 value = arg->guid_gaus_coe2 << 16 |
733754 arg->guid_gaus_coe1 << 8 | arg->guid_gaus_coe0;
734
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_GUIDE_GAUS);
755
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_GUIDE_GAUS, id);
735756
736757 value = arg->ce_gaus_coe2 << 16 |
737758 arg->ce_gaus_coe1 << 8 | arg->ce_gaus_coe0;
738
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_CE_GAUS);
759
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_CE_GAUS, id);
739760
740761 value = arg->alpha_gaus_coe2 << 16 |
741762 arg->alpha_gaus_coe1 << 8 | arg->alpha_gaus_coe0;
742
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_ALPHA_GAUS);
763
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_ALPHA_GAUS, id);
743764
744765 value = (arg->loggd_offset & 0xfff) << 16 | (arg->loghf_offset & 0x1fff);
745
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_LOG_OFFSET);
766
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_LOG_OFFSET, id);
746767
747768 value = (arg->alpha_scale & 0xfffff) << 12 | (arg->alpha_offset & 0xfff);
748
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_ALPHA);
769
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_ALPHA, id);
749770
750771 value = (arg->edge_scale & 0xfffff) << 12 | (arg->edge_offset & 0xfff);
751
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_EDGE);
772
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_EDGE, id);
752773
753774 value = (arg->wgtslope & 0xfff) << 16 |
754775 (arg->exp_shift & 0x3f) << 8 | arg->ce_sgm;
755
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_IIR_0);
776
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_IIR_0, id);
756777
757778 value = (arg->wet_ghost & 0x3f) << 8 | (arg->wet_clip & 0x7f);
758
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_IIR_1);
779
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_IIR_1, id);
759780
760781 value = (arg->bf_curwgt & 0x7f) << 24 |
761782 (arg->bf_clip & 0x7f) << 16 | arg->bf_sgm;
762
- isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_BF);
783
+ isp3_param_write(params_vdev, value, ISP32_DEBAYER_C_FILTER_BF, id);
763784 }
764785
765786 static void
766
-isp_debayer_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
787
+isp_debayer_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
767788 {
768789 if (en)
769790 isp3_param_set_bits(params_vdev,
770
- ISP3X_DEBAYER_CONTROL, ISP32_MODULE_EN);
791
+ ISP3X_DEBAYER_CONTROL, ISP32_MODULE_EN, id);
771792 else
772793 isp3_param_clear_bits(params_vdev,
773
- ISP3X_DEBAYER_CONTROL, ISP32_MODULE_EN);
794
+ ISP3X_DEBAYER_CONTROL, ISP32_MODULE_EN, id);
774795 }
775796
776797 static void
777798 isp_awbgain_config(struct rkisp_isp_params_vdev *params_vdev,
778
- const struct isp32_awb_gain_cfg *arg)
799
+ const struct isp32_awb_gain_cfg *arg, u32 id)
779800 {
780801 struct rkisp_device *dev = params_vdev->dev;
781802
....@@ -791,184 +812,184 @@
791812
792813 isp3_param_write(params_vdev,
793814 ISP_PACK_2SHORT(arg->gain0_green_b, arg->gain0_green_r),
794
- ISP3X_ISP_AWB_GAIN0_G);
815
+ ISP3X_ISP_AWB_GAIN0_G, id);
795816 isp3_param_write(params_vdev,
796817 ISP_PACK_2SHORT(arg->gain0_blue, arg->gain0_red),
797
- ISP3X_ISP_AWB_GAIN0_RB);
818
+ ISP3X_ISP_AWB_GAIN0_RB, id);
798819
799820 isp3_param_write(params_vdev,
800821 ISP_PACK_2SHORT(arg->gain1_green_b, arg->gain1_green_r),
801
- ISP3X_ISP_AWB_GAIN1_G);
822
+ ISP3X_ISP_AWB_GAIN1_G, id);
802823 isp3_param_write(params_vdev,
803824 ISP_PACK_2SHORT(arg->gain1_blue, arg->gain1_red),
804
- ISP3X_ISP_AWB_GAIN1_RB);
825
+ ISP3X_ISP_AWB_GAIN1_RB, id);
805826
806827 isp3_param_write(params_vdev,
807828 ISP_PACK_2SHORT(arg->gain2_green_b, arg->gain2_green_r),
808
- ISP3X_ISP_AWB_GAIN2_G);
829
+ ISP3X_ISP_AWB_GAIN2_G, id);
809830 isp3_param_write(params_vdev,
810831 ISP_PACK_2SHORT(arg->gain2_blue, arg->gain2_red),
811
- ISP3X_ISP_AWB_GAIN2_RB);
832
+ ISP3X_ISP_AWB_GAIN2_RB, id);
812833
813834 isp3_param_write(params_vdev,
814835 ISP_PACK_2SHORT(arg->awb1_gain_gb, arg->awb1_gain_gr),
815
- ISP32_ISP_AWB1_GAIN_G);
836
+ ISP32_ISP_AWB1_GAIN_G, id);
816837 isp3_param_write(params_vdev,
817838 ISP_PACK_2SHORT(arg->awb1_gain_b, arg->awb1_gain_r),
818
- ISP32_ISP_AWB1_GAIN_RB);
839
+ ISP32_ISP_AWB1_GAIN_RB, id);
819840 }
820841
821842 static void
822
-isp_awbgain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
843
+isp_awbgain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
823844 {
824845 u32 val;
825846
826
- val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0);
847
+ val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0, id);
827848 if (en)
828849 isp3_param_write(params_vdev, val | CIF_ISP_CTRL_ISP_AWB_ENA,
829
- ISP3X_ISP_CTRL0);
850
+ ISP3X_ISP_CTRL0, id);
830851 else
831852 isp3_param_write(params_vdev, val & ~CIF_ISP_CTRL_ISP_AWB_ENA,
832
- ISP3X_ISP_CTRL0);
853
+ ISP3X_ISP_CTRL0, id);
833854 }
834855
835856 static void
836857 isp_ccm_config(struct rkisp_isp_params_vdev *params_vdev,
837
- const struct isp32_ccm_cfg *arg)
858
+ const struct isp32_ccm_cfg *arg, u32 id)
838859 {
839860 u32 value;
840861 u32 i;
841862
842
- value = isp3_param_read(params_vdev, ISP3X_CCM_CTRL);
863
+ value = isp3_param_read(params_vdev, ISP3X_CCM_CTRL, id);
843864 value &= ISP_CCM_EN;
844865
845866 value |= !!arg->asym_adj_en << 3 |
846867 !!arg->enh_adj_en << 2 |
847868 !!arg->highy_adjust_dis << 1;
848
- isp3_param_write(params_vdev, value, ISP3X_CCM_CTRL);
869
+ isp3_param_write(params_vdev, value, ISP3X_CCM_CTRL, id);
849870
850871 value = ISP_PACK_2SHORT(arg->coeff0_r, arg->coeff1_r);
851
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_R);
872
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_R, id);
852873
853874 value = ISP_PACK_2SHORT(arg->coeff2_r, arg->offset_r);
854
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_R);
875
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_R, id);
855876
856877 value = ISP_PACK_2SHORT(arg->coeff0_g, arg->coeff1_g);
857
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_G);
878
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_G, id);
858879
859880 value = ISP_PACK_2SHORT(arg->coeff2_g, arg->offset_g);
860
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_G);
881
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_G, id);
861882
862883 value = ISP_PACK_2SHORT(arg->coeff0_b, arg->coeff1_b);
863
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_B);
884
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_B, id);
864885
865886 value = ISP_PACK_2SHORT(arg->coeff2_b, arg->offset_b);
866
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_B);
887
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_B, id);
867888
868889 value = ISP_PACK_2SHORT(arg->coeff0_y, arg->coeff1_y);
869
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_Y);
890
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF0_Y, id);
870891
871892 value = ISP_PACK_2SHORT(arg->coeff2_y, 0);
872
- isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_Y);
893
+ isp3_param_write(params_vdev, value, ISP3X_CCM_COEFF1_Y, id);
873894
874895 for (i = 0; i < ISP32_CCM_CURVE_NUM / 2; i++) {
875896 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);
897
+ isp3_param_write(params_vdev, value, ISP3X_CCM_ALP_Y0 + 4 * i, id);
877898 }
878899
879900 value = (arg->right_bit & 0xf) << 4 | (arg->bound_bit & 0xf);
880
- isp3_param_write(params_vdev, value, ISP3X_CCM_BOUND_BIT);
901
+ isp3_param_write(params_vdev, value, ISP3X_CCM_BOUND_BIT, id);
881902
882903 value = (arg->color_coef1_g2y & 0x7ff) << 16 |
883904 (arg->color_coef0_r2y & 0x7ff);
884
- isp3_param_write(params_vdev, value, ISP32_CCM_ENHANCE0);
905
+ isp3_param_write(params_vdev, value, ISP32_CCM_ENHANCE0, id);
885906
886907 value = (arg->color_enh_rat_max & 0x3fff) << 16 |
887908 (arg->color_coef2_b2y & 0x7ff);
888
- isp3_param_write(params_vdev, value, ISP32_CCM_ENHANCE1);
909
+ isp3_param_write(params_vdev, value, ISP32_CCM_ENHANCE1, id);
889910 }
890911
891912 static void
892
-isp_ccm_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
913
+isp_ccm_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
893914 {
894915 if (en)
895
- isp3_param_set_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN);
916
+ isp3_param_set_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN, id);
896917 else
897
- isp3_param_clear_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN);
918
+ isp3_param_clear_bits(params_vdev, ISP3X_CCM_CTRL, ISP_CCM_EN, id);
898919 }
899920
900921 static void
901922 isp_goc_config(struct rkisp_isp_params_vdev *params_vdev,
902
- const struct isp3x_gammaout_cfg *arg)
923
+ const struct isp3x_gammaout_cfg *arg, u32 id)
903924 {
904925 int i;
905926 u32 value;
906927
907
- value = isp3_param_read(params_vdev, ISP3X_GAMMA_OUT_CTRL);
928
+ value = isp3_param_read(params_vdev, ISP3X_GAMMA_OUT_CTRL, id);
908929 value &= ISP3X_GAMMA_OUT_EN;
909930 value |= !!arg->equ_segm << 1 | !!arg->finalx4_dense_en << 2;
910
- isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_CTRL);
931
+ isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_CTRL, id);
911932
912
- isp3_param_write(params_vdev, arg->offset, ISP3X_GAMMA_OUT_OFFSET);
933
+ isp3_param_write(params_vdev, arg->offset, ISP3X_GAMMA_OUT_OFFSET, id);
913934 for (i = 0; i < ISP32_GAMMA_OUT_MAX_SAMPLES / 2; i++) {
914935 value = ISP_PACK_2SHORT(arg->gamma_y[2 * i],
915936 arg->gamma_y[2 * i + 1]);
916
- isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_Y0 + i * 4);
937
+ isp3_param_write(params_vdev, value, ISP3X_GAMMA_OUT_Y0 + i * 4, id);
917938 }
918
- isp3_param_write(params_vdev, arg->gamma_y[2 * i], ISP3X_GAMMA_OUT_Y0 + i * 4);
939
+ isp3_param_write(params_vdev, arg->gamma_y[2 * i], ISP3X_GAMMA_OUT_Y0 + i * 4, id);
919940 }
920941
921942 static void
922
-isp_goc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
943
+isp_goc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
923944 {
924945 if (en)
925
- isp3_param_set_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, ISP3X_GAMMA_OUT_EN);
946
+ isp3_param_set_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, ISP3X_GAMMA_OUT_EN, id);
926947 else
927
- isp3_param_clear_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, ISP3X_GAMMA_OUT_EN);
948
+ isp3_param_clear_bits(params_vdev, ISP3X_GAMMA_OUT_CTRL, ISP3X_GAMMA_OUT_EN, id);
928949 }
929950
930951 static void
931952 isp_cproc_config(struct rkisp_isp_params_vdev *params_vdev,
932
- const struct isp2x_cproc_cfg *arg)
953
+ const struct isp2x_cproc_cfg *arg, u32 id)
933954 {
934955 u32 quantization = params_vdev->quantization;
935956
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);
957
+ isp3_param_write(params_vdev, arg->contrast, ISP3X_CPROC_CONTRAST, id);
958
+ isp3_param_write(params_vdev, arg->hue, ISP3X_CPROC_HUE, id);
959
+ isp3_param_write(params_vdev, arg->sat, ISP3X_CPROC_SATURATION, id);
960
+ isp3_param_write(params_vdev, arg->brightness, ISP3X_CPROC_BRIGHTNESS, id);
940961
941962 if (quantization != V4L2_QUANTIZATION_FULL_RANGE) {
942963 isp3_param_clear_bits(params_vdev, ISP3X_CPROC_CTRL,
943964 CIF_C_PROC_YOUT_FULL |
944965 CIF_C_PROC_YIN_FULL |
945
- CIF_C_PROC_COUT_FULL);
966
+ CIF_C_PROC_COUT_FULL, id);
946967 } else {
947968 isp3_param_set_bits(params_vdev, ISP3X_CPROC_CTRL,
948969 CIF_C_PROC_YOUT_FULL |
949970 CIF_C_PROC_YIN_FULL |
950
- CIF_C_PROC_COUT_FULL);
971
+ CIF_C_PROC_COUT_FULL, id);
951972 }
952973 }
953974
954975 static void
955
-isp_cproc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
976
+isp_cproc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
956977 {
957978 if (en)
958979 isp3_param_set_bits(params_vdev, ISP3X_CPROC_CTRL,
959
- CIF_C_PROC_CTR_ENABLE);
980
+ CIF_C_PROC_CTR_ENABLE, id);
960981 else
961982 isp3_param_clear_bits(params_vdev, ISP3X_CPROC_CTRL,
962
- CIF_C_PROC_CTR_ENABLE);
983
+ CIF_C_PROC_CTR_ENABLE, id);
963984 }
964985
965986 static void
966987 isp_ie_config(struct rkisp_isp_params_vdev *params_vdev,
967
- const struct isp2x_ie_cfg *arg)
988
+ const struct isp2x_ie_cfg *arg, u32 id)
968989 {
969990 u32 eff_ctrl;
970991
971
- eff_ctrl = isp3_param_read(params_vdev, ISP3X_IMG_EFF_CTRL);
992
+ eff_ctrl = isp3_param_read(params_vdev, ISP3X_IMG_EFF_CTRL, id);
972993 eff_ctrl &= ~CIF_IMG_EFF_CTRL_MODE_MASK;
973994
974995 if (params_vdev->quantization == V4L2_QUANTIZATION_FULL_RANGE)
....@@ -979,7 +1000,7 @@
9791000 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_SEPIA;
9801001 break;
9811002 case V4L2_COLORFX_SET_CBCR:
982
- isp3_param_write(params_vdev, arg->eff_tint, ISP3X_IMG_EFF_TINT);
1003
+ isp3_param_write(params_vdev, arg->eff_tint, ISP3X_IMG_EFF_TINT, id);
9831004 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_SEPIA;
9841005 break;
9851006 /*
....@@ -989,25 +1010,25 @@
9891010 case V4L2_COLORFX_AQUA:
9901011 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_COLOR_SEL;
9911012 isp3_param_write(params_vdev, arg->color_sel,
992
- ISP3X_IMG_EFF_COLOR_SEL);
1013
+ ISP3X_IMG_EFF_COLOR_SEL, id);
9931014 break;
9941015 case V4L2_COLORFX_EMBOSS:
9951016 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_EMBOSS;
9961017 isp3_param_write(params_vdev, arg->eff_mat_1,
997
- CIF_IMG_EFF_MAT_1);
1018
+ CIF_IMG_EFF_MAT_1, id);
9981019 isp3_param_write(params_vdev, arg->eff_mat_2,
999
- CIF_IMG_EFF_MAT_2);
1020
+ CIF_IMG_EFF_MAT_2, id);
10001021 isp3_param_write(params_vdev, arg->eff_mat_3,
1001
- CIF_IMG_EFF_MAT_3);
1022
+ CIF_IMG_EFF_MAT_3, id);
10021023 break;
10031024 case V4L2_COLORFX_SKETCH:
10041025 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_SKETCH;
10051026 isp3_param_write(params_vdev, arg->eff_mat_3,
1006
- CIF_IMG_EFF_MAT_3);
1027
+ CIF_IMG_EFF_MAT_3, id);
10071028 isp3_param_write(params_vdev, arg->eff_mat_4,
1008
- CIF_IMG_EFF_MAT_4);
1029
+ CIF_IMG_EFF_MAT_4, id);
10091030 isp3_param_write(params_vdev, arg->eff_mat_5,
1010
- CIF_IMG_EFF_MAT_5);
1031
+ CIF_IMG_EFF_MAT_5, id);
10111032 break;
10121033 case V4L2_COLORFX_BW:
10131034 eff_ctrl |= CIF_IMG_EFF_CTRL_MODE_BLACKWHITE;
....@@ -1019,25 +1040,26 @@
10191040 break;
10201041 }
10211042
1022
- isp3_param_write(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL);
1043
+ isp3_param_write(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL, id);
10231044 }
10241045
10251046 static void
1026
-isp_ie_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1047
+isp_ie_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
10271048 {
10281049 if (en) {
10291050 isp3_param_set_bits(params_vdev, ISP3X_IMG_EFF_CTRL,
10301051 CIF_IMG_EFF_CTRL_CFG_UPD |
1031
- CIF_IMG_EFF_CTRL_ENABLE);
1052
+ CIF_IMG_EFF_CTRL_ENABLE, id);
10321053 } else {
10331054 isp3_param_clear_bits(params_vdev, ISP3X_IMG_EFF_CTRL,
1034
- CIF_IMG_EFF_CTRL_ENABLE);
1055
+ CIF_IMG_EFF_CTRL_ENABLE, id);
10351056 }
10361057 }
10371058
10381059 static void
10391060 isp_rawae_config_foraf(struct rkisp_isp_params_vdev *params_vdev,
1040
- const struct isp32_rawaf_meas_cfg *arg)
1061
+ const struct isp32_rawaf_meas_cfg *arg,
1062
+ struct isp2x_window *win, u32 id)
10411063 {
10421064 u32 block_hsize, block_vsize;
10431065 u32 addr, value;
....@@ -1052,33 +1074,40 @@
10521074 } else {
10531075 addr = ISP3X_RAWAE_BIG1_BASE;
10541076 }
1055
- value = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL);
1077
+ value = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id);
10561078 value &= ISP3X_RAWAE_BIG_EN;
10571079
10581080 value |= ISP3X_RAWAE_BIG_WND0_NUM(wnd_num_idx);
1059
- isp3_param_write(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL);
1081
+ isp3_param_write(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL, id);
10601082
10611083 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);
1084
+ ISP_PACK_2SHORT(win->h_offs, win->v_offs),
1085
+ addr + ISP3X_RAWAE_BIG_OFFSET, id);
10641086
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];
1087
+ block_hsize = win->h_size / ae_wnd_num[wnd_num_idx];
1088
+ block_vsize = win->v_size / ae_wnd_num[wnd_num_idx];
10671089 isp3_param_write(params_vdev,
10681090 ISP_PACK_2SHORT(block_hsize, block_vsize),
1069
- addr + ISP3X_RAWAE_BIG_BLK_SIZE);
1091
+ addr + ISP3X_RAWAE_BIG_BLK_SIZE, id);
10701092 }
10711093
10721094 static void
10731095 isp_rawaf_config(struct rkisp_isp_params_vdev *params_vdev,
1074
- const struct isp32_rawaf_meas_cfg *arg)
1096
+ const struct isp32_rawaf_meas_cfg *arg, u32 id)
10751097 {
1098
+ struct rkisp_device *dev = params_vdev->dev;
1099
+ struct v4l2_rect *out_crop = &dev->isp_sdev.out_crop;
1100
+ u32 width = out_crop->width, height = out_crop->height;
10761101 u32 i, var, ctrl;
10771102 u16 h_size, v_size;
10781103 u16 h_offs, v_offs;
10791104 u8 gaus_en, viir_en, v1_fir_sel;
10801105 size_t num_of_win = min_t(size_t, ARRAY_SIZE(arg->win),
10811106 arg->num_afm_win);
1107
+ struct isp2x_window win_ae;
1108
+
1109
+ if (dev->hw_dev->unite)
1110
+ width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
10821111
10831112 for (i = 0; i < num_of_win; i++) {
10841113 h_size = arg->win[i].h_size;
....@@ -1086,9 +1115,19 @@
10861115 h_offs = arg->win[i].h_offs < 2 ? 2 : arg->win[i].h_offs;
10871116 v_offs = arg->win[i].v_offs < 1 ? 1 : arg->win[i].v_offs;
10881117
1118
+ if (!v_size || v_size + v_offs - 2 > height)
1119
+ v_size = height - v_offs - 2;
1120
+ if (!h_size || h_size + h_offs - 2 > width)
1121
+ h_size = width - h_offs - 2;
1122
+
10891123 if (i == 0) {
10901124 h_size = h_size / 15 * 15;
10911125 v_size = v_size / 15 * 15;
1126
+
1127
+ win_ae.h_size = h_size;
1128
+ win_ae.v_size = v_size;
1129
+ win_ae.h_offs = h_offs;
1130
+ win_ae.v_offs = v_offs;
10921131 }
10931132
10941133 /*
....@@ -1097,7 +1136,7 @@
10971136 */
10981137 isp3_param_write(params_vdev,
10991138 ISP_PACK_2SHORT(v_offs, h_offs),
1100
- ISP3X_RAWAF_OFFSET_WINA + i * 8);
1139
+ ISP3X_RAWAF_OFFSET_WINA + i * 8, id);
11011140
11021141 /*
11031142 * value must be smaller than [width of picture -2]
....@@ -1105,7 +1144,7 @@
11051144 */
11061145 isp3_param_write(params_vdev,
11071146 ISP_PACK_2SHORT(v_size, h_size),
1108
- ISP3X_RAWAF_SIZE_WINA + i * 8);
1147
+ ISP3X_RAWAF_SIZE_WINA + i * 8, id);
11091148 }
11101149
11111150 var = 0;
....@@ -1114,60 +1153,60 @@
11141153 var |= ISP3X_RAWAF_INTLINE0_EN << i;
11151154 var |= ISP3X_RAWAF_INELINE0(arg->line_num[i]) << 4 * i;
11161155 }
1117
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_INT_LINE);
1156
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_INT_LINE, id);
11181157
11191158 if (params_vdev->dev->isp_ver == ISP_V32_L) {
11201159 var = (arg->hldg_dilate_num & 0x7) << 16 |
11211160 !!arg->bls_en << 12 | (arg->bls_offset & 0x1FF);
1122
- isp3_param_write(params_vdev, var, ISP32L_RAWAF_CTRL1);
1161
+ isp3_param_write(params_vdev, var, ISP32L_RAWAF_CTRL1, id);
11231162 }
11241163
1125
- var = isp3_param_read(params_vdev, ISP3X_RAWAF_THRES);
1164
+ var = isp3_param_read(params_vdev, ISP3X_RAWAF_THRES, id);
11261165 var &= ~0xFFFF;
11271166 var |= arg->afm_thres;
1128
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_THRES);
1167
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_THRES, id);
11291168
11301169 var = (arg->lum_var_shift[1] & 0x7) << 20 | (arg->lum_var_shift[0] & 0x7) << 16 |
11311170 (arg->afm_var_shift[1] & 0x7) << 4 | (arg->afm_var_shift[0] & 0x7);
11321171 if (params_vdev->dev->isp_ver == ISP_V32_L)
11331172 var |= (arg->tnrin_shift & 0xf) << 8;
1134
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_VAR_SHIFT);
1173
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_VAR_SHIFT, id);
11351174
11361175 for (i = 0; i < ISP32_RAWAF_GAMMA_NUM / 2; i++) {
11371176 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);
1177
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_GAMMA_Y0 + i * 4, id);
11391178 }
11401179 var = ISP_PACK_2SHORT(arg->gamma_y[16], 0);
1141
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_GAMMA_Y8);
1180
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_GAMMA_Y8, id);
11421181
11431182 var = (arg->v1iir_var_shift & 0x7) << 8 | (arg->h1iir_var_shift & 0x7);
11441183 if (params_vdev->dev->isp_ver == ISP_V32)
11451184 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);
1185
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_HVIIR_VAR_SHIFT, id);
11471186
11481187 var = ISP_PACK_2SHORT(arg->h_fv_thresh, arg->v_fv_thresh);
1149
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_HIIR_THRESH);
1188
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_HIIR_THRESH, id);
11501189
11511190 for (i = 0; i < ISP32_RAWAF_VFIR_COE_NUM; i++) {
11521191 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);
1192
+ isp3_param_write(params_vdev, var, ISP32_RAWAF_V_FIR_COE0 + i * 4, id);
11541193 }
11551194
11561195 for (i = 0; i < ISP32_RAWAF_GAUS_COE_NUM / 4; i++) {
11571196 var = ISP_PACK_4BYTE(arg->gaus_coe[i * 4], arg->gaus_coe[i * 4 + 1],
11581197 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);
1198
+ isp3_param_write(params_vdev, var, ISP32_RAWAF_GAUS_COE03 + i * 4, id);
11601199 }
11611200 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);
1201
+ isp3_param_write(params_vdev, var, ISP32_RAWAF_GAUS_COE8, id);
11631202
1164
- isp3_param_write(params_vdev, arg->highlit_thresh, ISP3X_RAWAF_HIGHLIT_THRESH);
1203
+ isp3_param_write(params_vdev, arg->highlit_thresh, ISP3X_RAWAF_HIGHLIT_THRESH, id);
11651204
11661205 if (params_vdev->dev->isp_ver == ISP_V32_L) {
11671206 var = ISP_PACK_2SHORT(arg->h_fv_limit, arg->h_fv_slope);
1168
- isp3_param_write(params_vdev, var, ISP32L_RAWAF_CORING_H);
1207
+ isp3_param_write(params_vdev, var, ISP32L_RAWAF_CORING_H, id);
11691208 var = ISP_PACK_2SHORT(arg->v_fv_limit, arg->v_fv_slope);
1170
- isp3_param_write(params_vdev, var, ISP32L_RAWAF_CORING_V);
1209
+ isp3_param_write(params_vdev, var, ISP32L_RAWAF_CORING_V, id);
11711210 }
11721211
11731212 viir_en = arg->viir_en;
....@@ -1176,23 +1215,23 @@
11761215 if (viir_en == 0)
11771216 v1_fir_sel = 0;
11781217
1179
- ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL);
1218
+ ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL, id);
11801219 ctrl &= ISP3X_RAWAF_EN;
11811220 if (arg->hiir_en) {
11821221 ctrl |= ISP3X_RAWAF_HIIR_EN;
11831222 for (i = 0; i < ISP32_RAWAF_HIIR_COE_NUM / 2; i++) {
11841223 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);
1224
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_H1_IIR1_COE01 + i * 4, id);
11861225 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);
1226
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_H1_IIR2_COE01 + i * 4, id);
11881227
11891228 if (params_vdev->dev->isp_ver == ISP_V32_L)
11901229 continue;
11911230
11921231 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);
1232
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_H2_IIR1_COE01 + i * 4, id);
11941233 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);
1234
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_H2_IIR2_COE01 + i * 4, id);
11961235 }
11971236 }
11981237 if (viir_en) {
....@@ -1202,7 +1241,7 @@
12021241 var = ISP_PACK_2SHORT(arg->v1iir_coe[i], arg->v2iir_coe[i]);
12031242 else
12041243 var = ISP_PACK_2SHORT(arg->v1iir_coe[i], 0);
1205
- isp3_param_write(params_vdev, var, ISP3X_RAWAF_V_IIR_COE0 + i * 4);
1244
+ isp3_param_write(params_vdev, var, ISP3X_RAWAF_V_IIR_COE0 + i * 4, id);
12061245 }
12071246 }
12081247 if (arg->ldg_en) {
....@@ -1212,12 +1251,12 @@
12121251 arg->curve_h[i].ldg_lumth |
12131252 arg->curve_h[i].ldg_gain << 8 |
12141253 arg->curve_h[i].ldg_gslp << 16,
1215
- ISP3X_RAWAF_H_CURVEL + i * 16);
1254
+ ISP3X_RAWAF_H_CURVEL + i * 16, id);
12161255 isp3_param_write(params_vdev,
12171256 arg->curve_v[i].ldg_lumth |
12181257 arg->curve_v[i].ldg_gain << 8 |
12191258 arg->curve_v[i].ldg_gslp << 16,
1220
- ISP3X_RAWAF_V_CURVEL + i * 16);
1259
+ ISP3X_RAWAF_V_CURVEL + i * 16, id);
12211260 }
12221261 }
12231262
....@@ -1239,9 +1278,9 @@
12391278 !!arg->v1_acc_mode << 26 |
12401279 !!arg->v2_acc_mode << 27 |
12411280 !!arg->ae_sel << 29;
1242
- isp3_param_write(params_vdev, ctrl, ISP3X_RAWAF_CTRL);
1281
+ isp3_param_write(params_vdev, ctrl, ISP3X_RAWAF_CTRL, id);
12431282
1244
- ctrl = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH);
1283
+ ctrl = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id);
12451284 if (((ctrl & ISP3X_RAWAF_SEL(3)) != ISP3X_RAWAF_SEL(arg->rawaf_sel)) ||
12461285 (((!!(ctrl & ISP32L_BNR2AF_SEL)) != arg->bnr2af_sel) &&
12471286 (params_vdev->dev->isp_ver == ISP_V32_L))) {
....@@ -1254,16 +1293,16 @@
12541293 else
12551294 ctrl &= ~ISP32L_BNR2AF_SEL;
12561295 }
1257
- isp3_param_write(params_vdev, ctrl, ISP3X_VI_ISP_PATH);
1296
+ isp3_param_write(params_vdev, ctrl, ISP3X_VI_ISP_PATH, id);
12581297 }
12591298
12601299 params_vdev->afaemode_en = arg->ae_mode;
12611300 if (params_vdev->afaemode_en)
1262
- isp_rawae_config_foraf(params_vdev, arg);
1301
+ isp_rawae_config_foraf(params_vdev, arg, &win_ae, id);
12631302 }
12641303
12651304 static void
1266
-isp_rawae_enable_foraf(struct rkisp_isp_params_vdev *params_vdev, bool en)
1305
+isp_rawae_enable_foraf(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
12671306 {
12681307 u32 exp_ctrl;
12691308 u32 addr = ISP3X_RAWAE_BIG1_BASE;
....@@ -1271,20 +1310,20 @@
12711310 if (params_vdev->dev->isp_ver == ISP_V32_L)
12721311 addr = ISP3X_RAWAE_LITE_BASE;
12731312
1274
- exp_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL);
1313
+ exp_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id);
12751314 exp_ctrl &= ~ISP32_REG_WR_MASK;
12761315 if (en)
12771316 exp_ctrl |= ISP32_MODULE_EN;
12781317 else
12791318 exp_ctrl &= ~ISP32_MODULE_EN;
12801319
1281
- isp3_param_write(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL);
1320
+ isp3_param_write(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL, id);
12821321 }
12831322
12841323 static void
1285
-isp_rawaf_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1324
+isp_rawaf_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
12861325 {
1287
- u32 afm_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL);
1326
+ u32 afm_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAF_CTRL, id);
12881327
12891328 afm_ctrl &= ~ISP32_REG_WR_MASK;
12901329 if (en)
....@@ -1292,9 +1331,9 @@
12921331 else
12931332 afm_ctrl &= ~ISP3X_RAWAF_EN;
12941333
1295
- isp3_param_write(params_vdev, afm_ctrl, ISP3X_RAWAF_CTRL);
1334
+ isp3_param_write(params_vdev, afm_ctrl, ISP3X_RAWAF_CTRL, id);
12961335 if (params_vdev->afaemode_en) {
1297
- isp_rawae_enable_foraf(params_vdev, en);
1336
+ isp_rawae_enable_foraf(params_vdev, en, id);
12981337 if (!en)
12991338 params_vdev->afaemode_en = false;
13001339 }
....@@ -1302,78 +1341,78 @@
13021341
13031342 static void
13041343 isp_rawaelite_config(struct rkisp_isp_params_vdev *params_vdev,
1305
- const struct isp2x_rawaelite_meas_cfg *arg)
1344
+ const struct isp2x_rawaelite_meas_cfg *arg, u32 id)
13061345 {
13071346 struct rkisp_device *ispdev = params_vdev->dev;
13081347 struct v4l2_rect *out_crop = &ispdev->isp_sdev.out_crop;
1309
- u32 width = out_crop->width;
1348
+ u32 width = out_crop->width, height = out_crop->height;
1349
+ u32 h_size, v_size, h_offs, v_offs;
13101350 u32 block_hsize, block_vsize, value;
13111351 u32 wnd_num_idx = 0;
13121352 const u32 ae_wnd_num[] = {1, 5};
13131353
1314
- value = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL);
1354
+ value = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL, id);
13151355 value &= ~(ISP3X_RAWAE_LITE_WNDNUM);
13161356 if (arg->wnd_num) {
13171357 value |= ISP3X_RAWAE_LITE_WNDNUM;
13181358 wnd_num_idx = 1;
13191359 }
13201360 value &= ~ISP32_REG_WR_MASK;
1321
- isp3_param_write(params_vdev, value, ISP3X_RAWAE_LITE_CTRL);
1361
+ isp3_param_write(params_vdev, value, ISP3X_RAWAE_LITE_CTRL, id);
13221362
1363
+ h_offs = arg->win.h_offs & ~0x1;
1364
+ v_offs = arg->win.v_offs & ~0x1;
13231365 isp3_param_write(params_vdev,
1324
- ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs),
1325
- ISP3X_RAWAE_LITE_OFFSET);
1366
+ ISP_PACK_2SHORT(h_offs, v_offs),
1367
+ ISP3X_RAWAE_LITE_OFFSET, id);
13261368
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)
1369
+ if (ispdev->hw_dev->unite)
13301370 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;
1371
+ h_size = arg->win.h_size;
1372
+ v_size = arg->win.v_size;
1373
+ if (!h_size || h_size + h_offs + 1 > width)
1374
+ h_size = width - h_offs - 1;
1375
+ if (!v_size || v_size + v_offs + 2 > height)
1376
+ v_size = height - v_offs - 2;
1377
+ block_hsize = (h_size / ae_wnd_num[wnd_num_idx]) & ~0x1;
1378
+ block_vsize = (v_size / ae_wnd_num[wnd_num_idx]) & ~0x1;
13391379 isp3_param_write(params_vdev,
13401380 ISP_PACK_2SHORT(block_hsize, block_vsize),
1341
- ISP3X_RAWAE_LITE_BLK_SIZ);
1381
+ ISP3X_RAWAE_LITE_BLK_SIZ, id);
13421382
1343
- value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH);
1383
+ value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id);
13441384 if ((value & ISP3X_RAWAE012_SEL(3)) != ISP3X_RAWAE012_SEL(arg->rawae_sel)) {
13451385 value &= ~(ISP3X_RAWAE012_SEL(3));
13461386 value |= ISP3X_RAWAE012_SEL(arg->rawae_sel);
1347
- isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH);
1387
+ isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id);
13481388 }
13491389 }
13501390
13511391 static void
1352
-isp_rawaelite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1392
+isp_rawaelite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
13531393 {
13541394 u32 exp_ctrl;
13551395
1356
- exp_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL);
1396
+ exp_ctrl = isp3_param_read(params_vdev, ISP3X_RAWAE_LITE_CTRL, id);
13571397 exp_ctrl &= ~ISP32_REG_WR_MASK;
13581398 if (en)
13591399 exp_ctrl |= ISP3X_RAWAE_LITE_EN;
13601400 else
13611401 exp_ctrl &= ~ISP3X_RAWAE_LITE_EN;
13621402
1363
- isp3_param_write(params_vdev, exp_ctrl, ISP3X_RAWAE_LITE_CTRL);
1403
+ isp3_param_write(params_vdev, exp_ctrl, ISP3X_RAWAE_LITE_CTRL, id);
13641404 }
13651405
13661406 static void
13671407 isp_rawaebig_config(struct rkisp_isp_params_vdev *params_vdev,
13681408 const struct isp2x_rawaebig_meas_cfg *arg,
1369
- u32 blk_no)
1409
+ u32 blk_no, u32 id)
13701410 {
13711411 struct rkisp_device *ispdev = params_vdev->dev;
13721412 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;
1413
+ u32 width = out_crop->width, height = out_crop->height;
1414
+ u32 addr, i, value, h_size, v_size, h_offs, v_offs;
1415
+ u32 block_hsize, block_vsize, wnd_num_idx = 0;
13771416 const u32 ae_wnd_num[] = {
13781417 1, 5, 15, 15
13791418 };
....@@ -1392,7 +1431,7 @@
13921431 }
13931432
13941433 /* avoid to override the old enable value */
1395
- value = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL);
1434
+ value = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id);
13961435 value &= ISP3X_RAWAE_BIG_EN;
13971436
13981437 wnd_num_idx = arg->wnd_num;
....@@ -1408,59 +1447,65 @@
14081447 if (arg->subwin_en[3])
14091448 value |= ISP3X_RAWAE_BIG_WND4_EN;
14101449 }
1411
- isp3_param_write(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL);
1450
+ isp3_param_write(params_vdev, value, addr + ISP3X_RAWAE_BIG_CTRL, id);
14121451
1452
+ h_offs = arg->win.h_offs & ~0x1;
1453
+ v_offs = arg->win.v_offs & ~0x1;
14131454 isp3_param_write(params_vdev,
1414
- ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs),
1415
- addr + ISP3X_RAWAE_BIG_OFFSET);
1455
+ ISP_PACK_2SHORT(h_offs, v_offs),
1456
+ addr + ISP3X_RAWAE_BIG_OFFSET, id);
14161457
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)
1458
+ if (ispdev->hw_dev->unite)
14201459 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;
1460
+ h_size = arg->win.h_size;
1461
+ v_size = arg->win.v_size;
1462
+ if (!h_size || h_size + h_offs + 1 > width)
1463
+ h_size = width - h_offs - 1;
1464
+ if (!v_size || v_size + v_offs + 2 > height)
1465
+ v_size = height - v_offs - 2;
1466
+ block_hsize = (h_size / ae_wnd_num[wnd_num_idx]) & ~0x1;
1467
+ block_vsize = (v_size / ae_wnd_num[wnd_num_idx]) & ~0x1;
14291468 isp3_param_write(params_vdev,
14301469 ISP_PACK_2SHORT(block_hsize, block_vsize),
1431
- addr + ISP3X_RAWAE_BIG_BLK_SIZE);
1470
+ addr + ISP3X_RAWAE_BIG_BLK_SIZE, id);
14321471
14331472 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);
1473
+ h_offs = arg->subwin[i].h_offs & ~0x1;
1474
+ v_offs = arg->subwin[i].v_offs & ~0x1;
1475
+ isp3_param_write(params_vdev, ISP_PACK_2SHORT(h_offs, v_offs),
1476
+ addr + ISP3X_RAWAE_BIG_WND1_OFFSET + 8 * i, id);
14371477
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);
1478
+ v_size = arg->subwin[i].v_size;
1479
+ h_size = arg->subwin[i].h_size;
1480
+ if (!h_size || h_size + h_offs > width)
1481
+ h_size = width - h_offs;
1482
+ if (!v_size || v_size + v_offs > height)
1483
+ v_size = height - v_offs;
1484
+ h_size = (h_size + h_offs) & ~0x1;
1485
+ v_size = (v_size + v_offs) & ~0x1;
1486
+ isp3_param_write(params_vdev, ISP_PACK_2SHORT(h_size, v_size),
1487
+ addr + ISP3X_RAWAE_BIG_WND1_SIZE + 8 * i, id);
14431488 }
14441489
1445
- value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH);
1490
+ value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id);
14461491 if (blk_no == 0) {
14471492 if ((value & ISP3X_RAWAE3_SEL(3)) != ISP3X_RAWAE3_SEL(arg->rawae_sel)) {
14481493 value &= ~(ISP3X_RAWAE3_SEL(3));
14491494 value |= ISP3X_RAWAE3_SEL(arg->rawae_sel);
1450
- isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH);
1495
+ isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id);
14511496 }
14521497 } else {
14531498 if ((value & ISP3X_RAWAE012_SEL(3)) != ISP3X_RAWAE012_SEL(arg->rawae_sel)) {
14541499 value &= ~(ISP3X_RAWAE012_SEL(3));
14551500 value |= ISP3X_RAWAE012_SEL(arg->rawae_sel);
1456
- isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH);
1501
+ isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id);
14571502 }
14581503 }
14591504 }
14601505
14611506 static void
14621507 isp_rawaebig_enable(struct rkisp_isp_params_vdev *params_vdev,
1463
- bool en, u32 blk_no)
1508
+ bool en, u32 blk_no, u32 id)
14641509 {
14651510 u32 exp_ctrl;
14661511 u32 addr;
....@@ -1478,117 +1523,120 @@
14781523 break;
14791524 }
14801525
1481
- exp_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL);
1526
+ exp_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWAE_BIG_CTRL, id);
14821527 exp_ctrl &= ~ISP32_REG_WR_MASK;
14831528 if (en)
14841529 exp_ctrl |= ISP32_MODULE_EN;
14851530 else
14861531 exp_ctrl &= ~ISP32_MODULE_EN;
14871532
1488
- isp3_param_write(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL);
1533
+ isp3_param_write(params_vdev, exp_ctrl, addr + ISP3X_RAWAE_BIG_CTRL, id);
14891534 }
14901535
14911536 static void
14921537 isp_rawae1_config(struct rkisp_isp_params_vdev *params_vdev,
1493
- const struct isp2x_rawaebig_meas_cfg *arg)
1538
+ const struct isp2x_rawaebig_meas_cfg *arg, u32 id)
14941539 {
1495
- isp_rawaebig_config(params_vdev, arg, 1);
1540
+ isp_rawaebig_config(params_vdev, arg, 1, id);
14961541 }
14971542
14981543 static void
1499
-isp_rawae1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1544
+isp_rawae1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
15001545 {
1501
- isp_rawaebig_enable(params_vdev, en, 1);
1546
+ isp_rawaebig_enable(params_vdev, en, 1, id);
15021547 }
15031548
15041549 static void
15051550 isp_rawae2_config(struct rkisp_isp_params_vdev *params_vdev,
1506
- const struct isp2x_rawaebig_meas_cfg *arg)
1551
+ const struct isp2x_rawaebig_meas_cfg *arg, u32 id)
15071552 {
1508
- isp_rawaebig_config(params_vdev, arg, 2);
1553
+ isp_rawaebig_config(params_vdev, arg, 2, id);
15091554 }
15101555
15111556 static void
1512
-isp_rawae2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1557
+isp_rawae2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
15131558 {
1514
- isp_rawaebig_enable(params_vdev, en, 2);
1559
+ isp_rawaebig_enable(params_vdev, en, 2, id);
15151560 }
15161561
15171562 static void
15181563 isp_rawae3_config(struct rkisp_isp_params_vdev *params_vdev,
1519
- const struct isp2x_rawaebig_meas_cfg *arg)
1564
+ const struct isp2x_rawaebig_meas_cfg *arg, u32 id)
15201565 {
1521
- isp_rawaebig_config(params_vdev, arg, 0);
1566
+ isp_rawaebig_config(params_vdev, arg, 0, id);
15221567 }
15231568
15241569 static void
1525
-isp_rawae3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
1570
+isp_rawae3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
15261571 {
1527
- isp_rawaebig_enable(params_vdev, en, 0);
1572
+ isp_rawaebig_enable(params_vdev, en, 0, id);
15281573 }
15291574
15301575 static void
15311576 isp_rawawb_cfg_sram(struct rkisp_isp_params_vdev *params_vdev,
1532
- const struct isp32_rawawb_meas_cfg *arg, bool is_check)
1577
+ const struct isp32_rawawb_meas_cfg *arg, bool is_check, u32 id)
15331578 {
15341579 u32 i, val = ISP32_MODULE_EN;
15351580
15361581 if (params_vdev->dev->isp_ver == ISP_V32 && is_check &&
1537
- !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL) & val))
1582
+ !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id) & val))
15381583 return;
15391584
15401585 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);
1586
+ isp3_param_write_direct(params_vdev,
1587
+ (arg->wp_blk_wei_w[5 * i] & 0x3f) |
1588
+ (arg->wp_blk_wei_w[5 * i + 1] & 0x3f) << 6 |
1589
+ (arg->wp_blk_wei_w[5 * i + 2] & 0x3f) << 12 |
1590
+ (arg->wp_blk_wei_w[5 * i + 3] & 0x3f) << 18 |
1591
+ (arg->wp_blk_wei_w[5 * i + 4] & 0x3f) << 24,
1592
+ ISP3X_RAWAWB_WRAM_DATA_BASE);
15481593 }
15491594 }
15501595
15511596 static void
15521597 isp_rawawb_config(struct rkisp_isp_params_vdev *params_vdev,
1553
- const struct isp32_rawawb_meas_cfg *arg)
1598
+ const struct isp32_rawawb_meas_cfg *arg, u32 id)
15541599 {
1555
- struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params;
1600
+ struct rkisp_device *dev = params_vdev->dev;
1601
+ struct v4l2_rect *out_crop = &dev->isp_sdev.out_crop;
1602
+ struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params + id;
15561603 struct isp32_rawawb_meas_cfg *arg_rec = &params_rec->meas.rawawb;
15571604 const struct isp2x_bls_fixed_val *pval = &arg->bls2_val;
1558
- u32 value, val, mask, i;
1605
+ u32 width = out_crop->width, height = out_crop->height;
1606
+ u32 value, val, mask, i, h_size, v_size, h_offs, v_offs;
15591607
1560
- value = isp3_param_read(params_vdev, ISP3X_BLS_CTRL);
1608
+ value = isp3_param_read(params_vdev, ISP3X_BLS_CTRL, id);
15611609 value &= ~ISP32_BLS_BLS2_EN;
15621610 if (arg->bls2_en) {
15631611 switch (params_vdev->raw_type) {
15641612 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);
1613
+ isp3_param_write(params_vdev, pval->r, ISP32_BLS2_D_FIXED, id);
1614
+ isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_C_FIXED, id);
1615
+ isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_B_FIXED, id);
1616
+ isp3_param_write(params_vdev, pval->b, ISP32_BLS2_A_FIXED, id);
15691617 break;
15701618 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);
1619
+ isp3_param_write(params_vdev, pval->r, ISP32_BLS2_C_FIXED, id);
1620
+ isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_D_FIXED, id);
1621
+ isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_A_FIXED, id);
1622
+ isp3_param_write(params_vdev, pval->b, ISP32_BLS2_B_FIXED, id);
15751623 break;
15761624 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);
1625
+ isp3_param_write(params_vdev, pval->r, ISP32_BLS2_B_FIXED, id);
1626
+ isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_A_FIXED, id);
1627
+ isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_D_FIXED, id);
1628
+ isp3_param_write(params_vdev, pval->b, ISP32_BLS2_C_FIXED, id);
15811629 break;
15821630 case RAW_RGGB:
15831631 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);
1632
+ isp3_param_write(params_vdev, pval->r, ISP32_BLS2_A_FIXED, id);
1633
+ isp3_param_write(params_vdev, pval->gr, ISP32_BLS2_B_FIXED, id);
1634
+ isp3_param_write(params_vdev, pval->gb, ISP32_BLS2_C_FIXED, id);
1635
+ isp3_param_write(params_vdev, pval->b, ISP32_BLS2_D_FIXED, id);
15881636 }
15891637 value |= ISP32_BLS_BLS2_EN;
15901638 }
1591
- isp3_param_write(params_vdev, value, ISP3X_BLS_CTRL);
1639
+ isp3_param_write(params_vdev, value, ISP3X_BLS_CTRL, id);
15921640
15931641 value = arg->in_overexposure_threshold << 16 |
15941642 !!arg->blk_with_luma_wei_en << 8 |
....@@ -1599,463 +1647,473 @@
15991647 !!arg->blk_measure_enable;
16001648 if (params_vdev->dev->isp_ver == ISP_V32_L)
16011649 value |= !!arg->ds16x8_mode_en << 7;
1602
- isp3_param_write(params_vdev, value, ISP3X_RAWAWB_BLK_CTRL);
1650
+ isp3_param_write(params_vdev, value, ISP3X_RAWAWB_BLK_CTRL, id);
16031651
1604
- isp3_param_write(params_vdev,
1605
- ISP_PACK_2SHORT(arg->h_offs, arg->v_offs),
1606
- ISP3X_RAWAWB_WIN_OFFS);
16071652
1653
+ h_offs = arg->h_offs & ~0x1;
1654
+ v_offs = arg->v_offs & ~0x1;
16081655 isp3_param_write(params_vdev,
1609
- ISP_PACK_2SHORT(arg->h_size, arg->v_size),
1610
- ISP3X_RAWAWB_WIN_SIZE);
1656
+ ISP_PACK_2SHORT(h_offs, v_offs),
1657
+ ISP3X_RAWAWB_WIN_OFFS, id);
1658
+
1659
+ if (dev->hw_dev->unite)
1660
+ width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
1661
+ h_size = arg->h_size;
1662
+ v_size = arg->v_size;
1663
+ if (!h_size || h_size + h_offs > width)
1664
+ h_size = width - h_offs;
1665
+ if (!v_size || v_size + v_offs > height)
1666
+ v_size = height - v_offs;
1667
+ isp3_param_write(params_vdev,
1668
+ ISP_PACK_2SHORT(h_size, v_size),
1669
+ ISP3X_RAWAWB_WIN_SIZE, id);
16111670
16121671 isp3_param_write(params_vdev,
16131672 ISP_PACK_2SHORT(arg->r_max, arg->g_max),
1614
- ISP3X_RAWAWB_LIMIT_RG_MAX);
1673
+ ISP3X_RAWAWB_LIMIT_RG_MAX, id);
16151674
16161675 isp3_param_write(params_vdev,
16171676 ISP_PACK_2SHORT(arg->b_max, arg->y_max),
1618
- ISP3X_RAWAWB_LIMIT_BY_MAX);
1677
+ ISP3X_RAWAWB_LIMIT_BY_MAX, id);
16191678
16201679 isp3_param_write(params_vdev,
16211680 ISP_PACK_2SHORT(arg->r_min, arg->g_min),
1622
- ISP3X_RAWAWB_LIMIT_RG_MIN);
1681
+ ISP3X_RAWAWB_LIMIT_RG_MIN, id);
16231682
16241683 isp3_param_write(params_vdev,
16251684 ISP_PACK_2SHORT(arg->b_min, arg->y_min),
1626
- ISP3X_RAWAWB_LIMIT_BY_MIN);
1685
+ ISP3X_RAWAWB_LIMIT_BY_MIN, id);
16271686
16281687 value = !!arg->wp_hist_xytype << 4 |
16291688 !!arg->wp_blk_wei_en1 << 3 |
16301689 !!arg->wp_blk_wei_en0 << 2 |
16311690 !!arg->wp_luma_wei_en1 << 1 |
16321691 !!arg->wp_luma_wei_en0;
1633
- isp3_param_write(params_vdev, value, ISP3X_RAWAWB_WEIGHT_CURVE_CTRL);
1692
+ isp3_param_write(params_vdev, value, ISP3X_RAWAWB_WEIGHT_CURVE_CTRL, id);
16341693
16351694 isp3_param_write(params_vdev,
16361695 ISP_PACK_4BYTE(arg->wp_luma_weicurve_y0,
16371696 arg->wp_luma_weicurve_y1,
16381697 arg->wp_luma_weicurve_y2,
16391698 arg->wp_luma_weicurve_y3),
1640
- ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR03);
1699
+ ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR03, id);
16411700
16421701 isp3_param_write(params_vdev,
16431702 ISP_PACK_4BYTE(arg->wp_luma_weicurve_y4,
16441703 arg->wp_luma_weicurve_y5,
16451704 arg->wp_luma_weicurve_y6,
16461705 arg->wp_luma_weicurve_y7),
1647
- ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR47);
1706
+ ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR47, id);
16481707
16491708 isp3_param_write(params_vdev,
16501709 arg->wp_luma_weicurve_y8,
1651
- ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR8);
1710
+ ISP3X_RAWAWB_YWEIGHT_CURVE_XCOOR8, id);
16521711
16531712 isp3_param_write(params_vdev,
16541713 ISP_PACK_4BYTE(arg->wp_luma_weicurve_w0,
16551714 arg->wp_luma_weicurve_w1,
16561715 arg->wp_luma_weicurve_w2,
16571716 arg->wp_luma_weicurve_w3),
1658
- ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR03);
1717
+ ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR03, id);
16591718
16601719 isp3_param_write(params_vdev,
16611720 ISP_PACK_4BYTE(arg->wp_luma_weicurve_w4,
16621721 arg->wp_luma_weicurve_w5,
16631722 arg->wp_luma_weicurve_w6,
16641723 arg->wp_luma_weicurve_w7),
1665
- ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR47);
1724
+ ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR47, id);
16661725
16671726 isp3_param_write(params_vdev,
16681727 ISP_PACK_2SHORT(arg->wp_luma_weicurve_w8,
16691728 arg->pre_wbgain_inv_r),
1670
- ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR8);
1729
+ ISP3X_RAWAWB_YWEIGHT_CURVE_YCOOR8, id);
16711730
16721731 isp3_param_write(params_vdev,
16731732 ISP_PACK_2SHORT(arg->pre_wbgain_inv_g,
16741733 arg->pre_wbgain_inv_b),
1675
- ISP3X_RAWAWB_PRE_WBGAIN_INV);
1734
+ ISP3X_RAWAWB_PRE_WBGAIN_INV, id);
16761735
16771736 isp3_param_write(params_vdev,
16781737 ISP_PACK_2SHORT(arg->vertex0_u_0, arg->vertex0_v_0),
1679
- ISP3X_RAWAWB_UV_DETC_VERTEX0_0);
1738
+ ISP3X_RAWAWB_UV_DETC_VERTEX0_0, id);
16801739
16811740 isp3_param_write(params_vdev,
16821741 ISP_PACK_2SHORT(arg->vertex1_u_0, arg->vertex1_v_0),
1683
- ISP3X_RAWAWB_UV_DETC_VERTEX1_0);
1742
+ ISP3X_RAWAWB_UV_DETC_VERTEX1_0, id);
16841743
16851744 isp3_param_write(params_vdev,
16861745 ISP_PACK_2SHORT(arg->vertex2_u_0, arg->vertex2_v_0),
1687
- ISP3X_RAWAWB_UV_DETC_VERTEX2_0);
1746
+ ISP3X_RAWAWB_UV_DETC_VERTEX2_0, id);
16881747
16891748 isp3_param_write(params_vdev,
16901749 ISP_PACK_2SHORT(arg->vertex3_u_0, arg->vertex3_v_0),
1691
- ISP3X_RAWAWB_UV_DETC_VERTEX3_0);
1750
+ ISP3X_RAWAWB_UV_DETC_VERTEX3_0, id);
16921751
16931752 isp3_param_write(params_vdev, arg->islope01_0,
1694
- ISP3X_RAWAWB_UV_DETC_ISLOPE01_0);
1753
+ ISP3X_RAWAWB_UV_DETC_ISLOPE01_0, id);
16951754
16961755 isp3_param_write(params_vdev, arg->islope12_0,
1697
- ISP3X_RAWAWB_UV_DETC_ISLOPE12_0);
1756
+ ISP3X_RAWAWB_UV_DETC_ISLOPE12_0, id);
16981757
16991758 isp3_param_write(params_vdev, arg->islope23_0,
1700
- ISP3X_RAWAWB_UV_DETC_ISLOPE23_0);
1759
+ ISP3X_RAWAWB_UV_DETC_ISLOPE23_0, id);
17011760
17021761 isp3_param_write(params_vdev, arg->islope30_0,
1703
- ISP3X_RAWAWB_UV_DETC_ISLOPE30_0);
1762
+ ISP3X_RAWAWB_UV_DETC_ISLOPE30_0, id);
17041763
17051764 isp3_param_write(params_vdev,
17061765 ISP_PACK_2SHORT(arg->vertex0_u_1,
17071766 arg->vertex0_v_1),
1708
- ISP3X_RAWAWB_UV_DETC_VERTEX0_1);
1767
+ ISP3X_RAWAWB_UV_DETC_VERTEX0_1, id);
17091768
17101769 isp3_param_write(params_vdev,
17111770 ISP_PACK_2SHORT(arg->vertex1_u_1,
17121771 arg->vertex1_v_1),
1713
- ISP3X_RAWAWB_UV_DETC_VERTEX1_1);
1772
+ ISP3X_RAWAWB_UV_DETC_VERTEX1_1, id);
17141773
17151774 isp3_param_write(params_vdev,
17161775 ISP_PACK_2SHORT(arg->vertex2_u_1,
17171776 arg->vertex2_v_1),
1718
- ISP3X_RAWAWB_UV_DETC_VERTEX2_1);
1777
+ ISP3X_RAWAWB_UV_DETC_VERTEX2_1, id);
17191778
17201779 isp3_param_write(params_vdev,
17211780 ISP_PACK_2SHORT(arg->vertex3_u_1,
17221781 arg->vertex3_v_1),
1723
- ISP3X_RAWAWB_UV_DETC_VERTEX3_1);
1782
+ ISP3X_RAWAWB_UV_DETC_VERTEX3_1, id);
17241783
17251784 isp3_param_write(params_vdev, arg->islope01_1,
1726
- ISP3X_RAWAWB_UV_DETC_ISLOPE01_1);
1785
+ ISP3X_RAWAWB_UV_DETC_ISLOPE01_1, id);
17271786
17281787 isp3_param_write(params_vdev, arg->islope12_1,
1729
- ISP3X_RAWAWB_UV_DETC_ISLOPE12_1);
1788
+ ISP3X_RAWAWB_UV_DETC_ISLOPE12_1, id);
17301789
17311790 isp3_param_write(params_vdev, arg->islope23_1,
1732
- ISP3X_RAWAWB_UV_DETC_ISLOPE23_1);
1791
+ ISP3X_RAWAWB_UV_DETC_ISLOPE23_1, id);
17331792
17341793 isp3_param_write(params_vdev, arg->islope30_1,
1735
- ISP3X_RAWAWB_UV_DETC_ISLOPE30_1);
1794
+ ISP3X_RAWAWB_UV_DETC_ISLOPE30_1, id);
17361795
17371796 isp3_param_write(params_vdev,
17381797 ISP_PACK_2SHORT(arg->vertex0_u_2,
17391798 arg->vertex0_v_2),
1740
- ISP3X_RAWAWB_UV_DETC_VERTEX0_2);
1799
+ ISP3X_RAWAWB_UV_DETC_VERTEX0_2, id);
17411800
17421801 isp3_param_write(params_vdev,
17431802 ISP_PACK_2SHORT(arg->vertex1_u_2,
17441803 arg->vertex1_v_2),
1745
- ISP3X_RAWAWB_UV_DETC_VERTEX1_2);
1804
+ ISP3X_RAWAWB_UV_DETC_VERTEX1_2, id);
17461805
17471806 isp3_param_write(params_vdev,
17481807 ISP_PACK_2SHORT(arg->vertex2_u_2,
17491808 arg->vertex2_v_2),
1750
- ISP3X_RAWAWB_UV_DETC_VERTEX2_2);
1809
+ ISP3X_RAWAWB_UV_DETC_VERTEX2_2, id);
17511810
17521811 isp3_param_write(params_vdev,
17531812 ISP_PACK_2SHORT(arg->vertex3_u_2,
17541813 arg->vertex3_v_2),
1755
- ISP3X_RAWAWB_UV_DETC_VERTEX3_2);
1814
+ ISP3X_RAWAWB_UV_DETC_VERTEX3_2, id);
17561815
17571816 isp3_param_write(params_vdev, arg->islope01_2,
1758
- ISP3X_RAWAWB_UV_DETC_ISLOPE01_2);
1817
+ ISP3X_RAWAWB_UV_DETC_ISLOPE01_2, id);
17591818
17601819 isp3_param_write(params_vdev, arg->islope12_2,
1761
- ISP3X_RAWAWB_UV_DETC_ISLOPE12_2);
1820
+ ISP3X_RAWAWB_UV_DETC_ISLOPE12_2, id);
17621821
17631822 isp3_param_write(params_vdev, arg->islope23_2,
1764
- ISP3X_RAWAWB_UV_DETC_ISLOPE23_2);
1823
+ ISP3X_RAWAWB_UV_DETC_ISLOPE23_2, id);
17651824
17661825 isp3_param_write(params_vdev, arg->islope30_2,
1767
- ISP3X_RAWAWB_UV_DETC_ISLOPE30_2);
1826
+ ISP3X_RAWAWB_UV_DETC_ISLOPE30_2, id);
17681827
17691828 isp3_param_write(params_vdev,
17701829 ISP_PACK_2SHORT(arg->vertex0_u_3,
17711830 arg->vertex0_v_3),
1772
- ISP3X_RAWAWB_UV_DETC_VERTEX0_3);
1831
+ ISP3X_RAWAWB_UV_DETC_VERTEX0_3, id);
17731832
17741833 isp3_param_write(params_vdev,
17751834 ISP_PACK_2SHORT(arg->vertex1_u_3,
17761835 arg->vertex1_v_3),
1777
- ISP3X_RAWAWB_UV_DETC_VERTEX1_3);
1836
+ ISP3X_RAWAWB_UV_DETC_VERTEX1_3, id);
17781837
17791838 isp3_param_write(params_vdev,
17801839 ISP_PACK_2SHORT(arg->vertex2_u_3,
17811840 arg->vertex2_v_3),
1782
- ISP3X_RAWAWB_UV_DETC_VERTEX2_3);
1841
+ ISP3X_RAWAWB_UV_DETC_VERTEX2_3, id);
17831842
17841843 isp3_param_write(params_vdev,
17851844 ISP_PACK_2SHORT(arg->vertex3_u_3,
17861845 arg->vertex3_v_3),
1787
- ISP3X_RAWAWB_UV_DETC_VERTEX3_3);
1846
+ ISP3X_RAWAWB_UV_DETC_VERTEX3_3, id);
17881847
17891848 isp3_param_write(params_vdev, arg->islope01_3,
1790
- ISP3X_RAWAWB_UV_DETC_ISLOPE01_3);
1849
+ ISP3X_RAWAWB_UV_DETC_ISLOPE01_3, id);
17911850
17921851 isp3_param_write(params_vdev, arg->islope12_3,
1793
- ISP3X_RAWAWB_UV_DETC_ISLOPE12_3);
1852
+ ISP3X_RAWAWB_UV_DETC_ISLOPE12_3, id);
17941853
17951854 isp3_param_write(params_vdev, arg->islope23_3,
1796
- ISP3X_RAWAWB_UV_DETC_ISLOPE23_3);
1855
+ ISP3X_RAWAWB_UV_DETC_ISLOPE23_3, id);
17971856
17981857 isp3_param_write(params_vdev, arg->islope30_3,
1799
- ISP3X_RAWAWB_UV_DETC_ISLOPE30_3);
1858
+ ISP3X_RAWAWB_UV_DETC_ISLOPE30_3, id);
18001859
18011860 isp3_param_write(params_vdev,
18021861 ISP_PACK_2SHORT(arg->rgb2ryuvmat0_y,
18031862 arg->rgb2ryuvmat1_y),
1804
- ISP3X_RAWAWB_YUV_RGB2ROTY_0);
1863
+ ISP3X_RAWAWB_YUV_RGB2ROTY_0, id);
18051864
18061865 isp3_param_write(params_vdev,
18071866 ISP_PACK_2SHORT(arg->rgb2ryuvmat2_y,
18081867 arg->rgb2ryuvofs_y),
1809
- ISP3X_RAWAWB_YUV_RGB2ROTY_1);
1868
+ ISP3X_RAWAWB_YUV_RGB2ROTY_1, id);
18101869
18111870 isp3_param_write(params_vdev,
18121871 ISP_PACK_2SHORT(arg->rgb2ryuvmat0_u,
18131872 arg->rgb2ryuvmat1_u),
1814
- ISP3X_RAWAWB_YUV_RGB2ROTU_0);
1873
+ ISP3X_RAWAWB_YUV_RGB2ROTU_0, id);
18151874
18161875
18171876 isp3_param_write(params_vdev,
18181877 ISP_PACK_2SHORT(arg->rgb2ryuvmat2_u,
18191878 arg->rgb2ryuvofs_u),
1820
- ISP3X_RAWAWB_YUV_RGB2ROTU_1);
1879
+ ISP3X_RAWAWB_YUV_RGB2ROTU_1, id);
18211880
18221881 isp3_param_write(params_vdev,
18231882 ISP_PACK_2SHORT(arg->rgb2ryuvmat0_v,
18241883 arg->rgb2ryuvmat1_v),
1825
- ISP3X_RAWAWB_YUV_RGB2ROTV_0);
1884
+ ISP3X_RAWAWB_YUV_RGB2ROTV_0, id);
18261885
18271886 isp3_param_write(params_vdev,
18281887 ISP_PACK_2SHORT(arg->rgb2ryuvmat2_v,
18291888 arg->rgb2ryuvofs_v),
1830
- ISP3X_RAWAWB_YUV_RGB2ROTV_1);
1889
+ ISP3X_RAWAWB_YUV_RGB2ROTV_1, id);
18311890
18321891 isp3_param_write(params_vdev,
18331892 ISP_PACK_2SHORT(arg->coor_x1_ls0_y,
18341893 arg->vec_x21_ls0_y),
1835
- ISP3X_RAWAWB_YUV_X_COOR_Y_0);
1894
+ ISP3X_RAWAWB_YUV_X_COOR_Y_0, id);
18361895
18371896 isp3_param_write(params_vdev,
18381897 ISP_PACK_2SHORT(arg->coor_x1_ls0_u,
18391898 arg->vec_x21_ls0_u),
1840
- ISP3X_RAWAWB_YUV_X_COOR_U_0);
1899
+ ISP3X_RAWAWB_YUV_X_COOR_U_0, id);
18411900
18421901 isp3_param_write(params_vdev,
18431902 ISP_PACK_2SHORT(arg->coor_x1_ls0_v,
18441903 arg->vec_x21_ls0_v),
1845
- ISP3X_RAWAWB_YUV_X_COOR_V_0);
1904
+ ISP3X_RAWAWB_YUV_X_COOR_V_0, id);
18461905
18471906 isp3_param_write(params_vdev,
18481907 ISP_PACK_4BYTE(arg->dis_x1x2_ls0, 0,
18491908 arg->rotu0_ls0, arg->rotu1_ls0),
1850
- ISP3X_RAWAWB_YUV_X1X2_DIS_0);
1909
+ ISP3X_RAWAWB_YUV_X1X2_DIS_0, id);
18511910
18521911 isp3_param_write(params_vdev,
18531912 ISP_PACK_4BYTE(arg->rotu2_ls0, arg->rotu3_ls0,
18541913 arg->rotu4_ls0, arg->rotu5_ls0),
1855
- ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_0);
1914
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_0, id);
18561915
18571916 isp3_param_write(params_vdev,
18581917 ISP_PACK_2SHORT(arg->th0_ls0, arg->th1_ls0),
1859
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_0);
1918
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_0, id);
18601919
18611920 isp3_param_write(params_vdev,
18621921 ISP_PACK_2SHORT(arg->th2_ls0, arg->th3_ls0),
1863
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_0);
1922
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_0, id);
18641923
18651924 isp3_param_write(params_vdev,
18661925 ISP_PACK_2SHORT(arg->th4_ls0, arg->th5_ls0),
1867
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_0);
1926
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_0, id);
18681927
18691928 isp3_param_write(params_vdev,
18701929 ISP_PACK_2SHORT(arg->coor_x1_ls1_y,
18711930 arg->vec_x21_ls1_y),
1872
- ISP3X_RAWAWB_YUV_X_COOR_Y_1);
1931
+ ISP3X_RAWAWB_YUV_X_COOR_Y_1, id);
18731932
18741933 isp3_param_write(params_vdev,
18751934 ISP_PACK_2SHORT(arg->coor_x1_ls1_u,
18761935 arg->vec_x21_ls1_u),
1877
- ISP3X_RAWAWB_YUV_X_COOR_U_1);
1936
+ ISP3X_RAWAWB_YUV_X_COOR_U_1, id);
18781937
18791938 isp3_param_write(params_vdev,
18801939 ISP_PACK_2SHORT(arg->coor_x1_ls1_v,
18811940 arg->vec_x21_ls1_v),
1882
- ISP3X_RAWAWB_YUV_X_COOR_V_1);
1941
+ ISP3X_RAWAWB_YUV_X_COOR_V_1, id);
18831942
18841943 isp3_param_write(params_vdev,
18851944 ISP_PACK_4BYTE(arg->dis_x1x2_ls1, 0,
18861945 arg->rotu0_ls1, arg->rotu1_ls1),
1887
- ISP3X_RAWAWB_YUV_X1X2_DIS_1);
1946
+ ISP3X_RAWAWB_YUV_X1X2_DIS_1, id);
18881947
18891948 isp3_param_write(params_vdev,
18901949 ISP_PACK_4BYTE(arg->rotu2_ls1, arg->rotu3_ls1,
18911950 arg->rotu4_ls1, arg->rotu5_ls1),
1892
- ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_1);
1951
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_1, id);
18931952
18941953 isp3_param_write(params_vdev,
18951954 ISP_PACK_2SHORT(arg->th0_ls1, arg->th1_ls1),
1896
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_1);
1955
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_1, id);
18971956
18981957 isp3_param_write(params_vdev,
18991958 ISP_PACK_2SHORT(arg->th2_ls1, arg->th3_ls1),
1900
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_1);
1959
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_1, id);
19011960
19021961 isp3_param_write(params_vdev,
19031962 ISP_PACK_2SHORT(arg->th4_ls1, arg->th5_ls1),
1904
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_1);
1963
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_1, id);
19051964
19061965 isp3_param_write(params_vdev,
19071966 ISP_PACK_2SHORT(arg->coor_x1_ls2_y, arg->vec_x21_ls2_y),
1908
- ISP3X_RAWAWB_YUV_X_COOR_Y_2);
1967
+ ISP3X_RAWAWB_YUV_X_COOR_Y_2, id);
19091968
19101969 isp3_param_write(params_vdev,
19111970 ISP_PACK_2SHORT(arg->coor_x1_ls2_u, arg->vec_x21_ls2_u),
1912
- ISP3X_RAWAWB_YUV_X_COOR_U_2);
1971
+ ISP3X_RAWAWB_YUV_X_COOR_U_2, id);
19131972
19141973 isp3_param_write(params_vdev,
19151974 ISP_PACK_2SHORT(arg->coor_x1_ls2_v, arg->vec_x21_ls2_v),
1916
- ISP3X_RAWAWB_YUV_X_COOR_V_2);
1975
+ ISP3X_RAWAWB_YUV_X_COOR_V_2, id);
19171976
19181977 isp3_param_write(params_vdev,
19191978 ISP_PACK_4BYTE(arg->dis_x1x2_ls2, 0,
19201979 arg->rotu0_ls2, arg->rotu1_ls2),
1921
- ISP3X_RAWAWB_YUV_X1X2_DIS_2);
1980
+ ISP3X_RAWAWB_YUV_X1X2_DIS_2, id);
19221981
19231982 isp3_param_write(params_vdev,
19241983 ISP_PACK_4BYTE(arg->rotu2_ls2, arg->rotu3_ls2,
19251984 arg->rotu4_ls2, arg->rotu5_ls2),
1926
- ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_2);
1985
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_2, id);
19271986
19281987 isp3_param_write(params_vdev,
19291988 ISP_PACK_2SHORT(arg->th0_ls2, arg->th1_ls2),
1930
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_2);
1989
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_2, id);
19311990
19321991 isp3_param_write(params_vdev,
19331992 ISP_PACK_2SHORT(arg->th2_ls2, arg->th3_ls2),
1934
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_2);
1993
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_2, id);
19351994
19361995 isp3_param_write(params_vdev,
19371996 ISP_PACK_2SHORT(arg->th4_ls2, arg->th5_ls2),
1938
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_2);
1997
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_2, id);
19391998
19401999 isp3_param_write(params_vdev,
19412000 ISP_PACK_2SHORT(arg->coor_x1_ls3_y,
19422001 arg->vec_x21_ls3_y),
1943
- ISP3X_RAWAWB_YUV_X_COOR_Y_3);
2002
+ ISP3X_RAWAWB_YUV_X_COOR_Y_3, id);
19442003
19452004 isp3_param_write(params_vdev,
19462005 ISP_PACK_2SHORT(arg->coor_x1_ls3_u,
19472006 arg->vec_x21_ls3_u),
1948
- ISP3X_RAWAWB_YUV_X_COOR_U_3);
2007
+ ISP3X_RAWAWB_YUV_X_COOR_U_3, id);
19492008
19502009 isp3_param_write(params_vdev,
19512010 ISP_PACK_2SHORT(arg->coor_x1_ls3_v,
19522011 arg->vec_x21_ls3_v),
1953
- ISP3X_RAWAWB_YUV_X_COOR_V_3);
2012
+ ISP3X_RAWAWB_YUV_X_COOR_V_3, id);
19542013
19552014 isp3_param_write(params_vdev,
19562015 ISP_PACK_4BYTE(arg->dis_x1x2_ls3, 0,
19572016 arg->rotu0_ls3, arg->rotu1_ls3),
1958
- ISP3X_RAWAWB_YUV_X1X2_DIS_3);
2017
+ ISP3X_RAWAWB_YUV_X1X2_DIS_3, id);
19592018
19602019 isp3_param_write(params_vdev,
19612020 ISP_PACK_4BYTE(arg->rotu2_ls3, arg->rotu3_ls3,
19622021 arg->rotu4_ls3, arg->rotu5_ls3),
1963
- ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_3);
2022
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_UCOOR_3, id);
19642023
19652024 isp3_param_write(params_vdev,
19662025 ISP_PACK_2SHORT(arg->th0_ls3, arg->th1_ls3),
1967
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_3);
2026
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH0_3, id);
19682027
19692028 isp3_param_write(params_vdev,
19702029 ISP_PACK_2SHORT(arg->th2_ls3, arg->th3_ls3),
1971
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_3);
2030
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH1_3, id);
19722031
19732032 isp3_param_write(params_vdev,
19742033 ISP_PACK_2SHORT(arg->th4_ls3, arg->th5_ls3),
1975
- ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_3);
2034
+ ISP3X_RAWAWB_YUV_INTERP_CURVE_TH2_3, id);
19762035
19772036 isp3_param_write(params_vdev,
19782037 ISP_PACK_2SHORT(arg->wt0, arg->wt1),
1979
- ISP3X_RAWAWB_RGB2XY_WT01);
2038
+ ISP3X_RAWAWB_RGB2XY_WT01, id);
19802039
1981
- isp3_param_write(params_vdev, arg->wt2,
1982
- ISP3X_RAWAWB_RGB2XY_WT2);
2040
+ isp3_param_write(params_vdev, arg->wt2, ISP3X_RAWAWB_RGB2XY_WT2, id);
19832041
19842042 isp3_param_write(params_vdev,
19852043 ISP_PACK_2SHORT(arg->mat0_x, arg->mat0_y),
1986
- ISP3X_RAWAWB_RGB2XY_MAT0_XY);
2044
+ ISP3X_RAWAWB_RGB2XY_MAT0_XY, id);
19872045
19882046 isp3_param_write(params_vdev,
19892047 ISP_PACK_2SHORT(arg->mat1_x, arg->mat1_y),
1990
- ISP3X_RAWAWB_RGB2XY_MAT1_XY);
2048
+ ISP3X_RAWAWB_RGB2XY_MAT1_XY, id);
19912049
19922050 isp3_param_write(params_vdev,
19932051 ISP_PACK_2SHORT(arg->mat2_x, arg->mat2_y),
1994
- ISP3X_RAWAWB_RGB2XY_MAT2_XY);
2052
+ ISP3X_RAWAWB_RGB2XY_MAT2_XY, id);
19952053
19962054 isp3_param_write(params_vdev,
19972055 ISP_PACK_2SHORT(arg->nor_x0_0, arg->nor_x1_0),
1998
- ISP3X_RAWAWB_XY_DETC_NOR_X_0);
2056
+ ISP3X_RAWAWB_XY_DETC_NOR_X_0, id);
19992057
20002058 isp3_param_write(params_vdev,
20012059 ISP_PACK_2SHORT(arg->nor_y0_0, arg->nor_y1_0),
2002
- ISP3X_RAWAWB_XY_DETC_NOR_Y_0);
2060
+ ISP3X_RAWAWB_XY_DETC_NOR_Y_0, id);
20032061
20042062 isp3_param_write(params_vdev,
20052063 ISP_PACK_2SHORT(arg->big_x0_0, arg->big_x1_0),
2006
- ISP3X_RAWAWB_XY_DETC_BIG_X_0);
2064
+ ISP3X_RAWAWB_XY_DETC_BIG_X_0, id);
20072065
20082066 isp3_param_write(params_vdev,
20092067 ISP_PACK_2SHORT(arg->big_y0_0, arg->big_y1_0),
2010
- ISP3X_RAWAWB_XY_DETC_BIG_Y_0);
2068
+ ISP3X_RAWAWB_XY_DETC_BIG_Y_0, id);
20112069
20122070 isp3_param_write(params_vdev,
20132071 ISP_PACK_2SHORT(arg->nor_x0_1, arg->nor_x1_1),
2014
- ISP3X_RAWAWB_XY_DETC_NOR_X_1);
2072
+ ISP3X_RAWAWB_XY_DETC_NOR_X_1, id);
20152073
20162074 isp3_param_write(params_vdev,
20172075 ISP_PACK_2SHORT(arg->nor_y0_1, arg->nor_y1_1),
2018
- ISP3X_RAWAWB_XY_DETC_NOR_Y_1);
2076
+ ISP3X_RAWAWB_XY_DETC_NOR_Y_1, id);
20192077
20202078 isp3_param_write(params_vdev,
20212079 ISP_PACK_2SHORT(arg->big_x0_1, arg->big_x1_1),
2022
- ISP3X_RAWAWB_XY_DETC_BIG_X_1);
2080
+ ISP3X_RAWAWB_XY_DETC_BIG_X_1, id);
20232081
20242082 isp3_param_write(params_vdev,
20252083 ISP_PACK_2SHORT(arg->big_y0_1, arg->big_y1_1),
2026
- ISP3X_RAWAWB_XY_DETC_BIG_Y_1);
2084
+ ISP3X_RAWAWB_XY_DETC_BIG_Y_1, id);
20272085
20282086 isp3_param_write(params_vdev,
20292087 ISP_PACK_2SHORT(arg->nor_x0_2, arg->nor_x1_2),
2030
- ISP3X_RAWAWB_XY_DETC_NOR_X_2);
2088
+ ISP3X_RAWAWB_XY_DETC_NOR_X_2, id);
20312089
20322090 isp3_param_write(params_vdev,
20332091 ISP_PACK_2SHORT(arg->nor_y0_2, arg->nor_y1_2),
2034
- ISP3X_RAWAWB_XY_DETC_NOR_Y_2);
2092
+ ISP3X_RAWAWB_XY_DETC_NOR_Y_2, id);
20352093
20362094 isp3_param_write(params_vdev,
20372095 ISP_PACK_2SHORT(arg->big_x0_2, arg->big_x1_2),
2038
- ISP3X_RAWAWB_XY_DETC_BIG_X_2);
2096
+ ISP3X_RAWAWB_XY_DETC_BIG_X_2, id);
20392097
20402098 isp3_param_write(params_vdev,
20412099 ISP_PACK_2SHORT(arg->big_y0_2, arg->big_y1_2),
2042
- ISP3X_RAWAWB_XY_DETC_BIG_Y_2);
2100
+ ISP3X_RAWAWB_XY_DETC_BIG_Y_2, id);
20432101
20442102 isp3_param_write(params_vdev,
20452103 ISP_PACK_2SHORT(arg->nor_x0_3, arg->nor_x1_3),
2046
- ISP3X_RAWAWB_XY_DETC_NOR_X_3);
2104
+ ISP3X_RAWAWB_XY_DETC_NOR_X_3, id);
20472105
20482106 isp3_param_write(params_vdev,
20492107 ISP_PACK_2SHORT(arg->nor_y0_3, arg->nor_y1_3),
2050
- ISP3X_RAWAWB_XY_DETC_NOR_Y_3);
2108
+ ISP3X_RAWAWB_XY_DETC_NOR_Y_3, id);
20512109
20522110 isp3_param_write(params_vdev,
20532111 ISP_PACK_2SHORT(arg->big_x0_3, arg->big_x1_3),
2054
- ISP3X_RAWAWB_XY_DETC_BIG_X_3);
2112
+ ISP3X_RAWAWB_XY_DETC_BIG_X_3, id);
20552113
20562114 isp3_param_write(params_vdev,
20572115 ISP_PACK_2SHORT(arg->big_y0_3, arg->big_y1_3),
2058
- ISP3X_RAWAWB_XY_DETC_BIG_Y_3);
2116
+ ISP3X_RAWAWB_XY_DETC_BIG_Y_3, id);
20592117
20602118 value = (arg->exc_wp_region0_excen & 0x3) |
20612119 !!arg->exc_wp_region0_measen << 2 |
....@@ -2076,138 +2134,138 @@
20762134 (arg->exc_wp_region6_excen & 0x3) << 24 |
20772135 !!arg->exc_wp_region6_domain << 27 |
20782136 !!arg->multiwindow_en << 31;
2079
- isp3_param_write(params_vdev, value, ISP3X_RAWAWB_MULTIWINDOW_EXC_CTRL);
2137
+ isp3_param_write(params_vdev, value, ISP3X_RAWAWB_MULTIWINDOW_EXC_CTRL, id);
20802138
20812139 isp3_param_write(params_vdev,
20822140 ISP_PACK_2SHORT(arg->multiwindow0_h_offs,
20832141 arg->multiwindow0_v_offs),
2084
- ISP3X_RAWAWB_MULTIWINDOW0_OFFS);
2142
+ ISP3X_RAWAWB_MULTIWINDOW0_OFFS, id);
20852143 isp3_param_write(params_vdev,
20862144 ISP_PACK_2SHORT(arg->multiwindow0_h_size,
20872145 arg->multiwindow0_v_size),
2088
- ISP3X_RAWAWB_MULTIWINDOW0_SIZE);
2146
+ ISP3X_RAWAWB_MULTIWINDOW0_SIZE, id);
20892147 isp3_param_write(params_vdev,
20902148 ISP_PACK_2SHORT(arg->multiwindow1_h_offs,
20912149 arg->multiwindow1_v_offs),
2092
- ISP3X_RAWAWB_MULTIWINDOW1_OFFS);
2150
+ ISP3X_RAWAWB_MULTIWINDOW1_OFFS, id);
20932151 isp3_param_write(params_vdev,
20942152 ISP_PACK_2SHORT(arg->multiwindow1_h_size,
20952153 arg->multiwindow1_v_size),
2096
- ISP3X_RAWAWB_MULTIWINDOW1_SIZE);
2154
+ ISP3X_RAWAWB_MULTIWINDOW1_SIZE, id);
20972155 isp3_param_write(params_vdev,
20982156 ISP_PACK_2SHORT(arg->multiwindow2_h_offs,
20992157 arg->multiwindow2_v_offs),
2100
- ISP3X_RAWAWB_MULTIWINDOW2_OFFS);
2158
+ ISP3X_RAWAWB_MULTIWINDOW2_OFFS, id);
21012159 isp3_param_write(params_vdev,
21022160 ISP_PACK_2SHORT(arg->multiwindow2_h_size,
21032161 arg->multiwindow2_v_size),
2104
- ISP3X_RAWAWB_MULTIWINDOW2_SIZE);
2162
+ ISP3X_RAWAWB_MULTIWINDOW2_SIZE, id);
21052163 isp3_param_write(params_vdev,
21062164 ISP_PACK_2SHORT(arg->multiwindow3_h_offs,
21072165 arg->multiwindow3_v_offs),
2108
- ISP3X_RAWAWB_MULTIWINDOW3_OFFS);
2166
+ ISP3X_RAWAWB_MULTIWINDOW3_OFFS, id);
21092167 isp3_param_write(params_vdev,
21102168 ISP_PACK_2SHORT(arg->multiwindow3_h_size,
21112169 arg->multiwindow3_v_size),
2112
- ISP3X_RAWAWB_MULTIWINDOW3_SIZE);
2170
+ ISP3X_RAWAWB_MULTIWINDOW3_SIZE, id);
21132171
21142172 isp3_param_write(params_vdev,
21152173 ISP_PACK_2SHORT(arg->exc_wp_region0_xu0,
21162174 arg->exc_wp_region0_xu1),
2117
- ISP3X_RAWAWB_EXC_WP_REGION0_XU);
2175
+ ISP3X_RAWAWB_EXC_WP_REGION0_XU, id);
21182176
21192177 isp3_param_write(params_vdev,
21202178 ISP_PACK_2SHORT(arg->exc_wp_region0_yv0,
21212179 arg->exc_wp_region0_yv1),
2122
- ISP3X_RAWAWB_EXC_WP_REGION0_YV);
2180
+ ISP3X_RAWAWB_EXC_WP_REGION0_YV, id);
21232181
21242182 isp3_param_write(params_vdev,
21252183 ISP_PACK_2SHORT(arg->exc_wp_region1_xu0,
21262184 arg->exc_wp_region1_xu1),
2127
- ISP3X_RAWAWB_EXC_WP_REGION1_XU);
2185
+ ISP3X_RAWAWB_EXC_WP_REGION1_XU, id);
21282186
21292187 isp3_param_write(params_vdev,
21302188 ISP_PACK_2SHORT(arg->exc_wp_region1_yv0,
21312189 arg->exc_wp_region1_yv1),
2132
- ISP3X_RAWAWB_EXC_WP_REGION1_YV);
2190
+ ISP3X_RAWAWB_EXC_WP_REGION1_YV, id);
21332191
21342192 isp3_param_write(params_vdev,
21352193 ISP_PACK_2SHORT(arg->exc_wp_region2_xu0,
21362194 arg->exc_wp_region2_xu1),
2137
- ISP3X_RAWAWB_EXC_WP_REGION2_XU);
2195
+ ISP3X_RAWAWB_EXC_WP_REGION2_XU, id);
21382196
21392197 isp3_param_write(params_vdev,
21402198 ISP_PACK_2SHORT(arg->exc_wp_region2_yv0,
21412199 arg->exc_wp_region2_yv1),
2142
- ISP3X_RAWAWB_EXC_WP_REGION2_YV);
2200
+ ISP3X_RAWAWB_EXC_WP_REGION2_YV, id);
21432201
21442202 isp3_param_write(params_vdev,
21452203 ISP_PACK_2SHORT(arg->exc_wp_region3_xu0,
21462204 arg->exc_wp_region3_xu1),
2147
- ISP3X_RAWAWB_EXC_WP_REGION3_XU);
2205
+ ISP3X_RAWAWB_EXC_WP_REGION3_XU, id);
21482206
21492207 isp3_param_write(params_vdev,
21502208 ISP_PACK_2SHORT(arg->exc_wp_region3_yv0,
21512209 arg->exc_wp_region3_yv1),
2152
- ISP3X_RAWAWB_EXC_WP_REGION3_YV);
2210
+ ISP3X_RAWAWB_EXC_WP_REGION3_YV, id);
21532211
21542212 isp3_param_write(params_vdev,
21552213 ISP_PACK_2SHORT(arg->exc_wp_region4_xu0,
21562214 arg->exc_wp_region4_xu1),
2157
- ISP3X_RAWAWB_EXC_WP_REGION4_XU);
2215
+ ISP3X_RAWAWB_EXC_WP_REGION4_XU, id);
21582216
21592217 isp3_param_write(params_vdev,
21602218 ISP_PACK_2SHORT(arg->exc_wp_region4_yv0,
21612219 arg->exc_wp_region4_yv1),
2162
- ISP3X_RAWAWB_EXC_WP_REGION4_YV);
2220
+ ISP3X_RAWAWB_EXC_WP_REGION4_YV, id);
21632221
21642222 isp3_param_write(params_vdev,
21652223 ISP_PACK_2SHORT(arg->exc_wp_region5_xu0,
21662224 arg->exc_wp_region5_xu1),
2167
- ISP3X_RAWAWB_EXC_WP_REGION5_XU);
2225
+ ISP3X_RAWAWB_EXC_WP_REGION5_XU, id);
21682226
21692227 isp3_param_write(params_vdev,
21702228 ISP_PACK_2SHORT(arg->exc_wp_region5_yv0,
21712229 arg->exc_wp_region5_yv1),
2172
- ISP3X_RAWAWB_EXC_WP_REGION5_YV);
2230
+ ISP3X_RAWAWB_EXC_WP_REGION5_YV, id);
21732231
21742232 isp3_param_write(params_vdev,
21752233 ISP_PACK_2SHORT(arg->exc_wp_region6_xu0,
21762234 arg->exc_wp_region6_xu1),
2177
- ISP3X_RAWAWB_EXC_WP_REGION6_XU);
2235
+ ISP3X_RAWAWB_EXC_WP_REGION6_XU, id);
21782236
21792237 isp3_param_write(params_vdev,
21802238 ISP_PACK_2SHORT(arg->exc_wp_region6_yv0,
21812239 arg->exc_wp_region6_yv1),
2182
- ISP3X_RAWAWB_EXC_WP_REGION6_YV);
2240
+ ISP3X_RAWAWB_EXC_WP_REGION6_YV, id);
21832241
21842242 isp3_param_write(params_vdev,
21852243 ISP_PACK_4BYTE(arg->exc_wp_region0_weight,
21862244 arg->exc_wp_region1_weight,
21872245 arg->exc_wp_region2_weight,
21882246 arg->exc_wp_region3_weight),
2189
- ISP32_RAWAWB_EXC_WP_WEIGHT0_3);
2247
+ ISP32_RAWAWB_EXC_WP_WEIGHT0_3, id);
21902248
21912249 isp3_param_write(params_vdev,
21922250 ISP_PACK_4BYTE(arg->exc_wp_region4_weight,
21932251 arg->exc_wp_region5_weight,
21942252 arg->exc_wp_region6_weight, 0),
2195
- ISP32_RAWAWB_EXC_WP_WEIGHT4_6);
2253
+ ISP32_RAWAWB_EXC_WP_WEIGHT4_6, id);
21962254
21972255 if (params_vdev->dev->isp_ver == ISP_V32) {
21982256 if (params_vdev->dev->hw_dev->is_single)
2199
- isp_rawawb_cfg_sram(params_vdev, arg, false);
2257
+ isp_rawawb_cfg_sram(params_vdev, arg, false, id);
22002258 else
22012259 memcpy(arg_rec->wp_blk_wei_w, arg->wp_blk_wei_w,
22022260 ISP32_RAWAWB_WEIGHT_NUM);
22032261 } else {
22042262 for (i = 0; i < ISP32L_RAWAWB_WEIGHT_NUM; i++)
22052263 isp3_param_write(params_vdev, arg->win_weight[i],
2206
- ISP32L_RAWAWB_WIN_WEIGHT_0 + i * 4);
2264
+ ISP32L_RAWAWB_WIN_WEIGHT_0 + i * 4, id);
22072265 }
22082266
22092267 /* avoid to override the old enable value */
2210
- value = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL);
2268
+ value = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL, id);
22112269 value &= (ISP32_MODULE_EN |
22122270 ISP32_RAWAWB_2DDR_PATH_EN |
22132271 ISP32_RAWAWB_2DDR_PATH_DS);
....@@ -2227,45 +2285,46 @@
22272285 !!arg->yuv3d_en0 << 3 |
22282286 !!arg->xy_en0 << 2 |
22292287 !!arg->uv_en0 << 1;
2230
- isp3_param_write(params_vdev, value, ISP3X_RAWAWB_CTRL);
2288
+ isp3_param_write(params_vdev, value, ISP3X_RAWAWB_CTRL, id);
22312289
22322290 mask = ISP32_DRC2AWB_SEL | ISP32_BNR2AWB_SEL | ISP3X_RAWAWB_SEL(3);
22332291 val = ISP3X_RAWAWB_SEL(arg->rawawb_sel) |
22342292 (arg->bnr2awb_sel & 0x1) << 26 | (arg->drc2awb_sel & 0x1) << 27;
2235
- value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH);
2293
+ value = isp3_param_read(params_vdev, ISP3X_VI_ISP_PATH, id);
22362294 if ((value & mask) != val) {
22372295 value &= ~mask;
22382296 value |= val;
2239
- isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH);
2297
+ isp3_param_write(params_vdev, value, ISP3X_VI_ISP_PATH, id);
22402298 }
22412299 }
22422300
22432301 static void
2244
-isp_rawawb_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2302
+isp_rawawb_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
22452303 {
22462304 u32 awb_ctrl;
22472305
2248
- awb_ctrl = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL);
2306
+ awb_ctrl = isp3_param_read_cache(params_vdev, ISP3X_RAWAWB_CTRL, id);
22492307 awb_ctrl &= ~ISP32_REG_WR_MASK;
22502308 if (en)
22512309 awb_ctrl |= ISP32_MODULE_EN;
22522310 else
22532311 awb_ctrl &= ~ISP32_MODULE_EN;
22542312
2255
- isp3_param_write(params_vdev, awb_ctrl, ISP3X_RAWAWB_CTRL);
2313
+ isp3_param_write(params_vdev, awb_ctrl, ISP3X_RAWAWB_CTRL, id);
22562314 }
22572315
22582316 static void
22592317 isp_rawhstlite_config(struct rkisp_isp_params_vdev *params_vdev,
2260
- const struct isp2x_rawhistlite_cfg *arg)
2318
+ const struct isp2x_rawhistlite_cfg *arg, u32 id)
22612319 {
2262
- u32 i;
2263
- u32 value;
2264
- u32 hist_ctrl;
2265
- u32 block_hsize, block_vsize;
2320
+ struct rkisp_device *ispdev = params_vdev->dev;
2321
+ struct v4l2_rect *out_crop = &ispdev->isp_sdev.out_crop;
2322
+ u32 width = out_crop->width, height = out_crop->height;
2323
+ u32 i, value, hist_ctrl, block_hsize, block_vsize;
2324
+ u32 h_size, v_size, h_offs, v_offs;
22662325
22672326 /* avoid to override the old enable value */
2268
- hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL);
2327
+ hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL, id);
22692328 hist_ctrl &= ISP3X_RAWHIST_EN;
22702329 hist_ctrl = hist_ctrl |
22712330 ISP3X_RAWHIST_MODE(arg->mode) |
....@@ -2273,23 +2332,31 @@
22732332 if (params_vdev->dev->isp_ver == ISP_V32)
22742333 hist_ctrl |= ISP3X_RAWHIST_DATASEL(arg->data_sel) |
22752334 ISP3X_RAWHIST_WATERLINE(arg->waterline);
2276
- isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL);
2335
+ isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL, id);
22772336
2337
+ h_offs = arg->win.h_offs & ~0x1;
2338
+ v_offs = arg->win.v_offs & ~0x1;
22782339 isp3_param_write(params_vdev,
2279
- ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs),
2280
- ISP3X_RAWHIST_LITE_OFFS);
2340
+ ISP_PACK_2SHORT(h_offs, v_offs),
2341
+ ISP3X_RAWHIST_LITE_OFFS, id);
22812342
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;
2343
+ if (ispdev->hw_dev->unite)
2344
+ width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
2345
+ h_size = arg->win.h_size;
2346
+ v_size = arg->win.v_size;
2347
+ if (!h_size || h_size + h_offs + 1 > width)
2348
+ h_size = width - h_offs - 1;
2349
+ if (!v_size || v_size + v_offs + 1 > height)
2350
+ v_size = height - v_offs - 1;
2351
+ block_hsize = (h_size / ISP32_RAWHISTLITE_ROW_NUM) & ~0x1;
2352
+ block_vsize = (v_size / ISP32_RAWHISTLITE_COLUMN_NUM) & ~0x1;
22862353 isp3_param_write(params_vdev,
22872354 ISP_PACK_2SHORT(block_hsize, block_vsize),
2288
- ISP3X_RAWHIST_LITE_SIZE);
2355
+ ISP3X_RAWHIST_LITE_SIZE, id);
22892356
22902357 isp3_param_write(params_vdev,
22912358 ISP_PACK_4BYTE(arg->rcc, arg->gcc, arg->bcc, arg->off),
2292
- ISP3X_RAWHIST_LITE_RAW2Y_CC);
2359
+ ISP3X_RAWHIST_LITE_RAW2Y_CC, id);
22932360
22942361 for (i = 0; i < (ISP32_RAWHISTLITE_WEIGHT_REG_SIZE / 4); i++) {
22952362 value = ISP_PACK_4BYTE(arg->weight[4 * i + 0],
....@@ -2297,32 +2364,32 @@
22972364 arg->weight[4 * i + 2],
22982365 arg->weight[4 * i + 3]);
22992366 isp3_param_write(params_vdev, value,
2300
- ISP3X_RAWHIST_LITE_WEIGHT + 4 * i);
2367
+ ISP3X_RAWHIST_LITE_WEIGHT + 4 * i, id);
23012368 }
23022369
23032370 value = ISP_PACK_4BYTE(arg->weight[4 * i + 0], 0, 0, 0);
23042371 isp3_param_write(params_vdev, value,
2305
- ISP3X_RAWHIST_LITE_WEIGHT + 4 * i);
2372
+ ISP3X_RAWHIST_LITE_WEIGHT + 4 * i, id);
23062373 }
23072374
23082375 static void
2309
-isp_rawhstlite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2376
+isp_rawhstlite_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
23102377 {
23112378 u32 hist_ctrl;
23122379
2313
- hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL);
2380
+ hist_ctrl = isp3_param_read(params_vdev, ISP3X_RAWHIST_LITE_CTRL, id);
23142381 hist_ctrl &= ~(ISP32_MODULE_EN | ISP32_REG_WR_MASK);
23152382
23162383 if (en)
23172384 hist_ctrl |= ISP32_MODULE_EN;
23182385
2319
- isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL);
2386
+ isp3_param_write(params_vdev, hist_ctrl, ISP3X_RAWHIST_LITE_CTRL, id);
23202387 }
23212388
23222389 static void
23232390 isp_rawhstbig_cfg_sram(struct rkisp_isp_params_vdev *params_vdev,
23242391 const struct isp2x_rawhistbig_cfg *arg,
2325
- u32 blk_no, bool is_check)
2392
+ u32 blk_no, bool is_check, u32 id)
23262393 {
23272394 u32 i, j, wnd_num_idx, value;
23282395 u8 weight15x15[ISP32_RAWHISTBIG_WEIGHT_REG_SIZE];
....@@ -2344,7 +2411,7 @@
23442411
23452412 value = ISP3X_RAWHIST_EN;
23462413 if (is_check &&
2347
- !(isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL) & value))
2414
+ !(isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id) & value))
23482415 return;
23492416
23502417 wnd_num_idx = arg->wnd_num;
....@@ -2369,13 +2436,16 @@
23692436
23702437 static void
23712438 isp_rawhstbig_config(struct rkisp_isp_params_vdev *params_vdev,
2372
- const struct isp2x_rawhistbig_cfg *arg, u32 blk_no)
2439
+ const struct isp2x_rawhistbig_cfg *arg, u32 blk_no, u32 id)
23732440 {
2374
- struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params;
2441
+ struct isp32_isp_params_cfg *params_rec = params_vdev->isp32_params + id;
23752442 struct rkisp_device *dev = params_vdev->dev;
2443
+ struct v4l2_rect *out_crop = &dev->isp_sdev.out_crop;
2444
+ u32 width = out_crop->width, height = out_crop->height;
23762445 struct isp2x_rawhistbig_cfg *arg_rec;
23772446 u32 hist_ctrl, block_hsize, block_vsize, wnd_num_idx;
23782447 const u32 hist_wnd_num[] = {5, 5, 15, 15};
2448
+ u32 h_size, v_size, h_offs, v_offs;
23792449 u32 addr;
23802450
23812451 switch (blk_no) {
....@@ -2396,7 +2466,7 @@
23962466
23972467 wnd_num_idx = arg->wnd_num;
23982468 /* avoid to override the old enable value */
2399
- hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL);
2469
+ hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id);
24002470 hist_ctrl &= ISP3X_RAWHIST_EN;
24012471 hist_ctrl = hist_ctrl |
24022472 ISP3X_RAWHIST_MODE(arg->mode) |
....@@ -2405,33 +2475,41 @@
24052475 if (params_vdev->dev->isp_ver == ISP_V32)
24062476 hist_ctrl |= ISP3X_RAWHIST_DATASEL(arg->data_sel) |
24072477 ISP3X_RAWHIST_WATERLINE(arg->waterline);
2408
- isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL);
2478
+ isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL, id);
24092479
2480
+ h_offs = arg->win.h_offs & ~0x1;
2481
+ v_offs = arg->win.v_offs & ~0x1;
24102482 isp3_param_write(params_vdev,
2411
- ISP_PACK_2SHORT(arg->win.h_offs, arg->win.v_offs),
2412
- addr + ISP3X_RAWHIST_BIG_OFFS);
2483
+ ISP_PACK_2SHORT(h_offs, v_offs),
2484
+ addr + ISP3X_RAWHIST_BIG_OFFS, id);
24132485
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;
2486
+ if (dev->hw_dev->unite)
2487
+ width = width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL;
2488
+ h_size = arg->win.h_size;
2489
+ v_size = arg->win.v_size;
2490
+ if (!h_size || h_size + h_offs + 1 > width)
2491
+ h_size = width - h_offs - 1;
2492
+ if (!v_size || v_size + v_offs + 1 > height)
2493
+ v_size = height - v_offs - 1;
2494
+ block_hsize = (h_size / hist_wnd_num[wnd_num_idx]) & ~0x1;
2495
+ block_vsize = (v_size / hist_wnd_num[wnd_num_idx]) & ~0x1;
24182496 isp3_param_write(params_vdev,
24192497 ISP_PACK_2SHORT(block_hsize, block_vsize),
2420
- addr + ISP3X_RAWHIST_BIG_SIZE);
2498
+ addr + ISP3X_RAWHIST_BIG_SIZE, id);
24212499
24222500 isp3_param_write(params_vdev,
24232501 ISP_PACK_4BYTE(arg->rcc, arg->gcc, arg->bcc, arg->off),
2424
- addr + ISP3X_RAWHIST_BIG_RAW2Y_CC);
2502
+ addr + ISP3X_RAWHIST_BIG_RAW2Y_CC, id);
24252503
24262504 if (dev->hw_dev->is_single)
2427
- isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false);
2505
+ isp_rawhstbig_cfg_sram(params_vdev, arg, blk_no, false, id);
24282506 else
24292507 *arg_rec = *arg;
24302508 }
24312509
24322510 static void
24332511 isp_rawhstbig_enable(struct rkisp_isp_params_vdev *params_vdev,
2434
- bool en, u32 blk_no)
2512
+ bool en, u32 blk_no, u32 id)
24352513 {
24362514 u32 hist_ctrl;
24372515 u32 addr;
....@@ -2449,72 +2527,72 @@
24492527 break;
24502528 }
24512529
2452
- hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL);
2530
+ hist_ctrl = isp3_param_read(params_vdev, addr + ISP3X_RAWHIST_BIG_CTRL, id);
24532531 hist_ctrl &= ~(ISP3X_RAWHIST_EN | ISP32_REG_WR_MASK);
24542532 if (en)
24552533 hist_ctrl |= ISP3X_RAWHIST_EN;
24562534
2457
- isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL);
2535
+ isp3_param_write(params_vdev, hist_ctrl, addr + ISP3X_RAWHIST_BIG_CTRL, id);
24582536 }
24592537
24602538 static void
24612539 isp_rawhst1_config(struct rkisp_isp_params_vdev *params_vdev,
2462
- const struct isp2x_rawhistbig_cfg *arg)
2540
+ const struct isp2x_rawhistbig_cfg *arg, u32 id)
24632541 {
2464
- isp_rawhstbig_config(params_vdev, arg, 1);
2542
+ isp_rawhstbig_config(params_vdev, arg, 1, id);
24652543 }
24662544
24672545 static void
2468
-isp_rawhst1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2546
+isp_rawhst1_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
24692547 {
2470
- isp_rawhstbig_enable(params_vdev, en, 1);
2548
+ isp_rawhstbig_enable(params_vdev, en, 1, id);
24712549 }
24722550
24732551 static void
24742552 isp_rawhst2_config(struct rkisp_isp_params_vdev *params_vdev,
2475
- const struct isp2x_rawhistbig_cfg *arg)
2553
+ const struct isp2x_rawhistbig_cfg *arg, u32 id)
24762554 {
2477
- isp_rawhstbig_config(params_vdev, arg, 2);
2555
+ isp_rawhstbig_config(params_vdev, arg, 2, id);
24782556 }
24792557
24802558 static void
2481
-isp_rawhst2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2559
+isp_rawhst2_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
24822560 {
2483
- isp_rawhstbig_enable(params_vdev, en, 2);
2561
+ isp_rawhstbig_enable(params_vdev, en, 2, id);
24842562 }
24852563
24862564 static void
24872565 isp_rawhst3_config(struct rkisp_isp_params_vdev *params_vdev,
2488
- const struct isp2x_rawhistbig_cfg *arg)
2566
+ const struct isp2x_rawhistbig_cfg *arg, u32 id)
24892567 {
2490
- isp_rawhstbig_config(params_vdev, arg, 0);
2568
+ isp_rawhstbig_config(params_vdev, arg, 0, id);
24912569 }
24922570
24932571 static void
2494
-isp_rawhst3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2572
+isp_rawhst3_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
24952573 {
2496
- isp_rawhstbig_enable(params_vdev, en, 0);
2574
+ isp_rawhstbig_enable(params_vdev, en, 0, id);
24972575 }
24982576
24992577 static void
25002578 isp_hdrmge_config(struct rkisp_isp_params_vdev *params_vdev,
25012579 const struct isp32_hdrmge_cfg *arg,
2502
- enum rkisp_params_type type)
2580
+ enum rkisp_params_type type, u32 id)
25032581 {
25042582 u32 value;
25052583 int i;
25062584
25072585 if (type == RKISP_PARAMS_SHD || type == RKISP_PARAMS_ALL) {
25082586 value = ISP_PACK_2SHORT(arg->gain0, arg->gain0_inv);
2509
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN0);
2587
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN0, id);
25102588
25112589 value = ISP_PACK_2SHORT(arg->gain1, arg->gain1_inv);
2512
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN1);
2590
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN1, id);
25132591
25142592 value = arg->gain2;
2515
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN2);
2593
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_GAIN2, id);
25162594
2517
- value = isp3_param_read_cache(params_vdev, ISP3X_HDRMGE_CTRL);
2595
+ value = isp3_param_read_cache(params_vdev, ISP3X_HDRMGE_CTRL, id);
25182596 if (arg->s_base)
25192597 value |= BIT(1);
25202598 else
....@@ -2523,48 +2601,48 @@
25232601 value |= BIT(6);
25242602 else
25252603 value &= ~BIT(6);
2526
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_CTRL);
2604
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_CTRL, id);
25272605 }
25282606
25292607 if (type == RKISP_PARAMS_IMD || type == RKISP_PARAMS_ALL) {
25302608 value = ISP_PACK_4BYTE(arg->ms_dif_0p8, arg->ms_diff_0p15,
25312609 arg->lm_dif_0p9, arg->lm_dif_0p15);
2532
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LIGHTZ);
2610
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LIGHTZ, id);
25332611 value = (arg->ms_scl & 0x7ff) |
25342612 (arg->ms_thd0 & 0x3ff) << 12 |
25352613 (arg->ms_thd1 & 0x3ff) << 22;
2536
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_MS_DIFF);
2614
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_MS_DIFF, id);
25372615 value = (arg->lm_scl & 0x7ff) |
25382616 (arg->lm_thd0 & 0x3ff) << 12 |
25392617 (arg->lm_thd1 & 0x3ff) << 22;
2540
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LM_DIFF);
2618
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_LM_DIFF, id);
25412619
25422620 for (i = 0; i < ISP32_HDRMGE_L_CURVE_NUM; i++) {
25432621 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);
2622
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_DIFF_Y0 + 4 * i, id);
25452623 }
25462624
25472625 for (i = 0; i < ISP32_HDRMGE_E_CURVE_NUM; i++) {
25482626 value = (arg->l_raw1[i] & 0x3ff) << 20 |
25492627 (arg->l_raw0[i] & 0x3ff) << 10 |
25502628 (arg->e_y[i] & 0x3ff);
2551
- isp3_param_write(params_vdev, value, ISP3X_HDRMGE_OVER_Y0 + 4 * i);
2629
+ isp3_param_write(params_vdev, value, ISP3X_HDRMGE_OVER_Y0 + 4 * i, id);
25522630 }
25532631
25542632 value = ISP_PACK_2SHORT(arg->each_raw_gain0, arg->each_raw_gain1);
2555
- isp3_param_write(params_vdev, value, ISP32_HDRMGE_EACH_GAIN);
2633
+ isp3_param_write(params_vdev, value, ISP32_HDRMGE_EACH_GAIN, id);
25562634 }
25572635 }
25582636
25592637 static void
2560
-isp_hdrmge_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2638
+isp_hdrmge_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
25612639 {
25622640 }
25632641
25642642 static void
25652643 isp_hdrdrc_config(struct rkisp_isp_params_vdev *params_vdev,
25662644 const struct isp32_drc_cfg *arg,
2567
- enum rkisp_params_type type)
2645
+ enum rkisp_params_type type, u32 id)
25682646 {
25692647 u32 i, value;
25702648
....@@ -2574,76 +2652,76 @@
25742652 value = (arg->offset_pow2 & 0x0F) << 28 |
25752653 (arg->compres_scl & 0x1FFF) << 14 |
25762654 (arg->position & 0x03FFF);
2577
- isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL1);
2655
+ isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL1, id);
25782656
25792657 value = arg->delta_scalein << 24 |
25802658 (arg->hpdetail_ratio & 0xFFF) << 12 |
25812659 (arg->lpdetail_ratio & 0xFFF);
2582
- isp3_param_write(params_vdev, value, ISP3X_DRC_LPRATIO);
2660
+ isp3_param_write(params_vdev, value, ISP3X_DRC_LPRATIO, id);
25832661
25842662 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);
2663
+ isp3_param_write(params_vdev, value, ISP3X_DRC_EXPLRATIO, id);
25862664
25872665 value = (arg->force_sgm_inv0 & 0xFFFF) << 16 |
25882666 arg->motion_scl << 8 | arg->edge_scl;
2589
- isp3_param_write(params_vdev, value, ISP3X_DRC_SIGMA);
2667
+ isp3_param_write(params_vdev, value, ISP3X_DRC_SIGMA, id);
25902668
25912669 value = ISP_PACK_2SHORT(arg->space_sgm_inv0, arg->space_sgm_inv1);
2592
- isp3_param_write(params_vdev, value, ISP3X_DRC_SPACESGM);
2670
+ isp3_param_write(params_vdev, value, ISP3X_DRC_SPACESGM, id);
25932671
25942672 value = ISP_PACK_2SHORT(arg->range_sgm_inv0, arg->range_sgm_inv1);
2595
- isp3_param_write(params_vdev, value, ISP3X_DRC_RANESGM);
2673
+ isp3_param_write(params_vdev, value, ISP3X_DRC_RANESGM, id);
25962674
25972675 value = (arg->weig_bilat & 0x1f) | (arg->weig_maxl & 0x1f) << 8 |
25982676 (arg->bilat_soft_thd & 0x3fff) << 16;
25992677 if (arg->enable_soft_thd)
26002678 value |= BIT(31);
2601
- isp3_param_write(params_vdev, value, ISP3X_DRC_BILAT);
2679
+ isp3_param_write(params_vdev, value, ISP3X_DRC_BILAT, id);
26022680
26032681 for (i = 0; i < ISP32_DRC_Y_NUM / 2; i++) {
26042682 value = ISP_PACK_2SHORT(arg->gain_y[2 * i],
26052683 arg->gain_y[2 * i + 1]);
2606
- isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i);
2684
+ isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i, id);
26072685 }
26082686 value = ISP_PACK_2SHORT(arg->gain_y[2 * i], 0);
2609
- isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i);
2687
+ isp3_param_write(params_vdev, value, ISP3X_DRC_GAIN_Y0 + 4 * i, id);
26102688
26112689 for (i = 0; i < ISP32_DRC_Y_NUM / 2; i++) {
26122690 value = ISP_PACK_2SHORT(arg->compres_y[2 * i],
26132691 arg->compres_y[2 * i + 1]);
2614
- isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i);
2692
+ isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i, id);
26152693 }
26162694 value = ISP_PACK_2SHORT(arg->compres_y[2 * i], 0);
2617
- isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i);
2695
+ isp3_param_write(params_vdev, value, ISP3X_DRC_COMPRES_Y0 + 4 * i, id);
26182696
26192697 for (i = 0; i < ISP32_DRC_Y_NUM / 2; i++) {
26202698 value = ISP_PACK_2SHORT(arg->scale_y[2 * i],
26212699 arg->scale_y[2 * i + 1]);
2622
- isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i);
2700
+ isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i, id);
26232701 }
26242702 value = ISP_PACK_2SHORT(arg->scale_y[2 * i], 0);
2625
- isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i);
2703
+ isp3_param_write(params_vdev, value, ISP3X_DRC_SCALE_Y0 + 4 * i, id);
26262704
26272705 if (params_vdev->dev->isp_ver == ISP_V32)
26282706 value = ISP_PACK_2SHORT(arg->min_ogain, arg->iir_weight);
26292707 else
26302708 value = ISP_PACK_2SHORT(arg->min_ogain, 0);
2631
- isp3_param_write(params_vdev, value, ISP3X_DRC_IIRWG_GAIN);
2709
+ isp3_param_write(params_vdev, value, ISP3X_DRC_IIRWG_GAIN, id);
26322710
26332711 value = arg->gas_t & 0x1fff;
2634
- isp3_param_write(params_vdev, value, ISP32_DRC_LUM3X2_CTRL);
2712
+ isp3_param_write(params_vdev, value, ISP32_DRC_LUM3X2_CTRL, id);
26352713
26362714 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);
2715
+ isp3_param_write(params_vdev, value, ISP32_DRC_LUM3X2_GAS, id);
26382716 }
26392717
26402718 static void
2641
-isp_hdrdrc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2719
+isp_hdrdrc_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
26422720 {
26432721 u32 value;
26442722 bool real_en;
26452723
2646
- value = isp3_param_read(params_vdev, ISP3X_DRC_CTRL0);
2724
+ value = isp3_param_read(params_vdev, ISP3X_DRC_CTRL0, id);
26472725 real_en = !!(value & ISP32_MODULE_EN);
26482726 if ((en && real_en) || (!en && !real_en))
26492727 return;
....@@ -2651,17 +2729,17 @@
26512729 if (en) {
26522730 value |= ISP32_MODULE_EN;
26532731 isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1,
2654
- ISP3X_ADRC_FST_FRAME);
2732
+ ISP3X_ADRC_FST_FRAME, id);
26552733 } else {
26562734 value = 0;
2657
- isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(12));
2735
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(12), id);
26582736 }
2659
- isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL0);
2737
+ isp3_param_write(params_vdev, value, ISP3X_DRC_CTRL0, id);
26602738 }
26612739
26622740 static void
26632741 isp_gic_config(struct rkisp_isp_params_vdev *params_vdev,
2664
- const struct isp21_gic_cfg *arg)
2742
+ const struct isp21_gic_cfg *arg, u32 id)
26652743 {
26662744 u32 value;
26672745 s32 i;
....@@ -2669,12 +2747,12 @@
26692747 value = (arg->regmingradthrdark2 & 0x03FF) << 20 |
26702748 (arg->regmingradthrdark1 & 0x03FF) << 10 |
26712749 (arg->regminbusythre & 0x03FF);
2672
- isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA1);
2750
+ isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA1, id);
26732751
26742752 value = (arg->regdarkthre & 0x07FF) << 21 |
26752753 (arg->regmaxcorvboth & 0x03FF) << 11 |
26762754 (arg->regdarktthrehi & 0x07FF);
2677
- isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA2);
2755
+ isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA2, id);
26782756
26792757 value = (arg->regkgrad2dark & 0x0F) << 28 |
26802758 (arg->regkgrad1dark & 0x0F) << 24 |
....@@ -2683,46 +2761,46 @@
26832761 (arg->regkgrad2 & 0x0F) << 8 |
26842762 (arg->regkgrad1 & 0x0F) << 4 |
26852763 (arg->reggbthre & 0x0F);
2686
- isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA3);
2764
+ isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA3, id);
26872765
26882766 value = (arg->regmaxcorv & 0x03FF) << 20 |
26892767 (arg->regmingradthr2 & 0x03FF) << 10 |
26902768 (arg->regmingradthr1 & 0x03FF);
2691
- isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA4);
2769
+ isp3_param_write(params_vdev, value, ISP3X_GIC_DIFF_PARA4, id);
26922770
26932771 value = (arg->gr_ratio & 0x03) << 28 |
26942772 (arg->noise_scale & 0x7F) << 12 |
26952773 (arg->noise_base & 0xFFF);
2696
- isp3_param_write(params_vdev, value, ISP3X_GIC_NOISE_PARA1);
2774
+ isp3_param_write(params_vdev, value, ISP3X_GIC_NOISE_PARA1, id);
26972775
26982776 value = arg->diff_clip & 0x7fff;
2699
- isp3_param_write(params_vdev, value, ISP3X_GIC_NOISE_PARA2);
2777
+ isp3_param_write(params_vdev, value, ISP3X_GIC_NOISE_PARA2, id);
27002778
27012779 for (i = 0; i < ISP32_GIC_SIGMA_Y_NUM / 2; i++) {
27022780 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);
2781
+ isp3_param_write(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i, id);
27042782 }
27052783 value = ISP_PACK_2SHORT(arg->sigma_y[2 * i], 0);
2706
- isp3_param_write(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i);
2784
+ isp3_param_write(params_vdev, value, ISP3X_GIC_SIGMA_VALUE0 + 4 * i, id);
27072785 }
27082786
27092787 static void
2710
-isp_gic_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2788
+isp_gic_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
27112789 {
27122790 u32 value = 0;
27132791
27142792 if (en)
27152793 value |= ISP32_MODULE_EN;
2716
- isp3_param_write(params_vdev, value, ISP3X_GIC_CONTROL);
2794
+ isp3_param_write(params_vdev, value, ISP3X_GIC_CONTROL, id);
27172795 }
27182796
27192797 static void
27202798 isp_dhaz_config(struct rkisp_isp_params_vdev *params_vdev,
2721
- const struct isp32_dhaz_cfg *arg)
2799
+ const struct isp32_dhaz_cfg *arg, u32 id)
27222800 {
27232801 u32 i, value, ctrl;
27242802
2725
- ctrl = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL);
2803
+ ctrl = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL, id);
27262804 ctrl &= ISP3X_DHAZ_ENMUX;
27272805
27282806 ctrl |= !!arg->enh_luma_en << 28 | !!arg->color_deviate_en << 27 |
....@@ -2736,109 +2814,109 @@
27362814 value = (arg->hist_wr[i * 3] & 0x3ff) |
27372815 (arg->hist_wr[i * 3 + 1] & 0x3ff) << 10 |
27382816 (arg->hist_wr[i * 3 + 2] & 0x3ff) << 20;
2739
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4);
2817
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4, id);
27402818 }
27412819 value = arg->hist_wr[i * 3] & 0x3ff;
2742
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4);
2820
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_HIST_WR0 + i * 4, id);
27432821 }
2744
- isp3_param_write(params_vdev, ctrl, ISP3X_DHAZ_CTRL);
2822
+ isp3_param_write(params_vdev, ctrl, ISP3X_DHAZ_CTRL, id);
27452823
27462824 value = ISP_PACK_4BYTE(arg->dc_min_th, arg->dc_max_th,
27472825 arg->yhist_th, arg->yblk_th);
2748
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP0);
2826
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP0, id);
27492827
27502828 value = ISP_PACK_4BYTE(arg->bright_min, arg->bright_max,
27512829 arg->wt_max, 0);
2752
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP1);
2830
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP1, id);
27532831
27542832 value = ISP_PACK_4BYTE(arg->air_min, arg->air_max,
27552833 arg->dark_th, arg->tmax_base);
2756
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP2);
2834
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP2, id);
27572835
27582836 value = ISP_PACK_2SHORT(arg->tmax_off, arg->tmax_max);
2759
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_TMAX);
2837
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_TMAX, id);
27602838
27612839 value = (arg->hist_min & 0xFFFF) << 16 |
27622840 (arg->hist_th_off & 0xFF) << 8 |
27632841 (arg->hist_k & 0x1F);
2764
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST0);
2842
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST0, id);
27652843
27662844 value = ISP_PACK_2SHORT(arg->hist_scale, arg->hist_gratio);
2767
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST1);
2845
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ADP_HIST1, id);
27682846
27692847 value = ISP_PACK_2SHORT(arg->enhance_chroma, arg->enhance_value);
2770
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENHANCE);
2848
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENHANCE, id);
27712849
27722850 value = (arg->iir_wt_sigma & 0x07FF) << 16 |
27732851 (arg->iir_sigma & 0xFF) << 8 |
27742852 (arg->stab_fnum & 0x1F);
2775
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR0);
2853
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR0, id);
27762854
27772855 value = (arg->iir_pre_wet & 0x0F) << 24 |
27782856 (arg->iir_tmax_sigma & 0x7FF) << 8 |
27792857 (arg->iir_air_sigma & 0xFF);
2780
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR1);
2858
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_IIR1, id);
27812859
27822860 value = (arg->cfg_wt & 0x01FF) << 16 |
27832861 (arg->cfg_air & 0xFF) << 8 |
27842862 (arg->cfg_alpha & 0xFF);
2785
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG0);
2863
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG0, id);
27862864
27872865 value = ISP_PACK_2SHORT(arg->cfg_tmax, arg->cfg_gratio);
2788
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG1);
2866
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_SOFT_CFG1, id);
27892867
27902868 value = (arg->range_sima & 0x01FF) << 16 |
27912869 (arg->space_sigma_pre & 0xFF) << 8 |
27922870 (arg->space_sigma_cur & 0xFF);
2793
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_SIGMA);
2871
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_SIGMA, id);
27942872
27952873 value = ISP_PACK_2SHORT(arg->bf_weight, arg->dc_weitcur);
2796
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_WET);
2874
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_BF_WET, id);
27972875
27982876 for (i = 0; i < ISP32_DHAZ_ENH_CURVE_NUM / 2; i++) {
27992877 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);
2878
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i, id);
28012879 }
28022880 value = ISP_PACK_2SHORT(arg->enh_curve[2 * i], 0);
2803
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i);
2881
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_ENH_CURVE0 + 4 * i, id);
28042882
28052883 value = ISP_PACK_4BYTE(arg->gaus_h0, arg->gaus_h1, arg->gaus_h2, 0);
2806
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAUS);
2884
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAUS, id);
28072885
28082886 for (i = 0; i < ISP32_DHAZ_SIGMA_IDX_NUM / 4; i++) {
28092887 value = ISP_PACK_4BYTE(arg->sigma_idx[i * 4], arg->sigma_idx[i * 4 + 1],
28102888 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);
2889
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4, id);
28122890 }
28132891 value = ISP_PACK_4BYTE(arg->sigma_idx[i * 4], arg->sigma_idx[i * 4 + 1],
28142892 arg->sigma_idx[i * 4 + 2], 0);
2815
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4);
2893
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_IDX0 + i * 4, id);
28162894
28172895 for (i = 0; i < ISP32_DHAZ_SIGMA_LUT_NUM / 2; i++) {
28182896 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);
2897
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4, id);
28202898 }
28212899 value = ISP_PACK_2SHORT(arg->sigma_lut[i * 2], 0);
2822
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4);
2900
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_GAIN_LUT0 + i * 4, id);
28232901
28242902 for (i = 0; i < ISP32_DHAZ_ENH_LUMA_NUM / 3; i++) {
28252903 value = (arg->enh_luma[i * 3 + 2] & 0x3ff) << 20 |
28262904 (arg->enh_luma[i * 3 + 1] & 0x3ff) << 10 |
28272905 (arg->enh_luma[i * 3] & 0x3ff);
2828
- isp3_param_write(params_vdev, value, ISP32_DHAZ_ENH_LUMA0 + i * 4);
2906
+ isp3_param_write(params_vdev, value, ISP32_DHAZ_ENH_LUMA0 + i * 4, id);
28292907 }
28302908 value = (arg->enh_luma[i * 3 + 1] & 0x3ff) << 10 |
28312909 (arg->enh_luma[i * 3] & 0x3ff);
2832
- isp3_param_write(params_vdev, value, ISP32_DHAZ_ENH_LUMA0 + i * 4);
2910
+ isp3_param_write(params_vdev, value, ISP32_DHAZ_ENH_LUMA0 + i * 4, id);
28332911 }
28342912
28352913 static void
2836
-isp_dhaz_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2914
+isp_dhaz_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
28372915 {
28382916 u32 value;
28392917 bool real_en;
28402918
2841
- value = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL);
2919
+ value = isp3_param_read(params_vdev, ISP3X_DHAZ_CTRL, id);
28422920 real_en = !!(value & ISP3X_DHAZ_ENMUX);
28432921 if ((en && real_en) || (!en && !real_en))
28442922 return;
....@@ -2846,17 +2924,17 @@
28462924 if (en) {
28472925 value |= ISP32_SELF_FORCE_UPD | ISP3X_DHAZ_ENMUX;
28482926 isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1,
2849
- ISP3X_DHAZ_FST_FRAME);
2927
+ ISP3X_DHAZ_FST_FRAME, id);
28502928 } else {
28512929 value &= ~ISP3X_DHAZ_ENMUX;
2852
- isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(16));
2930
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(16), id);
28532931 }
2854
- isp3_param_write(params_vdev, value, ISP3X_DHAZ_CTRL);
2932
+ isp3_param_write(params_vdev, value, ISP3X_DHAZ_CTRL, id);
28552933 }
28562934
28572935 static void
28582936 isp_3dlut_config(struct rkisp_isp_params_vdev *params_vdev,
2859
- const struct isp2x_3dlut_cfg *arg)
2937
+ const struct isp2x_3dlut_cfg *arg, u32 id)
28602938 {
28612939 struct rkisp_device *dev = params_vdev->dev;
28622940 struct rkisp_isp_params_val_v32 *priv_val;
....@@ -2864,58 +2942,58 @@
28642942 u32 *data;
28652943
28662944 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
2867
- buf_idx = (priv_val->buf_3dlut_idx++) % ISP32_3DLUT_BUF_NUM;
2945
+ buf_idx = (priv_val->buf_3dlut_idx[id]++) % ISP32_3DLUT_BUF_NUM;
28682946
2869
- if (!priv_val->buf_3dlut[buf_idx].vaddr) {
2947
+ if (!priv_val->buf_3dlut[id][buf_idx].vaddr) {
28702948 dev_err(dev->dev, "no find 3dlut buf\n");
28712949 return;
28722950 }
2873
- data = (u32 *)priv_val->buf_3dlut[buf_idx].vaddr;
2951
+ data = (u32 *)priv_val->buf_3dlut[id][buf_idx].vaddr;
28742952 for (i = 0; i < arg->actual_size; i++)
28752953 data[i] = (arg->lut_b[i] & 0x3FF) |
28762954 (arg->lut_g[i] & 0xFFF) << 10 |
28772955 (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);
2956
+ rkisp_prepare_buffer(params_vdev->dev, &priv_val->buf_3dlut[id][buf_idx]);
2957
+ value = priv_val->buf_3dlut[id][buf_idx].dma_addr;
2958
+ isp3_param_write(params_vdev, value, ISP3X_MI_LUT_3D_RD_BASE, id);
2959
+ isp3_param_write(params_vdev, arg->actual_size, ISP3X_MI_LUT_3D_RD_WSIZE, id);
28822960
2883
- value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL);
2961
+ value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL, id);
28842962 value &= ISP3X_3DLUT_EN;
28852963
28862964 if (value)
2887
- isp3_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01);
2965
+ isp3_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01, id);
28882966
2889
- isp3_param_write(params_vdev, value, ISP3X_3DLUT_CTRL);
2967
+ isp3_param_write(params_vdev, value, ISP3X_3DLUT_CTRL, id);
28902968 }
28912969
28922970 static void
2893
-isp_3dlut_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
2971
+isp_3dlut_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
28942972 {
28952973 u32 value;
28962974 bool en_state;
28972975 struct rkisp_isp_params_val_v32 *priv_val;
28982976
2899
- value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL);
2977
+ value = isp3_param_read(params_vdev, ISP3X_3DLUT_CTRL, id);
29002978 en_state = (value & ISP3X_3DLUT_EN) ? true : false;
29012979
29022980 if (en == en_state)
29032981 return;
29042982
29052983 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);
2984
+ if (en && priv_val->buf_3dlut[id][0].vaddr) {
2985
+ isp3_param_set_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01, id);
2986
+ isp3_param_set_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01, id);
29092987 } 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));
2988
+ isp3_param_clear_bits(params_vdev, ISP3X_3DLUT_CTRL, 0x01, id);
2989
+ isp3_param_clear_bits(params_vdev, ISP3X_3DLUT_UPDATE, 0x01, id);
2990
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(20), id);
29132991 }
29142992 }
29152993
29162994 static void
29172995 isp_ldch_config(struct rkisp_isp_params_vdev *params_vdev,
2918
- const struct isp32_ldch_cfg *arg)
2996
+ const struct isp32_ldch_cfg *arg, u32 id)
29192997 {
29202998 struct rkisp_device *dev = params_vdev->dev;
29212999 struct rkisp_isp_params_val_v32 *priv_val;
....@@ -2923,7 +3001,7 @@
29233001 int buf_idx, i;
29243002 u32 value;
29253003
2926
- value = isp3_param_read(params_vdev, ISP3X_LDCH_STS);
3004
+ value = isp3_param_read(params_vdev, ISP3X_LDCH_STS, id);
29273005 value &= ISP32_MODULE_EN;
29283006 value |= !!arg->map13p3_en << 7 |
29293007 !!arg->force_map_en << 6 |
....@@ -2931,20 +3009,20 @@
29313009 !!arg->sample_avr_en << 3 |
29323010 !!arg->zero_interp_en << 2 |
29333011 !!arg->frm_end_dis << 1;
2934
- isp3_param_write(params_vdev, value, ISP3X_LDCH_STS);
3012
+ isp3_param_write(params_vdev, value, ISP3X_LDCH_STS, id);
29353013 if (arg->bic_mode_en) {
29363014 for (i = 0; i < ISP32_LDCH_BIC_NUM / 4; i++) {
29373015 value = ISP_PACK_4BYTE(arg->bicubic[i * 4], arg->bicubic[i * 4 + 1],
29383016 arg->bicubic[i * 4 + 2], arg->bicubic[i * 4 + 3]);
2939
- isp3_param_write(params_vdev, value, ISP32_LDCH_BIC_TABLE0 + i * 4);
3017
+ isp3_param_write(params_vdev, value, ISP32_LDCH_BIC_TABLE0 + i * 4, id);
29403018 }
29413019 }
29423020
29433021 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
29443022 for (i = 0; i < ISP32_MESH_BUF_NUM; i++) {
2945
- if (!priv_val->buf_ldch[i].mem_priv)
3023
+ if (!priv_val->buf_ldch[id][i].mem_priv)
29463024 continue;
2947
- if (arg->buf_fd == priv_val->buf_ldch[i].dma_fd)
3025
+ if (arg->buf_fd == priv_val->buf_ldch[id][i].dma_fd)
29483026 break;
29493027 }
29503028 if (i == ISP32_MESH_BUF_NUM) {
....@@ -2952,28 +3030,28 @@
29523030 return;
29533031 }
29543032
2955
- if (!priv_val->buf_ldch[i].vaddr) {
3033
+ if (!priv_val->buf_ldch[id][i].vaddr) {
29563034 dev_err(dev->dev, "no ldch buffer allocated\n");
29573035 return;
29583036 }
29593037
2960
- buf_idx = priv_val->buf_ldch_idx;
2961
- head = (struct isp2x_mesh_head *)priv_val->buf_ldch[buf_idx].vaddr;
3038
+ buf_idx = priv_val->buf_ldch_idx[id];
3039
+ head = (struct isp2x_mesh_head *)priv_val->buf_ldch[id][buf_idx].vaddr;
29623040 head->stat = MESH_BUF_INIT;
29633041
29643042 buf_idx = i;
2965
- head = (struct isp2x_mesh_head *)priv_val->buf_ldch[buf_idx].vaddr;
3043
+ head = (struct isp2x_mesh_head *)priv_val->buf_ldch[id][buf_idx].vaddr;
29663044 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);
3045
+ priv_val->buf_ldch_idx[id] = buf_idx;
3046
+ rkisp_prepare_buffer(dev, &priv_val->buf_ldch[id][buf_idx]);
3047
+ value = priv_val->buf_ldch[id][buf_idx].dma_addr + head->data_oft;
3048
+ isp3_param_write(params_vdev, value, ISP3X_MI_LUT_LDCH_RD_BASE, id);
3049
+ isp3_param_write(params_vdev, arg->hsize, ISP3X_MI_LUT_LDCH_RD_H_WSIZE, id);
3050
+ isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_LDCH_RD_V_SIZE, id);
29733051 }
29743052
29753053 static void
2976
-isp_ldch_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3054
+isp_ldch_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
29773055 {
29783056 struct rkisp_device *dev = params_vdev->dev;
29793057 struct rkisp_isp_params_val_v32 *priv_val;
....@@ -2981,24 +3059,24 @@
29813059
29823060 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
29833061 if (en) {
2984
- buf_idx = priv_val->buf_ldch_idx;
2985
- if (!priv_val->buf_ldch[buf_idx].vaddr) {
3062
+ buf_idx = priv_val->buf_ldch_idx[id];
3063
+ if (!priv_val->buf_ldch[id][buf_idx].vaddr) {
29863064 dev_err(dev->dev, "no ldch buffer allocated\n");
29873065 return;
29883066 }
2989
- isp3_param_set_bits(params_vdev, ISP3X_LDCH_STS, 0x01);
3067
+ isp3_param_set_bits(params_vdev, ISP3X_LDCH_STS, 0x01, id);
29903068 } else {
2991
- isp3_param_clear_bits(params_vdev, ISP3X_LDCH_STS, 0x01);
3069
+ isp3_param_clear_bits(params_vdev, ISP3X_LDCH_STS, 0x01, id);
29923070 }
29933071 }
29943072
29953073 static void
29963074 isp_ynr_config(struct rkisp_isp_params_vdev *params_vdev,
2997
- const struct isp32_ynr_cfg *arg)
3075
+ const struct isp32_ynr_cfg *arg, u32 id)
29983076 {
29993077 u32 i, value;
30003078
3001
- value = isp3_param_read(params_vdev, ISP3X_YNR_GLOBAL_CTRL);
3079
+ value = isp3_param_read(params_vdev, ISP3X_YNR_GLOBAL_CTRL, id);
30023080 value &= ISP32_MODULE_EN;
30033081
30043082 value |= !!arg->rnr_en << 26 |
....@@ -3011,96 +3089,96 @@
30113089 !!arg->lgft3x3_bypass << 3 |
30123090 !!arg->lbft5x5_bypass << 2 |
30133091 !!arg->bft3x3_bypass << 1;
3014
- isp3_param_write(params_vdev, value, ISP3X_YNR_GLOBAL_CTRL);
3092
+ isp3_param_write(params_vdev, value, ISP3X_YNR_GLOBAL_CTRL, id);
30153093
30163094 value = ISP_PACK_2SHORT(arg->rnr_max_r, arg->local_gainscale);
3017
- isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_MAX_R);
3095
+ isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_MAX_R, id);
30183096
30193097 value = ISP_PACK_2SHORT(arg->rnr_center_coorh, arg->rnr_center_coorv);
3020
- isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_CENTER_COOR);
3098
+ isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_CENTER_COOR, id);
30213099
30223100 value = ISP_PACK_2SHORT(arg->loclagain_adj_thresh, arg->localgain_adj);
3023
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOCAL_GAIN_CTRL);
3101
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOCAL_GAIN_CTRL, id);
30243102
30253103 value = ISP_PACK_2SHORT(arg->low_bf_inv0, arg->low_bf_inv1);
3026
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL0);
3104
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL0, id);
30273105
30283106 value = ISP_PACK_2SHORT(arg->low_thred_adj, arg->low_peak_supress);
3029
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL1);
3107
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL1, id);
30303108
30313109 value = ISP_PACK_2SHORT(arg->low_edge_adj_thresh, arg->low_dist_adj);
3032
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL2);
3110
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL2, id);
30333111
30343112 value = (arg->low_bi_weight & 0xFF) << 24 |
30353113 (arg->low_weight & 0xFF) << 16 |
30363114 (arg->low_center_weight & 0xFFFF);
3037
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL3);
3115
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL3, id);
30383116
30393117 value = ISP_PACK_2SHORT(arg->lbf_weight_thres, arg->frame_full_size);
30403118 if (params_vdev->dev->isp_ver == ISP_V32_L)
30413119 value |= (arg->frame_add4line & 0xf) << 12;
3042
- isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL4);
3120
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LOWNR_CTRL4, id);
30433121
30443122 value = (arg->low_gauss1_coeff2 & 0xFFFF) << 16 |
30453123 (arg->low_gauss1_coeff1 & 0xFF) << 8 |
30463124 (arg->low_gauss1_coeff0 & 0xFF);
3047
- isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS1_COEFF);
3125
+ isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS1_COEFF, id);
30483126
30493127 value = (arg->low_gauss2_coeff2 & 0xFFFF) << 16 |
30503128 (arg->low_gauss2_coeff1 & 0xFF) << 8 |
30513129 (arg->low_gauss2_coeff0 & 0xFF);
3052
- isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS2_COEFF);
3130
+ isp3_param_write(params_vdev, value, ISP3X_YNR_GAUSS2_COEFF, id);
30533131
30543132 for (i = 0; i < ISP32_YNR_XY_NUM / 2; i++) {
30553133 value = ISP_PACK_2SHORT(arg->luma_points_x[2 * i],
30563134 arg->luma_points_x[2 * i + 1]);
3057
- isp3_param_write(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i);
3135
+ isp3_param_write(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i, id);
30583136 }
30593137 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);
3138
+ isp3_param_write(params_vdev, value, ISP3X_YNR_SGM_DX_0_1 + 4 * i, id);
30613139
30623140 for (i = 0; i < ISP32_YNR_XY_NUM / 2; i++) {
30633141 value = ISP_PACK_2SHORT(arg->lsgm_y[2 * i],
30643142 arg->lsgm_y[2 * i + 1]);
3065
- isp3_param_write(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i);
3143
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i, id);
30663144 }
30673145 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);
3146
+ isp3_param_write(params_vdev, value, ISP3X_YNR_LSGM_Y_0_1 + 4 * i, id);
30693147
30703148 for (i = 0; i < ISP32_YNR_XY_NUM / 4; i++) {
30713149 value = ISP_PACK_4BYTE(arg->rnr_strength3[4 * i],
30723150 arg->rnr_strength3[4 * i + 1],
30733151 arg->rnr_strength3[4 * i + 2],
30743152 arg->rnr_strength3[4 * i + 3]);
3075
- isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i);
3153
+ isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i, id);
30763154 }
30773155 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);
3156
+ isp3_param_write(params_vdev, value, ISP3X_YNR_RNR_STRENGTH03 + 4 * i, id);
30793157
30803158 value = (arg->nlm_hi_bf_scale & 0x3ff) << 16 |
30813159 (arg->nlm_hi_gain_alpha & 0x1f) << 11 |
30823160 (arg->nlm_min_sigma & 0x7ff);
3083
- isp3_param_write(params_vdev, value, ISP32_YNR_NLM_SIGMA_GAIN);
3161
+ isp3_param_write(params_vdev, value, ISP32_YNR_NLM_SIGMA_GAIN, id);
30843162
30853163 value = (arg->nlm_coe[5] & 0xf) << 20 | (arg->nlm_coe[4] & 0xf) << 16 |
30863164 (arg->nlm_coe[3] & 0xf) << 12 | (arg->nlm_coe[2] & 0xf) << 8 |
30873165 (arg->nlm_coe[1] & 0xf) << 4 | (arg->nlm_coe[0] & 0xf);
3088
- isp3_param_write(params_vdev, value, ISP32_YNR_NLM_COE);
3166
+ isp3_param_write(params_vdev, value, ISP32_YNR_NLM_COE, id);
30893167
30903168 value = (arg->nlm_center_weight & 0x3ffff) << 10 | (arg->nlm_weight_offset & 0x3ff);
3091
- isp3_param_write(params_vdev, value, ISP32_YNR_NLM_WEIGHT);
3169
+ isp3_param_write(params_vdev, value, ISP32_YNR_NLM_WEIGHT, id);
30923170
30933171 value = arg->nlm_nr_weight & 0x7ff;
3094
- isp3_param_write(params_vdev, value, ISP32_YNR_NLM_NR_WEIGHT);
3172
+ isp3_param_write(params_vdev, value, ISP32_YNR_NLM_NR_WEIGHT, id);
30953173 }
30963174
30973175 static void
3098
-isp_ynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3176
+isp_ynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
30993177 {
31003178 u32 ynr_ctrl;
31013179 bool real_en;
31023180
3103
- ynr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_YNR_GLOBAL_CTRL);
3181
+ ynr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_YNR_GLOBAL_CTRL, id);
31043182 real_en = !!(ynr_ctrl & ISP32_MODULE_EN);
31053183 if ((en && real_en) || (!en && !real_en))
31063184 return;
....@@ -3108,22 +3186,22 @@
31083186 if (en) {
31093187 ynr_ctrl |= ISP32_MODULE_EN;
31103188 isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1,
3111
- ISP3X_YNR_FST_FRAME);
3189
+ ISP3X_YNR_FST_FRAME, id);
31123190 } else {
31133191 ynr_ctrl &= ~ISP32_MODULE_EN;
31143192 }
31153193
3116
- isp3_param_write(params_vdev, ynr_ctrl, ISP3X_YNR_GLOBAL_CTRL);
3194
+ isp3_param_write(params_vdev, ynr_ctrl, ISP3X_YNR_GLOBAL_CTRL, id);
31173195 }
31183196
31193197 static void
31203198 isp_cnr_config(struct rkisp_isp_params_vdev *params_vdev,
3121
- const struct isp32_cnr_cfg *arg)
3199
+ const struct isp32_cnr_cfg *arg, u32 id)
31223200 {
31233201 u32 i, value, ctrl, gain_ctrl;
31243202
3125
- gain_ctrl = isp3_param_read(params_vdev, ISP3X_GAIN_CTRL);
3126
- ctrl = isp3_param_read(params_vdev, ISP3X_CNR_CTRL);
3203
+ gain_ctrl = isp3_param_read(params_vdev, ISP3X_GAIN_CTRL, id);
3204
+ ctrl = isp3_param_read(params_vdev, ISP3X_CNR_CTRL, id);
31273205 ctrl &= ISP32_MODULE_EN;
31283206
31293207 ctrl |= !!arg->bf3x3_wgt0_sel << 8 |
....@@ -3139,63 +3217,63 @@
31393217 value &= ~ISP3X_CNR_GLOBAL_GAIN_ALPHA_MAX;
31403218 value |= BIT(15);
31413219 }
3142
- isp3_param_write(params_vdev, ctrl, ISP3X_CNR_CTRL);
3143
- isp3_param_write(params_vdev, value, ISP3X_CNR_EXGAIN);
3220
+ isp3_param_write(params_vdev, ctrl, ISP3X_CNR_CTRL, id);
3221
+ isp3_param_write(params_vdev, value, ISP3X_CNR_EXGAIN, id);
31443222
31453223 value = ISP_PACK_2SHORT(arg->thumb_sigma_c, arg->thumb_sigma_y);
3146
- isp3_param_write(params_vdev, value, ISP32_CNR_THUMB1);
3224
+ isp3_param_write(params_vdev, value, ISP32_CNR_THUMB1, id);
31473225
31483226 value = arg->thumb_bf_ratio & 0x7ff;
3149
- isp3_param_write(params_vdev, value, ISP32_CNR_THUMB_BF_RATIO);
3227
+ isp3_param_write(params_vdev, value, ISP32_CNR_THUMB_BF_RATIO, id);
31503228
31513229 value = ISP_PACK_4BYTE(arg->lbf1x7_weit_d0, arg->lbf1x7_weit_d1,
31523230 arg->lbf1x7_weit_d2, arg->lbf1x7_weit_d3);
3153
- isp3_param_write(params_vdev, value, ISP32_CNR_LBF_WEITD);
3231
+ isp3_param_write(params_vdev, value, ISP32_CNR_LBF_WEITD, id);
31543232
31553233 value = (arg->wgt_slope & 0x3ff) << 20 | (arg->exp_shift & 0x3f) << 12 |
31563234 arg->iir_strength << 4 | (arg->iir_uvgain & 0xf);
3157
- isp3_param_write(params_vdev, value, ISP32_CNR_IIR_PARA1);
3235
+ isp3_param_write(params_vdev, value, ISP32_CNR_IIR_PARA1, id);
31583236
31593237 value = ISP_PACK_4BYTE(arg->chroma_ghost, arg->iir_uv_clip, 0, 0);
3160
- isp3_param_write(params_vdev, value, ISP32_CNR_IIR_PARA2);
3238
+ isp3_param_write(params_vdev, value, ISP32_CNR_IIR_PARA2, id);
31613239
31623240 value = ISP_PACK_4BYTE(arg->gaus_coe[0], arg->gaus_coe[1],
31633241 arg->gaus_coe[2], arg->gaus_coe[3]);
3164
- isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_COE1);
3242
+ isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_COE1, id);
31653243
31663244 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);
3245
+ isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_COE2, id);
31683246
31693247 value = (arg->global_alpha & 0x7ff) << 20 | arg->bf_wgt_clip << 12 |
31703248 (arg->gaus_ratio & 0x7ff);
3171
- isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_RATIO);
3249
+ isp3_param_write(params_vdev, value, ISP32_CNR_GAUS_RATIO, id);
31723250
31733251 value = arg->bf_ratio << 24 | (arg->sigma_r & 0x3fff) << 8 |
31743252 (arg->uv_gain & 0x7f);
3175
- isp3_param_write(params_vdev, value, ISP32_CNR_BF_PARA1);
3253
+ isp3_param_write(params_vdev, value, ISP32_CNR_BF_PARA1, id);
31763254
31773255 value = (arg->adj_ratio & 0x7fff) << 16 | (arg->adj_offset & 0x1ff);
3178
- isp3_param_write(params_vdev, value, ISP32_CNR_BF_PARA2);
3256
+ isp3_param_write(params_vdev, value, ISP32_CNR_BF_PARA2, id);
31793257
31803258 for (i = 0; i < ISP32_CNR_SIGMA_Y_NUM / 4; i++) {
31813259 value = ISP_PACK_4BYTE(arg->sigma_y[i * 4], arg->sigma_y[i * 4 + 1],
31823260 arg->sigma_y[i * 4 + 2], arg->sigma_y[i * 4 + 3]);
3183
- isp3_param_write(params_vdev, value, ISP32_CNR_SIGMA0 + i * 4);
3261
+ isp3_param_write(params_vdev, value, ISP32_CNR_SIGMA0 + i * 4, id);
31843262 }
31853263 value = arg->sigma_y[i * 4];
3186
- isp3_param_write(params_vdev, value, ISP32_CNR_SIGMA0 + i * 4);
3264
+ isp3_param_write(params_vdev, value, ISP32_CNR_SIGMA0 + i * 4, id);
31873265
31883266 value = (arg->iir_gain_alpha & 0xf) << 8 | arg->iir_global_gain;
3189
- isp3_param_write(params_vdev, value, ISP32_CNR_IIR_GLOBAL_GAIN);
3267
+ isp3_param_write(params_vdev, value, ISP32_CNR_IIR_GLOBAL_GAIN, id);
31903268 }
31913269
31923270 static void
3193
-isp_cnr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3271
+isp_cnr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
31943272 {
31953273 u32 cnr_ctrl;
31963274 bool real_en;
31973275
3198
- cnr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_CNR_CTRL);
3276
+ cnr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_CNR_CTRL, id);
31993277 real_en = !!(cnr_ctrl & ISP32_MODULE_EN);
32003278 if ((en && real_en) || (!en && !real_en))
32013279 return;
....@@ -3203,21 +3281,21 @@
32033281 if (en) {
32043282 cnr_ctrl |= ISP32_MODULE_EN;
32053283 isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1,
3206
- ISP3X_CNR_FST_FRAME);
3284
+ ISP3X_CNR_FST_FRAME, id);
32073285 } else {
32083286 cnr_ctrl &= ~ISP32_MODULE_EN;
32093287 }
32103288
3211
- isp3_param_write(params_vdev, cnr_ctrl, ISP3X_CNR_CTRL);
3289
+ isp3_param_write(params_vdev, cnr_ctrl, ISP3X_CNR_CTRL, id);
32123290 }
32133291
32143292 static void
32153293 isp_sharp_config(struct rkisp_isp_params_vdev *params_vdev,
3216
- const struct isp32_sharp_cfg *arg)
3294
+ const struct isp32_sharp_cfg *arg, u32 id)
32173295 {
32183296 u32 i, value;
32193297
3220
- value = isp3_param_read(params_vdev, ISP3X_SHARP_EN);
3298
+ value = isp3_param_read(params_vdev, ISP3X_SHARP_EN, id);
32213299 value &= ISP32_MODULE_EN;
32223300
32233301 value |= !!arg->bypass << 1 |
....@@ -3229,11 +3307,11 @@
32293307 else
32303308 value |= !!arg->clip_hf_mode << 6 |
32313309 !!arg->add_mode << 7;
3232
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EN);
3310
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EN, id);
32333311
32343312 value = ISP_PACK_4BYTE(arg->pbf_ratio, arg->gaus_ratio,
32353313 arg->bf_ratio, arg->sharp_ratio);
3236
- isp3_param_write(params_vdev, value, ISP3X_SHARP_RATIO);
3314
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_RATIO, id);
32373315
32383316 value = (arg->luma_dx[6] & 0x0F) << 24 |
32393317 (arg->luma_dx[5] & 0x0F) << 20 |
....@@ -3242,217 +3320,222 @@
32423320 (arg->luma_dx[2] & 0x0F) << 8 |
32433321 (arg->luma_dx[1] & 0x0F) << 4 |
32443322 (arg->luma_dx[0] & 0x0F);
3245
- isp3_param_write(params_vdev, value, ISP3X_SHARP_LUMA_DX);
3323
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_LUMA_DX, id);
32463324
32473325 value = (arg->pbf_sigma_inv[2] & 0x3FF) << 20 |
32483326 (arg->pbf_sigma_inv[1] & 0x3FF) << 10 |
32493327 (arg->pbf_sigma_inv[0] & 0x3FF);
3250
- isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_0);
3328
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_0, id);
32513329
32523330 value = (arg->pbf_sigma_inv[5] & 0x3FF) << 20 |
32533331 (arg->pbf_sigma_inv[4] & 0x3FF) << 10 |
32543332 (arg->pbf_sigma_inv[3] & 0x3FF);
3255
- isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_1);
3333
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_1, id);
32563334
32573335 value = (arg->pbf_sigma_inv[7] & 0x3FF) << 10 |
32583336 (arg->pbf_sigma_inv[6] & 0x3FF);
3259
- isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_2);
3337
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_SIGMA_INV_2, id);
32603338
32613339 value = (arg->bf_sigma_inv[2] & 0x3FF) << 20 |
32623340 (arg->bf_sigma_inv[1] & 0x3FF) << 10 |
32633341 (arg->bf_sigma_inv[0] & 0x3FF);
3264
- isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_0);
3342
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_0, id);
32653343
32663344 value = (arg->bf_sigma_inv[5] & 0x3FF) << 20 |
32673345 (arg->bf_sigma_inv[4] & 0x3FF) << 10 |
32683346 (arg->bf_sigma_inv[3] & 0x3FF);
3269
- isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_1);
3347
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_1, id);
32703348
32713349 value = (arg->bf_sigma_inv[7] & 0x3FF) << 10 |
32723350 (arg->bf_sigma_inv[6] & 0x3FF);
3273
- isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_2);
3351
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_SIGMA_INV_2, id);
32743352
32753353 value = (arg->bf_sigma_shift & 0x0F) << 4 |
32763354 (arg->pbf_sigma_shift & 0x0F);
3277
- isp3_param_write(params_vdev, value, ISP3X_SHARP_SIGMA_SHIFT);
3355
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_SIGMA_SHIFT, id);
32783356
32793357 value = (arg->clip_hf[2] & 0x3FF) << 20 |
32803358 (arg->clip_hf[1] & 0x3FF) << 10 |
32813359 (arg->clip_hf[0] & 0x3FF);
3282
- isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_0);
3360
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_0, id);
32833361
32843362 value = (arg->clip_hf[5] & 0x3FF) << 20 |
32853363 (arg->clip_hf[4] & 0x3FF) << 10 |
32863364 (arg->clip_hf[3] & 0x3FF);
3287
- isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_1);
3365
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_1, id);
32883366
32893367 value = (arg->clip_hf[7] & 0x3FF) << 10 |
32903368 (arg->clip_hf[6] & 0x3FF);
3291
- isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_2);
3369
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_CLIP_HF_2, id);
32923370
32933371 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);
3372
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_PBF_COEF, id);
32953373
32963374 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);
3375
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_BF_COEF, id);
32983376
32993377 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);
3378
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_GAUS_COEF0, id);
33013379
33023380 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);
3381
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_GAUS_COEF1, id);
33043382
33053383 value = arg->local_gainscale << 24 | (arg->global_gain_alpha & 0xf) << 16 |
33063384 (arg->global_gain & 0x3ff);
3307
- isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN);
3385
+ isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN, id);
33083386
33093387 for (i = 0; i < ISP32_SHARP_GAIN_ADJ_NUM / 2; i++) {
33103388 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);
3389
+ isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_ADJUST0 + i * 4, id);
33123390 }
33133391
33143392 value = ISP_PACK_2SHORT(arg->center_wid, arg->center_het);
3315
- isp3_param_write(params_vdev, value, ISP32_SHARP_CENTER);
3393
+ isp3_param_write(params_vdev, value, ISP32_SHARP_CENTER, id);
33163394
33173395 for (i = 0; i < ISP32_SHARP_STRENGTH_NUM / 4; i++) {
33183396 value = ISP_PACK_4BYTE(arg->strength[i * 4], arg->strength[i * 4 + 1],
33193397 arg->strength[i * 4 + 2], arg->strength[i * 4 + 3]);
3320
- isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_DIS_STRENGTH0 + i * 4);
3398
+ isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_DIS_STRENGTH0 + i * 4, id);
33213399 }
33223400 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);
3401
+ isp3_param_write(params_vdev, value, ISP32_SHARP_GAIN_DIS_STRENGTH0 + i * 4, id);
33243402
33253403 if (params_vdev->dev->isp_ver == ISP_V32) {
33263404 value = (arg->noise_strength & 0x3fff) << 16 | (arg->enhance_bit & 0xf) << 12 |
33273405 (arg->noise_sigma & 0x3ff);
3328
- isp3_param_write(params_vdev, value, ISP32_SHARP_TEXTURE);
3406
+ isp3_param_write(params_vdev, value, ISP32_SHARP_TEXTURE, id);
33293407 } else {
33303408 value = (arg->ehf_th[2] & 0x3FF) << 20 |
33313409 (arg->ehf_th[1] & 0x3FF) << 10 |
33323410 (arg->ehf_th[0] & 0x3FF);
3333
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_0);
3411
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_0, id);
33343412 value = (arg->ehf_th[5] & 0x3FF) << 20 |
33353413 (arg->ehf_th[4] & 0x3FF) << 10 |
33363414 (arg->ehf_th[3] & 0x3FF);
3337
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_1);
3415
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_1, id);
33383416 value = (arg->ehf_th[7] & 0x3FF) << 10 |
33393417 (arg->ehf_th[6] & 0x3FF);
3340
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_2);
3418
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EHF_TH_2, id);
33413419
33423420 value = (arg->clip_neg[2] & 0x3FF) << 20 |
33433421 (arg->clip_neg[1] & 0x3FF) << 10 |
33443422 (arg->clip_neg[0] & 0x3FF);
3345
- isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_0);
3423
+ isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_0, id);
33463424 value = (arg->clip_neg[5] & 0x3FF) << 20 |
33473425 (arg->clip_neg[4] & 0x3FF) << 10 |
33483426 (arg->clip_neg[3] & 0x3FF);
3349
- isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_1);
3427
+ isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_1, id);
33503428 value = (arg->clip_neg[7] & 0x3FF) << 10 |
33513429 (arg->clip_neg[6] & 0x3FF);
3352
- isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_2);
3430
+ isp3_param_write(params_vdev, value, ISP32L_SHARP_CLIP_NEG_2, id);
33533431 }
33543432 }
33553433
33563434 static void
3357
-isp_sharp_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3435
+isp_sharp_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
33583436 {
33593437 u32 value;
33603438
3361
- value = isp3_param_read_cache(params_vdev, ISP3X_SHARP_EN);
3439
+ value = isp3_param_read_cache(params_vdev, ISP3X_SHARP_EN, id);
3440
+ if ((en && (value & ISP32_MODULE_EN)) ||
3441
+ (!en && !(value & ISP32_MODULE_EN)))
3442
+ return;
3443
+
33623444 value &= ~ISP32_MODULE_EN;
3363
-
3364
- if (en)
3445
+ if (en) {
3446
+ isp3_param_set_bits(params_vdev,
3447
+ ISP3X_ISP_CTRL1, ISP32_SHP_FST_FRAME, id);
33653448 value |= ISP32_MODULE_EN;
3366
-
3367
- isp3_param_write(params_vdev, value, ISP3X_SHARP_EN);
3449
+ }
3450
+ isp3_param_write(params_vdev, value, ISP3X_SHARP_EN, id);
33683451 }
33693452
33703453 static void
33713454 isp_baynr_config(struct rkisp_isp_params_vdev *params_vdev,
3372
- const struct isp32_baynr_cfg *arg)
3455
+ const struct isp32_baynr_cfg *arg, u32 id)
33733456 {
33743457 u32 i, value;
33753458
3376
- value = isp3_param_read(params_vdev, ISP3X_BAYNR_CTRL);
3459
+ value = isp3_param_read(params_vdev, ISP3X_BAYNR_CTRL, id);
33773460 value &= ISP32_MODULE_EN;
33783461
33793462 value |= !!arg->bay3d_gain_en << 16 |
33803463 (arg->lg2_mode & 0x3) << 12 |
33813464 !!arg->gauss_en << 8 |
33823465 !!arg->log_bypass << 4;
3383
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL);
3466
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL, id);
33843467
33853468 value = ISP_PACK_2SHORT(arg->dgain0, arg->dgain1);
3386
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_DGAIN0);
3469
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_DGAIN0, id);
33873470
3388
- isp3_param_write(params_vdev, arg->dgain2, ISP3X_BAYNR_DGAIN1);
3389
- isp3_param_write(params_vdev, arg->pix_diff, ISP3X_BAYNR_PIXDIFF);
3471
+ isp3_param_write(params_vdev, arg->dgain2, ISP3X_BAYNR_DGAIN1, id);
3472
+ isp3_param_write(params_vdev, arg->pix_diff, ISP3X_BAYNR_PIXDIFF, id);
33903473
33913474 value = ISP_PACK_2SHORT(arg->softthld, arg->diff_thld);
3392
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_THLD);
3475
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_THLD, id);
33933476
33943477 value = ISP_PACK_2SHORT(arg->reg_w1, arg->bltflt_streng);
3395
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_W1_STRENG);
3478
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_W1_STRENG, id);
33963479
33973480 for (i = 0; i < ISP32_BAYNR_XY_NUM / 2; i++) {
33983481 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);
3482
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_SIGMAX01 + 4 * i, id);
34003483 }
34013484
34023485 for (i = 0; i < ISP32_BAYNR_XY_NUM / 2; i++) {
34033486 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);
3487
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_SIGMAY01 + 4 * i, id);
34053488 }
34063489
34073490 value = (arg->weit_d2 & 0x3FF) << 20 |
34083491 (arg->weit_d1 & 0x3FF) << 10 |
34093492 (arg->weit_d0 & 0x3FF);
3410
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_WRIT_D);
3493
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_WRIT_D, id);
34113494
34123495 value = ISP_PACK_2SHORT(arg->lg2_off, arg->lg2_lgoff);
3413
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_LG_OFF);
3496
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_LG_OFF, id);
34143497
34153498 value = arg->dat_max & 0xfffff;
3416
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_DAT_MAX);
3499
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_DAT_MAX, id);
34173500
34183501 value = ISP_PACK_2SHORT(arg->rgain_off, arg->bgain_off);
3419
- isp3_param_write(params_vdev, value, ISP32_BAYNR_SIGOFF);
3502
+ isp3_param_write(params_vdev, value, ISP32_BAYNR_SIGOFF, id);
34203503
34213504 for (i = 0; i < ISP32_BAYNR_GAIN_NUM / 4; i++) {
34223505 value = ISP_PACK_4BYTE(arg->gain_x[i * 4], arg->gain_x[i * 4 + 1],
34233506 arg->gain_x[i * 4 + 2], arg->gain_x[i * 4 + 3]);
3424
- isp3_param_write(params_vdev, value, ISP32_BAYNR_GAINX03 + i * 4);
3507
+ isp3_param_write(params_vdev, value, ISP32_BAYNR_GAINX03 + i * 4, id);
34253508 }
34263509
34273510 for (i = 0; i < ISP32_BAYNR_GAIN_NUM / 2; i++) {
34283511 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);
3512
+ isp3_param_write(params_vdev, value, ISP32_BAYNR_GAINY01 + i * 4, id);
34303513 }
34313514 }
34323515
34333516 static void
3434
-isp_baynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3517
+isp_baynr_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
34353518 {
34363519 u32 value;
34373520
3438
- value = isp3_param_read_cache(params_vdev, ISP3X_BAYNR_CTRL);
3521
+ value = isp3_param_read_cache(params_vdev, ISP3X_BAYNR_CTRL, id);
34393522 value &= ~ISP32_MODULE_EN;
34403523
34413524 if (en)
34423525 value |= ISP32_MODULE_EN;
34433526
3444
- isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL);
3527
+ isp3_param_write(params_vdev, value, ISP3X_BAYNR_CTRL, id);
34453528 }
34463529
34473530 static void
34483531 isp_bay3d_config(struct rkisp_isp_params_vdev *params_vdev,
3449
- const struct isp32_bay3d_cfg *arg)
3532
+ const struct isp32_bay3d_cfg *arg, u32 id)
34503533 {
34513534 struct rkisp_isp_params_val_v32 *priv_val;
34523535 u32 i, value;
34533536
34543537 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
3455
- value = isp3_param_read(params_vdev, ISP3X_BAY3D_CTRL);
3538
+ value = isp3_param_read(params_vdev, ISP3X_BAY3D_CTRL, id);
34563539 value &= (ISP32_MODULE_EN | ISP32_BAY3D_BWSAVING(1));
34573540
34583541 value |= !!arg->loswitch_protect << 12 |
....@@ -3478,7 +3561,7 @@
34783561 "bwsaving to %d no support change for bay3d en\n",
34793562 arg->bwsaving_en);
34803563 }
3481
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_CTRL);
3564
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_CTRL, id);
34823565
34833566 value = !!arg->wgtmix_opt_en << 12 |
34843567 !!arg->curds_high_en << 8 |
....@@ -3500,72 +3583,72 @@
35003583 value &= ~(BIT(3) | BIT(4));
35013584 else if (!(value & (BIT(3) | BIT(4))))
35023585 value |= BIT(3);
3503
- isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1);
3586
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1, id);
35043587
35053588 value = ISP_PACK_2SHORT(arg->softwgt, arg->hidif_th);
3506
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_KALRATIO);
3589
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_KALRATIO, id);
35073590
3508
- isp3_param_write(params_vdev, arg->glbpk2, ISP3X_BAY3D_GLBPK2);
3591
+ isp3_param_write(params_vdev, arg->glbpk2, ISP3X_BAY3D_GLBPK2, id);
35093592
35103593 value = ISP_PACK_2SHORT(arg->wgtlmt, arg->wgtratio);
3511
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_WGTLMT);
3594
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_WGTLMT, id);
35123595
35133596 for (i = 0; i < ISP32_BAY3D_XY_NUM / 2; i++) {
35143597 value = ISP_PACK_2SHORT(arg->sig0_x[2 * i],
35153598 arg->sig0_x[2 * i + 1]);
3516
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_X0 + 4 * i);
3599
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_X0 + 4 * i, id);
35173600
35183601 value = ISP_PACK_2SHORT(arg->sig1_x[2 * i],
35193602 arg->sig1_x[2 * i + 1]);
3520
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_X0 + 4 * i);
3603
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_X0 + 4 * i, id);
35213604 }
35223605
35233606 for (i = 0; i < ISP32_BAY3D_XY_NUM / 2; i++) {
35243607 value = ISP_PACK_2SHORT(arg->sig0_y[2 * i],
35253608 arg->sig0_y[2 * i + 1]);
3526
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_Y0 + 4 * i);
3609
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG0_Y0 + 4 * i, id);
35273610
35283611 value = ISP_PACK_2SHORT(arg->sig1_y[2 * i],
35293612 arg->sig1_y[2 * i + 1]);
3530
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_Y0 + 4 * i);
3613
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG1_Y0 + 4 * i, id);
35313614
35323615 value = ISP_PACK_2SHORT(arg->sig2_y[2 * i],
35333616 arg->sig2_y[2 * i + 1]);
3534
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG2_Y0 + 4 * i);
3617
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_SIG2_Y0 + 4 * i, id);
35353618 }
35363619
35373620 if (params_vdev->dev->isp_ver == ISP_V32_L) {
35383621 value = ISP_PACK_2SHORT(0, arg->wgtmin);
3539
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_LODIF_STAT1);
3622
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_LODIF_STAT1, id);
35403623 }
35413624
35423625 value = ISP_PACK_2SHORT(arg->hisigrat0, arg->hisigrat1);
3543
- isp3_param_write(params_vdev, value, ISP32_BAY3D_HISIGRAT);
3626
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_HISIGRAT, id);
35443627
35453628 value = ISP_PACK_2SHORT(arg->hisigoff0, arg->hisigoff1);
3546
- isp3_param_write(params_vdev, value, ISP32_BAY3D_HISIGOFF);
3629
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_HISIGOFF, id);
35473630
35483631 value = ISP_PACK_2SHORT(arg->losigoff, arg->losigrat);
3549
- isp3_param_write(params_vdev, value, ISP32_BAY3D_LOSIG);
3632
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_LOSIG, id);
35503633
35513634 value = ISP_PACK_2SHORT(arg->rgain_off, arg->bgain_off);
3552
- isp3_param_write(params_vdev, value, ISP32_BAY3D_SIGPK);
3635
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_SIGPK, id);
35533636
35543637 value = ISP_PACK_4BYTE(arg->siggaus0, arg->siggaus1, arg->siggaus2, 0);
35553638 if (params_vdev->dev->isp_ver == ISP_V32)
35563639 value |= (arg->siggaus3 << 24);
3557
- isp3_param_write(params_vdev, value, ISP32_BAY3D_SIGGAUS);
3640
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_SIGGAUS, id);
35583641 }
35593642
35603643 static void
3561
-isp_bay3d_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3644
+isp_bay3d_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
35623645 {
35633646 struct rkisp_device *ispdev = params_vdev->dev;
35643647 struct rkisp_isp_params_val_v32 *priv_val;
35653648 u32 value, bay3d_ctrl;
35663649
35673650 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
3568
- bay3d_ctrl = isp3_param_read_cache(params_vdev, ISP3X_BAY3D_CTRL);
3651
+ bay3d_ctrl = isp3_param_read_cache(params_vdev, ISP3X_BAY3D_CTRL, id);
35693652 if ((en && (bay3d_ctrl & ISP32_MODULE_EN)) ||
35703653 (!en && !(bay3d_ctrl & ISP32_MODULE_EN)))
35713654 return;
....@@ -3576,85 +3659,85 @@
35763659 return;
35773660 }
35783661
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);
3662
+ value = priv_val->bay3d_iir_size;
3663
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_SIZE, id);
3664
+ value = priv_val->buf_3dnr_iir.dma_addr + value * id;
3665
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_WR_BASE, id);
3666
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_IIR_RD_BASE, id);
35843667
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);
3668
+ value = priv_val->bay3d_ds_size;
3669
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_SIZE, id);
3670
+ value = priv_val->buf_3dnr_ds.dma_addr + value * id;
3671
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_WR_BASE, id);
3672
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_DS_RD_BASE, id);
35903673
35913674 value = priv_val->is_sram ?
35923675 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);
3676
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_BASE, id);
3677
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_RD_BASE, id);
35953678 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);
3679
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_SIZE, id);
3680
+ isp3_param_write(params_vdev, value, ISP32_MI_BAY3D_CUR_RD_SIZE, id);
35983681 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);
3682
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_WR_LENGTH, id);
3683
+ isp3_param_write(params_vdev, value, ISP3X_MI_BAY3D_CUR_RD_LENGTH, id);
36013684 value = priv_val->bay3d_cur_wrap_line << 16 |
36023685 (ispdev->isp_ver == ISP_V32 ? 28 : 20);
3603
- isp3_param_write(params_vdev, value, ISP3X_BAY3D_MI_ST);
3686
+ isp3_param_write(params_vdev, value, ISP3X_BAY3D_MI_ST, id);
36043687
36053688 /* mibuf_size for fifo_cur_full, set to max: (3072 - 2) / 2, 2 align */
36063689 if (ispdev->isp_ver == ISP_V32) {
36073690 value = 0x5fe << 16;
3608
- isp3_param_set_bits(params_vdev, ISP3X_BAY3D_IN_IRQ_LINECNT, value);
3691
+ isp3_param_set_bits(params_vdev, ISP3X_BAY3D_IN_IRQ_LINECNT, value, id);
36093692 }
36103693
3611
- value = isp3_param_read_cache(params_vdev, ISP32_BAY3D_CTRL1);
3694
+ value = isp3_param_read_cache(params_vdev, ISP32_BAY3D_CTRL1, id);
36123695 if (priv_val->is_lo8x8) {
36133696 if (value & (BIT(3) | BIT(4))) {
36143697 value &= ~(BIT(3) | BIT(4));
3615
- isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1);
3698
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1, id);
36163699 }
36173700 } else if (!(value & (BIT(3) | BIT(4)))) {
36183701 value |= BIT(3);
3619
- isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1);
3702
+ isp3_param_write(params_vdev, value, ISP32_BAY3D_CTRL1, id);
36203703 }
36213704 bay3d_ctrl |= ISP32_MODULE_EN;
3622
- isp3_param_write(params_vdev, bay3d_ctrl, ISP3X_BAY3D_CTRL);
3705
+ isp3_param_write(params_vdev, bay3d_ctrl, ISP3X_BAY3D_CTRL, id);
36233706
36243707 value = ISP3X_BAY3D_IIR_WR_AUTO_UPD | ISP3X_BAY3D_CUR_WR_AUTO_UPD |
36253708 ISP3X_BAY3D_DS_WR_AUTO_UPD | ISP3X_BAY3D_IIRSELF_UPD |
36263709 ISP3X_BAY3D_CURSELF_UPD | ISP3X_BAY3D_DSSELF_UPD |
36273710 ISP3X_BAY3D_RDSELF_UPD;
3628
- isp3_param_set_bits(params_vdev, MI_WR_CTRL2, value);
3711
+ isp3_param_set_bits(params_vdev, MI_WR_CTRL2, value, id);
36293712
3630
- isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1, ISP3X_RAW3D_FST_FRAME);
3713
+ isp3_param_set_bits(params_vdev, ISP3X_ISP_CTRL1, ISP3X_RAW3D_FST_FRAME, id);
36313714 } else {
36323715 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));
3716
+ isp3_param_write(params_vdev, bay3d_ctrl, ISP3X_BAY3D_CTRL, id);
3717
+ isp3_param_clear_bits(params_vdev, ISP3X_GAIN_CTRL, BIT(4), id);
36353718 }
36363719 }
36373720
36383721 static void
36393722 isp_gain_config(struct rkisp_isp_params_vdev *params_vdev,
3640
- const struct isp3x_gain_cfg *arg)
3723
+ const struct isp3x_gain_cfg *arg, u32 id)
36413724 {
36423725 u32 val;
36433726
36443727 val = arg->g0 & 0x3ffff;
3645
- isp3_param_write(params_vdev, val, ISP3X_GAIN_G0);
3728
+ isp3_param_write(params_vdev, val, ISP3X_GAIN_G0, id);
36463729 val = ISP_PACK_2SHORT(arg->g1, arg->g2);
3647
- isp3_param_write(params_vdev, val, ISP3X_GAIN_G1_G2);
3730
+ isp3_param_write(params_vdev, val, ISP3X_GAIN_G1_G2, id);
36483731 }
36493732
36503733 static void
3651
-isp_gain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3734
+isp_gain_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
36523735 {
36533736 struct rkisp_isp_params_val_v32 *priv_val =
36543737 (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
36553738 u32 val = 0;
36563739
3657
- val = isp3_param_read_cache(params_vdev, ISP3X_GAIN_CTRL);
3740
+ val = isp3_param_read_cache(params_vdev, ISP3X_GAIN_CTRL, id);
36583741 if (en) {
36593742 if (params_vdev->dev->isp_ver == ISP_V32) {
36603743 val |= priv_val->lut3d_en << 20 |
....@@ -3662,7 +3745,7 @@
36623745 priv_val->drc_en << 12 |
36633746 priv_val->lsc_en << 8 |
36643747 priv_val->bay3d_en << 4;
3665
- if (isp3_param_read(params_vdev, ISP3X_HDRMGE_CTRL) & BIT(0))
3748
+ if (isp3_param_read(params_vdev, ISP3X_HDRMGE_CTRL, id) & BIT(0))
36663749 val |= BIT(1);
36673750 if (val)
36683751 val |= ISP32_MODULE_EN;
....@@ -3670,12 +3753,12 @@
36703753 val |= ISP32_MODULE_EN;
36713754 }
36723755 }
3673
- isp3_param_write(params_vdev, val, ISP3X_GAIN_CTRL);
3756
+ isp3_param_write(params_vdev, val, ISP3X_GAIN_CTRL, id);
36743757 }
36753758
36763759 static void
36773760 isp_cac_config(struct rkisp_isp_params_vdev *params_vdev,
3678
- const struct isp32_cac_cfg *arg)
3761
+ const struct isp32_cac_cfg *arg, u32 id)
36793762 {
36803763 struct rkisp_device *dev = params_vdev->dev;
36813764 struct rkisp_isp_params_val_v32 *priv_val;
....@@ -3684,7 +3767,7 @@
36843767
36853768 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
36863769
3687
- ctrl = isp3_param_read(params_vdev, ISP3X_CAC_CTRL);
3770
+ ctrl = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
36883771 ctrl &= ISP3X_CAC_EN;
36893772 ctrl |= !!arg->bypass_en << 1 | !!arg->center_en << 3 |
36903773 (arg->clip_g_mode & 0x3) << 5 | !!arg->edge_detect_en << 7 |
....@@ -3692,38 +3775,38 @@
36923775
36933776 val = (arg->psf_sft_bit & 0xff) |
36943777 (arg->cfg_num & 0x7ff) << 8;
3695
- isp3_param_write(params_vdev, val, ISP3X_CAC_PSF_PARA);
3778
+ isp3_param_write(params_vdev, val, ISP3X_CAC_PSF_PARA, id);
36963779
36973780 val = ISP_PACK_2SHORT(arg->center_width, arg->center_height);
3698
- isp3_param_write(params_vdev, val, ISP3X_CAC_STRENGTH_CENTER);
3781
+ isp3_param_write(params_vdev, val, ISP3X_CAC_STRENGTH_CENTER, id);
36993782
37003783 for (i = 0; i < ISP32_CAC_STRENGTH_NUM / 2; i++) {
37013784 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);
3785
+ isp3_param_write(params_vdev, val, ISP3X_CAC_STRENGTH0 + i * 4, id);
37033786 }
37043787
37053788 val = (arg->flat_thed_r & 0x1f) << 8 | (arg->flat_thed_b & 0x1f);
3706
- isp3_param_write(params_vdev, val, ISP32_CAC_FLAT_THED);
3789
+ isp3_param_write(params_vdev, val, ISP32_CAC_FLAT_THED, id);
37073790
37083791 val = ISP_PACK_2SHORT(arg->offset_b, arg->offset_r);
3709
- isp3_param_write(params_vdev, val, ISP32_CAC_OFFSET);
3792
+ isp3_param_write(params_vdev, val, ISP32_CAC_OFFSET, id);
37103793
37113794 val = arg->expo_thed_b & 0x1fffff;
3712
- isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_THED_B);
3795
+ isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_THED_B, id);
37133796
37143797 val = arg->expo_thed_r & 0x1fffff;
3715
- isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_THED_R);
3798
+ isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_THED_R, id);
37163799
37173800 val = arg->expo_adj_b & 0xfffff;
3718
- isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_ADJ_B);
3801
+ isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_ADJ_B, id);
37193802
37203803 val = arg->expo_adj_r & 0xfffff;
3721
- isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_ADJ_R);
3804
+ isp3_param_write(params_vdev, val, ISP32_CAC_EXPO_ADJ_R, id);
37223805
37233806 for (i = 0; i < ISP32_MESH_BUF_NUM; i++) {
3724
- if (!priv_val->buf_cac[i].mem_priv)
3807
+ if (!priv_val->buf_cac[id][i].mem_priv)
37253808 continue;
3726
- if (arg->buf_fd == priv_val->buf_cac[i].dma_fd)
3809
+ if (arg->buf_fd == priv_val->buf_cac[id][i].dma_fd)
37273810 break;
37283811 }
37293812
....@@ -3732,44 +3815,53 @@
37323815 return;
37333816 }
37343817
3735
- if (!priv_val->buf_cac[i].vaddr) {
3818
+ if (!priv_val->buf_cac[id][i].vaddr) {
37363819 dev_err(dev->dev, "no cac buffer allocated\n");
37373820 return;
37383821 }
37393822
3740
- val = priv_val->buf_cac_idx;
3741
- head = (struct isp2x_mesh_head *)priv_val->buf_cac[val].vaddr;
3823
+ val = priv_val->buf_cac_idx[id];
3824
+ head = (struct isp2x_mesh_head *)priv_val->buf_cac[id][val].vaddr;
37423825 head->stat = MESH_BUF_INIT;
37433826
3744
- head = (struct isp2x_mesh_head *)priv_val->buf_cac[i].vaddr;
3827
+ head = (struct isp2x_mesh_head *)priv_val->buf_cac[id][i].vaddr;
37453828 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);
3829
+ priv_val->buf_cac_idx[id] = i;
3830
+ rkisp_prepare_buffer(dev, &priv_val->buf_cac[id][i]);
3831
+ val = priv_val->buf_cac[id][i].dma_addr + head->data_oft;
3832
+ isp3_param_write(params_vdev, val, ISP3X_MI_LUT_CAC_RD_BASE, id);
3833
+ isp3_param_write(params_vdev, arg->hsize, ISP3X_MI_LUT_CAC_RD_H_WSIZE, id);
3834
+ isp3_param_write(params_vdev, arg->vsize, ISP3X_MI_LUT_CAC_RD_V_SIZE, id);
37523835 if (ctrl & ISP3X_CAC_EN)
37533836 ctrl |= ISP3X_CAC_LUT_EN | ISP32_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
3754
- isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL);
3837
+ isp3_param_write(params_vdev, ctrl, ISP3X_CAC_CTRL, id);
37553838 }
37563839
37573840 static void
3758
-isp_cac_enable(struct rkisp_isp_params_vdev *params_vdev, bool en)
3841
+isp_cac_enable(struct rkisp_isp_params_vdev *params_vdev, bool en, u32 id)
37593842 {
3843
+ struct rkisp_device *dev = params_vdev->dev;
3844
+ struct rkisp_isp_params_val_v32 *priv_val;
37603845 u32 val;
37613846
3762
- val = isp3_param_read(params_vdev, ISP3X_CAC_CTRL);
3847
+ priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
3848
+ val = priv_val->buf_cac_idx[id];
3849
+ if (en && !priv_val->buf_cac[id][val].vaddr) {
3850
+ dev_err(dev->dev, "no cac buffer allocated\n");
3851
+ return;
3852
+ }
3853
+
3854
+ val = isp3_param_read(params_vdev, ISP3X_CAC_CTRL, id);
37633855 val &= ~(ISP3X_CAC_EN | ISP3X_CAC_LUT_EN | ISP32_SELF_FORCE_UPD);
37643856 if (en)
37653857 val |= ISP3X_CAC_EN | ISP3X_CAC_LUT_EN |
37663858 ISP32_SELF_FORCE_UPD | ISP3X_CAC_LUT_MODE(3);
3767
- isp3_param_write(params_vdev, val, ISP3X_CAC_CTRL);
3859
+ isp3_param_write(params_vdev, val, ISP3X_CAC_CTRL, id);
37683860 }
37693861
37703862 static void
37713863 isp_csm_config(struct rkisp_isp_params_vdev *params_vdev,
3772
- const struct isp21_csm_cfg *arg)
3864
+ const struct isp21_csm_cfg *arg, u32 id)
37733865 {
37743866 u32 i, val;
37753867
....@@ -3780,19 +3872,19 @@
37803872 (arg->csm_coeff[i] & 0x1ff);
37813873 else
37823874 val = arg->csm_coeff[i] & 0x1ff;
3783
- isp3_param_write(params_vdev, val, ISP3X_ISP_CC_COEFF_0 + i * 4);
3875
+ isp3_param_write(params_vdev, val, ISP3X_ISP_CC_COEFF_0 + i * 4, id);
37843876 }
37853877
3786
- val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0);
3878
+ val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0, id);
37873879 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);
3880
+ isp3_param_write(params_vdev, val, ISP3X_ISP_CTRL0, id);
37893881 }
37903882
37913883 static void
37923884 isp_cgc_config(struct rkisp_isp_params_vdev *params_vdev,
3793
- const struct isp21_cgc_cfg *arg)
3885
+ const struct isp21_cgc_cfg *arg, u32 id)
37943886 {
3795
- u32 val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0);
3887
+ u32 val = isp3_param_read_cache(params_vdev, ISP3X_ISP_CTRL0, id);
37963888 u32 eff_ctrl, cproc_ctrl;
37973889
37983890 params_vdev->quantization = V4L2_QUANTIZATION_FULL_RANGE;
....@@ -3803,31 +3895,31 @@
38033895 }
38043896 if (arg->ratio_en)
38053897 val |= ISP3X_SW_CGC_RATIO_EN;
3806
- isp3_param_write(params_vdev, val, ISP3X_ISP_CTRL0);
3898
+ isp3_param_write(params_vdev, val, ISP3X_ISP_CTRL0, id);
38073899
3808
- cproc_ctrl = isp3_param_read(params_vdev, ISP3X_CPROC_CTRL);
3900
+ cproc_ctrl = isp3_param_read(params_vdev, ISP3X_CPROC_CTRL, id);
38093901 if (cproc_ctrl & CIF_C_PROC_CTR_ENABLE) {
38103902 val = CIF_C_PROC_YOUT_FULL | CIF_C_PROC_YIN_FULL | CIF_C_PROC_COUT_FULL;
38113903 if (arg->yuv_limit)
38123904 cproc_ctrl &= ~val;
38133905 else
38143906 cproc_ctrl |= val;
3815
- isp3_param_write(params_vdev, cproc_ctrl, ISP3X_CPROC_CTRL);
3907
+ isp3_param_write(params_vdev, cproc_ctrl, ISP3X_CPROC_CTRL, id);
38163908 }
38173909
3818
- eff_ctrl = isp3_param_read(params_vdev, ISP3X_IMG_EFF_CTRL);
3910
+ eff_ctrl = isp3_param_read(params_vdev, ISP3X_IMG_EFF_CTRL, id);
38193911 if (eff_ctrl & CIF_IMG_EFF_CTRL_ENABLE) {
38203912 if (arg->yuv_limit)
38213913 eff_ctrl &= ~CIF_IMG_EFF_CTRL_YCBCR_FULL;
38223914 else
38233915 eff_ctrl |= CIF_IMG_EFF_CTRL_YCBCR_FULL;
3824
- isp3_param_write(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL);
3916
+ isp3_param_write(params_vdev, eff_ctrl, ISP3X_IMG_EFF_CTRL, id);
38253917 }
38263918 }
38273919
38283920 static void
38293921 isp_vsm_config(struct rkisp_isp_params_vdev *params_vdev,
3830
- const struct isp32_vsm_cfg *arg)
3922
+ const struct isp32_vsm_cfg *arg, u32 id)
38313923 {
38323924 struct rkisp_device *ispdev = params_vdev->dev;
38333925 struct v4l2_rect *out_crop = &ispdev->isp_sdev.out_crop;
....@@ -3836,38 +3928,38 @@
38363928 u32 val, h, v;
38373929
38383930 val = arg->h_offs;
3839
- isp3_param_write(params_vdev, val, ISP32_VSM_H_OFFS);
3931
+ isp3_param_write(params_vdev, val, ISP32_VSM_H_OFFS, id);
38403932 val = arg->v_offs;
3841
- isp3_param_write(params_vdev, val, ISP32_VSM_V_OFFS);
3933
+ isp3_param_write(params_vdev, val, ISP32_VSM_V_OFFS, id);
38423934
38433935 h = arg->h_size;
38443936 if (h > width - arg->h_offs)
38453937 h = width - arg->h_offs;
38463938 h &= ~1;
3847
- isp3_param_write(params_vdev, h, ISP32_VSM_H_SIZE);
3939
+ isp3_param_write(params_vdev, h, ISP32_VSM_H_SIZE, id);
38483940
38493941 v = arg->v_size;
38503942 if (v > height - arg->v_offs)
38513943 v = height - arg->v_offs;
38523944 v &= ~1;
3853
- isp3_param_write(params_vdev, v, ISP32_VSM_V_SIZE);
3945
+ isp3_param_write(params_vdev, v, ISP32_VSM_V_SIZE, id);
38543946
38553947 val = arg->h_segments;
38563948 if (val > (h - 48) / 16)
38573949 val = (h - 48) / 16;
3858
- isp3_param_write(params_vdev, val, ISP32_VSM_H_SEGMENTS);
3950
+ isp3_param_write(params_vdev, val, ISP32_VSM_H_SEGMENTS, id);
38593951
38603952 val = arg->v_segments;
38613953 if (val > (v - 48) / 16)
38623954 val = (v - 48) / 16;
3863
- isp3_param_write(params_vdev, val, ISP32_VSM_V_SEGMENTS);
3955
+ isp3_param_write(params_vdev, val, ISP32_VSM_V_SEGMENTS, id);
38643956 }
38653957
38663958 static void
38673959 isp_vsm_enable(struct rkisp_isp_params_vdev *params_vdev,
3868
- bool en)
3960
+ bool en, u32 id)
38693961 {
3870
- isp3_param_write(params_vdev, en, ISP32_VSM_MODE);
3962
+ isp3_param_write(params_vdev, en, ISP32_VSM_MODE, id);
38713963 }
38723964
38733965 struct rkisp_isp_params_ops_v32 isp_params_ops_v32 = {
....@@ -3946,7 +4038,7 @@
39464038 static __maybe_unused
39474039 void __isp_isr_other_config(struct rkisp_isp_params_vdev *params_vdev,
39484040 const struct isp32_isp_params_cfg *new_params,
3949
- enum rkisp_params_type type)
4041
+ enum rkisp_params_type type, u32 id)
39504042 {
39514043 struct rkisp_isp_params_ops_v32 *ops =
39524044 (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
....@@ -3958,101 +4050,101 @@
39584050
39594051 if (type == RKISP_PARAMS_SHD) {
39604052 if ((module_cfg_update & ISP32_MODULE_HDRMGE))
3961
- ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type);
4053
+ ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type, id);
39624054
39634055 if ((module_cfg_update & ISP32_MODULE_DRC))
3964
- ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type);
4056
+ ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type, id);
39654057 return;
39664058 }
39674059
39684060 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);
4061
+ "%s id:%d seq:%d module_cfg_update:0x%llx\n",
4062
+ __func__, id, new_params->frame_id, module_cfg_update);
39714063
39724064 if (module_cfg_update & ISP32_MODULE_LSC)
3973
- ops->lsc_config(params_vdev, &new_params->others.lsc_cfg);
4065
+ ops->lsc_config(params_vdev, &new_params->others.lsc_cfg, id);
39744066
39754067 if (module_cfg_update & ISP32_MODULE_DPCC)
3976
- ops->dpcc_config(params_vdev, &new_params->others.dpcc_cfg);
4068
+ ops->dpcc_config(params_vdev, &new_params->others.dpcc_cfg, id);
39774069
39784070 if (module_cfg_update & ISP32_MODULE_BLS)
3979
- ops->bls_config(params_vdev, &new_params->others.bls_cfg);
4071
+ ops->bls_config(params_vdev, &new_params->others.bls_cfg, id);
39804072
39814073 if (module_cfg_update & ISP32_MODULE_SDG)
3982
- ops->sdg_config(params_vdev, &new_params->others.sdg_cfg);
4074
+ ops->sdg_config(params_vdev, &new_params->others.sdg_cfg, id);
39834075
39844076 if (module_cfg_update & ISP32_MODULE_AWB_GAIN)
3985
- ops->awbgain_config(params_vdev, &new_params->others.awb_gain_cfg);
4077
+ ops->awbgain_config(params_vdev, &new_params->others.awb_gain_cfg, id);
39864078
39874079 if (module_cfg_update & ISP32_MODULE_DEBAYER)
3988
- ops->debayer_config(params_vdev, &new_params->others.debayer_cfg);
4080
+ ops->debayer_config(params_vdev, &new_params->others.debayer_cfg, id);
39894081
39904082 if (module_cfg_update & ISP32_MODULE_CCM)
3991
- ops->ccm_config(params_vdev, &new_params->others.ccm_cfg);
4083
+ ops->ccm_config(params_vdev, &new_params->others.ccm_cfg, id);
39924084
39934085 if (module_cfg_update & ISP32_MODULE_GOC)
3994
- ops->goc_config(params_vdev, &new_params->others.gammaout_cfg);
4086
+ ops->goc_config(params_vdev, &new_params->others.gammaout_cfg, id);
39954087
39964088 /* range csm->cgc->cproc->ie */
39974089 if (module_cfg_update & ISP3X_MODULE_CSM)
3998
- ops->csm_config(params_vdev, &new_params->others.csm_cfg);
4090
+ ops->csm_config(params_vdev, &new_params->others.csm_cfg, id);
39994091
40004092 if (module_cfg_update & ISP3X_MODULE_CGC)
4001
- ops->cgc_config(params_vdev, &new_params->others.cgc_cfg);
4093
+ ops->cgc_config(params_vdev, &new_params->others.cgc_cfg, id);
40024094
40034095 if (module_cfg_update & ISP32_MODULE_CPROC)
4004
- ops->cproc_config(params_vdev, &new_params->others.cproc_cfg);
4096
+ ops->cproc_config(params_vdev, &new_params->others.cproc_cfg, id);
40054097
40064098 if (module_cfg_update & ISP32_MODULE_IE)
4007
- ops->ie_config(params_vdev, &new_params->others.ie_cfg);
4099
+ ops->ie_config(params_vdev, &new_params->others.ie_cfg, id);
40084100
40094101 if (module_cfg_update & ISP32_MODULE_HDRMGE)
4010
- ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type);
4102
+ ops->hdrmge_config(params_vdev, &new_params->others.hdrmge_cfg, type, id);
40114103
40124104 if (module_cfg_update & ISP32_MODULE_DRC)
4013
- ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type);
4105
+ ops->hdrdrc_config(params_vdev, &new_params->others.drc_cfg, type, id);
40144106
40154107 if (module_cfg_update & ISP32_MODULE_GIC)
4016
- ops->gic_config(params_vdev, &new_params->others.gic_cfg);
4108
+ ops->gic_config(params_vdev, &new_params->others.gic_cfg, id);
40174109
40184110 if (module_cfg_update & ISP32_MODULE_DHAZ)
4019
- ops->dhaz_config(params_vdev, &new_params->others.dhaz_cfg);
4111
+ ops->dhaz_config(params_vdev, &new_params->others.dhaz_cfg, id);
40204112
40214113 if (module_cfg_update & ISP32_MODULE_3DLUT)
4022
- ops->isp3dlut_config(params_vdev, &new_params->others.isp3dlut_cfg);
4114
+ ops->isp3dlut_config(params_vdev, &new_params->others.isp3dlut_cfg, id);
40234115
40244116 if (module_cfg_update & ISP32_MODULE_LDCH)
4025
- ops->ldch_config(params_vdev, &new_params->others.ldch_cfg);
4117
+ ops->ldch_config(params_vdev, &new_params->others.ldch_cfg, id);
40264118
40274119 if (module_cfg_update & ISP32_MODULE_YNR)
4028
- ops->ynr_config(params_vdev, &new_params->others.ynr_cfg);
4120
+ ops->ynr_config(params_vdev, &new_params->others.ynr_cfg, id);
40294121
40304122 if (module_cfg_update & ISP32_MODULE_CNR)
4031
- ops->cnr_config(params_vdev, &new_params->others.cnr_cfg);
4123
+ ops->cnr_config(params_vdev, &new_params->others.cnr_cfg, id);
40324124
40334125 if (module_cfg_update & ISP32_MODULE_SHARP)
4034
- ops->sharp_config(params_vdev, &new_params->others.sharp_cfg);
4126
+ ops->sharp_config(params_vdev, &new_params->others.sharp_cfg, id);
40354127
40364128 if (module_cfg_update & ISP32_MODULE_BAYNR)
4037
- ops->baynr_config(params_vdev, &new_params->others.baynr_cfg);
4129
+ ops->baynr_config(params_vdev, &new_params->others.baynr_cfg, id);
40384130
40394131 if (module_cfg_update & ISP32_MODULE_BAY3D)
4040
- ops->bay3d_config(params_vdev, &new_params->others.bay3d_cfg);
4132
+ ops->bay3d_config(params_vdev, &new_params->others.bay3d_cfg, id);
40414133
40424134 if (module_cfg_update & ISP32_MODULE_CAC)
4043
- ops->cac_config(params_vdev, &new_params->others.cac_cfg);
4135
+ ops->cac_config(params_vdev, &new_params->others.cac_cfg, id);
40444136
40454137 if (module_cfg_update & ISP32_MODULE_GAIN)
4046
- ops->gain_config(params_vdev, &new_params->others.gain_cfg);
4138
+ ops->gain_config(params_vdev, &new_params->others.gain_cfg, id);
40474139
40484140 if (module_cfg_update & ISP32_MODULE_VSM)
4049
- ops->vsm_config(params_vdev, &new_params->others.vsm_cfg);
4141
+ ops->vsm_config(params_vdev, &new_params->others.vsm_cfg, id);
40504142 }
40514143
40524144 static __maybe_unused
40534145 void __isp_isr_other_en(struct rkisp_isp_params_vdev *params_vdev,
40544146 const struct isp32_isp_params_cfg *new_params,
4055
- enum rkisp_params_type type)
4147
+ enum rkisp_params_type type, u32 id)
40564148 {
40574149 struct rkisp_isp_params_ops_v32 *ops =
40584150 (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
....@@ -4070,110 +4162,110 @@
40704162 return;
40714163
40724164 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);
4165
+ "%s id:%d seq:%d module_en_update:0x%llx module_ens:0x%llx\n",
4166
+ __func__, id, new_params->frame_id, module_en_update, module_ens);
40754167
40764168 if (module_en_update & ISP32_MODULE_DPCC)
4077
- ops->dpcc_enable(params_vdev, !!(module_ens & ISP32_MODULE_DPCC));
4169
+ ops->dpcc_enable(params_vdev, !!(module_ens & ISP32_MODULE_DPCC), id);
40784170
40794171 if (module_en_update & ISP32_MODULE_BLS)
4080
- ops->bls_enable(params_vdev, !!(module_ens & ISP32_MODULE_BLS));
4172
+ ops->bls_enable(params_vdev, !!(module_ens & ISP32_MODULE_BLS), id);
40814173
40824174 if (module_en_update & ISP32_MODULE_SDG)
4083
- ops->sdg_enable(params_vdev, !!(module_ens & ISP32_MODULE_SDG));
4175
+ ops->sdg_enable(params_vdev, !!(module_ens & ISP32_MODULE_SDG), id);
40844176
40854177 if (module_en_update & ISP32_MODULE_LSC) {
4086
- ops->lsc_enable(params_vdev, !!(module_ens & ISP32_MODULE_LSC));
4178
+ ops->lsc_enable(params_vdev, !!(module_ens & ISP32_MODULE_LSC), id);
40874179 priv_val->lsc_en = !!(module_ens & ISP32_MODULE_LSC);
40884180 }
40894181
40904182 if (module_en_update & ISP32_MODULE_AWB_GAIN)
4091
- ops->awbgain_enable(params_vdev, !!(module_ens & ISP32_MODULE_AWB_GAIN));
4183
+ ops->awbgain_enable(params_vdev, !!(module_ens & ISP32_MODULE_AWB_GAIN), id);
40924184
40934185 if (module_en_update & ISP32_MODULE_DEBAYER)
4094
- ops->debayer_enable(params_vdev, !!(module_ens & ISP32_MODULE_DEBAYER));
4186
+ ops->debayer_enable(params_vdev, !!(module_ens & ISP32_MODULE_DEBAYER), id);
40954187
40964188 if (module_en_update & ISP32_MODULE_CCM)
4097
- ops->ccm_enable(params_vdev, !!(module_ens & ISP32_MODULE_CCM));
4189
+ ops->ccm_enable(params_vdev, !!(module_ens & ISP32_MODULE_CCM), id);
40984190
40994191 if (module_en_update & ISP32_MODULE_GOC)
4100
- ops->goc_enable(params_vdev, !!(module_ens & ISP32_MODULE_GOC));
4192
+ ops->goc_enable(params_vdev, !!(module_ens & ISP32_MODULE_GOC), id);
41014193
41024194 if (module_en_update & ISP32_MODULE_CPROC)
4103
- ops->cproc_enable(params_vdev, !!(module_ens & ISP32_MODULE_CPROC));
4195
+ ops->cproc_enable(params_vdev, !!(module_ens & ISP32_MODULE_CPROC), id);
41044196
41054197 if (module_en_update & ISP32_MODULE_IE)
4106
- ops->ie_enable(params_vdev, !!(module_ens & ISP32_MODULE_IE));
4198
+ ops->ie_enable(params_vdev, !!(module_ens & ISP32_MODULE_IE), id);
41074199
41084200 if (module_en_update & ISP32_MODULE_HDRMGE) {
4109
- ops->hdrmge_enable(params_vdev, !!(module_ens & ISP32_MODULE_HDRMGE));
4201
+ ops->hdrmge_enable(params_vdev, !!(module_ens & ISP32_MODULE_HDRMGE), id);
41104202 priv_val->mge_en = !!(module_ens & ISP32_MODULE_HDRMGE);
41114203 }
41124204
41134205 if (module_en_update & ISP32_MODULE_DRC) {
4114
- ops->hdrdrc_enable(params_vdev, !!(module_ens & ISP32_MODULE_DRC));
4206
+ ops->hdrdrc_enable(params_vdev, !!(module_ens & ISP32_MODULE_DRC), id);
41154207 priv_val->drc_en = !!(module_ens & ISP32_MODULE_DRC);
41164208 }
41174209
41184210 if (module_en_update & ISP32_MODULE_GIC)
4119
- ops->gic_enable(params_vdev, !!(module_ens & ISP32_MODULE_GIC));
4211
+ ops->gic_enable(params_vdev, !!(module_ens & ISP32_MODULE_GIC), id);
41204212
41214213 if (module_en_update & ISP32_MODULE_DHAZ) {
4122
- ops->dhaz_enable(params_vdev, !!(module_ens & ISP32_MODULE_DHAZ));
4214
+ ops->dhaz_enable(params_vdev, !!(module_ens & ISP32_MODULE_DHAZ), id);
41234215 priv_val->dhaz_en = !!(module_ens & ISP32_MODULE_DHAZ);
41244216 }
41254217
41264218 if (module_en_update & ISP32_MODULE_3DLUT) {
4127
- ops->isp3dlut_enable(params_vdev, !!(module_ens & ISP32_MODULE_3DLUT));
4219
+ ops->isp3dlut_enable(params_vdev, !!(module_ens & ISP32_MODULE_3DLUT), id);
41284220 priv_val->lut3d_en = !!(module_ens & ISP32_MODULE_3DLUT);
41294221 }
41304222
41314223 if (module_en_update & ISP32_MODULE_LDCH)
4132
- ops->ldch_enable(params_vdev, !!(module_ens & ISP32_MODULE_LDCH));
4224
+ ops->ldch_enable(params_vdev, !!(module_ens & ISP32_MODULE_LDCH), id);
41334225
41344226 if (module_en_update & ISP32_MODULE_YNR)
4135
- ops->ynr_enable(params_vdev, !!(module_ens & ISP32_MODULE_YNR));
4227
+ ops->ynr_enable(params_vdev, !!(module_ens & ISP32_MODULE_YNR), id);
41364228
41374229 if (module_en_update & ISP32_MODULE_CNR)
4138
- ops->cnr_enable(params_vdev, !!(module_ens & ISP32_MODULE_CNR));
4230
+ ops->cnr_enable(params_vdev, !!(module_ens & ISP32_MODULE_CNR), id);
41394231
41404232 if (module_en_update & ISP32_MODULE_SHARP)
4141
- ops->sharp_enable(params_vdev, !!(module_ens & ISP32_MODULE_SHARP));
4233
+ ops->sharp_enable(params_vdev, !!(module_ens & ISP32_MODULE_SHARP), id);
41424234
41434235 if (module_en_update & ISP32_MODULE_BAYNR)
4144
- ops->baynr_enable(params_vdev, !!(module_ens & ISP32_MODULE_BAYNR));
4236
+ ops->baynr_enable(params_vdev, !!(module_ens & ISP32_MODULE_BAYNR), id);
41454237
41464238 if (module_en_update & ISP32_MODULE_BAY3D) {
4147
- ops->bay3d_enable(params_vdev, !!(module_ens & ISP32_MODULE_BAY3D));
4239
+ ops->bay3d_enable(params_vdev, !!(module_ens & ISP32_MODULE_BAY3D), id);
41484240 priv_val->bay3d_en = !!(module_ens & ISP32_MODULE_BAY3D);
41494241 }
41504242
41514243 if (module_en_update & ISP32_MODULE_CAC)
4152
- ops->cac_enable(params_vdev, !!(module_ens & ISP32_MODULE_CAC));
4244
+ ops->cac_enable(params_vdev, !!(module_ens & ISP32_MODULE_CAC), id);
41534245
41544246 if (module_en_update & ISP32_MODULE_GAIN ||
41554247 ((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));
4248
+ !(isp3_param_read(params_vdev, ISP3X_GAIN_CTRL, id) & ISP3X_GAIN_2DDR_EN)))
4249
+ ops->gain_enable(params_vdev, !!(module_ens & ISP32_MODULE_GAIN), id);
41584250
41594251 if (module_en_update & ISP32_MODULE_VSM)
4160
- ops->vsm_enable(params_vdev, !!(module_ens & ISP32_MODULE_VSM));
4252
+ ops->vsm_enable(params_vdev, !!(module_ens & ISP32_MODULE_VSM), id);
41614253
41624254 /* 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);
4255
+ gain_ctrl = isp3_param_read_cache(params_vdev, ISP3X_GAIN_CTRL, id);
4256
+ cnr_ctrl = isp3_param_read_cache(params_vdev, ISP3X_CNR_CTRL, id);
41654257 if (!(gain_ctrl & ISP32_MODULE_EN) && cnr_ctrl & ISP32_MODULE_EN) {
41664258 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);
4259
+ isp3_param_write(params_vdev, cnr_ctrl, ISP3X_CNR_CTRL, id);
4260
+ val = isp3_param_read(params_vdev, ISP3X_CNR_EXGAIN, id) & 0x3ff;
4261
+ isp3_param_write(params_vdev, val | 0x8000, ISP3X_CNR_EXGAIN, id);
41704262 }
41714263 }
41724264
41734265 static __maybe_unused
41744266 void __isp_isr_meas_config(struct rkisp_isp_params_vdev *params_vdev,
41754267 struct isp32_isp_params_cfg *new_params,
4176
- enum rkisp_params_type type)
4268
+ enum rkisp_params_type type, u32 id)
41774269 {
41784270 struct rkisp_isp_params_ops_v32 *ops =
41794271 (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
....@@ -4190,48 +4282,48 @@
41904282 return;
41914283
41924284 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);
4285
+ "%s id:%d seq:%d module_cfg_update:0x%llx\n",
4286
+ __func__, id, new_params->frame_id, module_cfg_update);
41954287
41964288 if ((module_cfg_update & ISP32_MODULE_RAWAF))
4197
- ops->rawaf_config(params_vdev, &new_params->meas.rawaf);
4289
+ ops->rawaf_config(params_vdev, &new_params->meas.rawaf, id);
41984290
41994291 if ((module_cfg_update & ISP32_MODULE_RAWAE0) &&
42004292 !(params_vdev->afaemode_en && params_vdev->dev->isp_ver == ISP_V32_L))
4201
- ops->rawae0_config(params_vdev, &new_params->meas.rawae0);
4293
+ ops->rawae0_config(params_vdev, &new_params->meas.rawae0, id);
42024294
42034295 if ((module_cfg_update & ISP32_MODULE_RAWAE1))
4204
- ops->rawae1_config(params_vdev, &new_params->meas.rawae1);
4296
+ ops->rawae1_config(params_vdev, &new_params->meas.rawae1, id);
42054297
42064298 if ((module_cfg_update & ISP32_MODULE_RAWAE2))
4207
- ops->rawae2_config(params_vdev, &new_params->meas.rawae2);
4299
+ ops->rawae2_config(params_vdev, &new_params->meas.rawae2, id);
42084300
42094301 if ((module_cfg_update & ISP32_MODULE_RAWAE3) &&
42104302 !(params_vdev->afaemode_en && params_vdev->dev->isp_ver == ISP_V32))
4211
- ops->rawae3_config(params_vdev, &new_params->meas.rawae3);
4303
+ ops->rawae3_config(params_vdev, &new_params->meas.rawae3, id);
42124304
42134305 if ((module_cfg_update & ISP32_MODULE_RAWHIST0))
4214
- ops->rawhst0_config(params_vdev, &new_params->meas.rawhist0);
4306
+ ops->rawhst0_config(params_vdev, &new_params->meas.rawhist0, id);
42154307
42164308 if ((module_cfg_update & ISP32_MODULE_RAWHIST1))
4217
- ops->rawhst1_config(params_vdev, &new_params->meas.rawhist1);
4309
+ ops->rawhst1_config(params_vdev, &new_params->meas.rawhist1, id);
42184310
42194311 if ((module_cfg_update & ISP32_MODULE_RAWHIST2))
4220
- ops->rawhst2_config(params_vdev, &new_params->meas.rawhist2);
4312
+ ops->rawhst2_config(params_vdev, &new_params->meas.rawhist2, id);
42214313
42224314 if ((module_cfg_update & ISP32_MODULE_RAWHIST3))
4223
- ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3);
4315
+ ops->rawhst3_config(params_vdev, &new_params->meas.rawhist3, id);
42244316
42254317 if ((module_cfg_update & ISP32_MODULE_RAWAWB) ||
42264318 ((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);
4319
+ !(isp3_param_read(params_vdev, ISP3X_RAWAWB_CTRL, id) & ISP32_RAWAWB_2DDR_PATH_EN)))
4320
+ ops->rawawb_config(params_vdev, &new_params->meas.rawawb, id);
42294321 }
42304322
42314323 static __maybe_unused
42324324 void __isp_isr_meas_en(struct rkisp_isp_params_vdev *params_vdev,
42334325 struct isp32_isp_params_cfg *new_params,
4234
- enum rkisp_params_type type)
4326
+ enum rkisp_params_type type, u32 id)
42354327 {
42364328 struct rkisp_isp_params_ops_v32 *ops =
42374329 (struct rkisp_isp_params_ops_v32 *)params_vdev->priv_ops;
....@@ -4245,64 +4337,53 @@
42454337 return;
42464338
42474339 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);
4340
+ "%s id:%d seq:%d module_en_update:0x%llx module_ens:0x%llx\n",
4341
+ __func__, id, new_params->frame_id, module_en_update, module_ens);
42504342
42514343 if (module_en_update & ISP32_MODULE_RAWAF)
4252
- ops->rawaf_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAF));
4344
+ ops->rawaf_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAF), id);
42534345
42544346 if ((module_en_update & ISP32_MODULE_RAWAE0) &&
42554347 !(params_vdev->afaemode_en && params_vdev->dev->isp_ver == ISP_V32_L))
4256
- ops->rawae0_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE0));
4348
+ ops->rawae0_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE0), id);
42574349
42584350 if (module_en_update & ISP32_MODULE_RAWAE1)
4259
- ops->rawae1_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE1));
4351
+ ops->rawae1_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE1), id);
42604352
42614353 if (module_en_update & ISP32_MODULE_RAWAE2)
4262
- ops->rawae2_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE2));
4354
+ ops->rawae2_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE2), id);
42634355
42644356 if ((module_en_update & ISP32_MODULE_RAWAE3) &&
42654357 !(params_vdev->afaemode_en && params_vdev->dev->isp_ver == ISP_V32))
4266
- ops->rawae3_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE3));
4358
+ ops->rawae3_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAE3), id);
42674359
42684360 if (module_en_update & ISP32_MODULE_RAWHIST0)
4269
- ops->rawhst0_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST0));
4361
+ ops->rawhst0_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST0), id);
42704362
42714363 if (module_en_update & ISP32_MODULE_RAWHIST1)
4272
- ops->rawhst1_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST1));
4364
+ ops->rawhst1_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST1), id);
42734365
42744366 if (module_en_update & ISP32_MODULE_RAWHIST2)
4275
- ops->rawhst2_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST2));
4367
+ ops->rawhst2_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST2), id);
42764368
42774369 if (module_en_update & ISP32_MODULE_RAWHIST3)
4278
- ops->rawhst3_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST3));
4370
+ ops->rawhst3_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWHIST3), id);
42794371
42804372 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);
4373
+ ops->rawawb_enable(params_vdev, !!(module_ens & ISP32_MODULE_RAWAWB), id);
42944374 }
42954375
42964376 static
42974377 void rkisp_params_cfgsram_v32(struct rkisp_isp_params_vdev *params_vdev)
42984378 {
4299
- struct isp32_isp_params_cfg *params = params_vdev->isp32_params;
4379
+ u32 id = params_vdev->dev->unite_index;
4380
+ struct isp32_isp_params_cfg *params = params_vdev->isp32_params + id;
43004381
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);
4382
+ isp_lsc_matrix_cfg_sram(params_vdev, &params->others.lsc_cfg, true, id);
4383
+ isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist1, 1, true, id);
4384
+ isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist2, 2, true, id);
4385
+ isp_rawhstbig_cfg_sram(params_vdev, &params->meas.rawhist3, 0, true, id);
4386
+ isp_rawawb_cfg_sram(params_vdev, &params->meas.rawawb, true, id);
43064387 }
43074388
43084389 static int
....@@ -4313,22 +4394,24 @@
43134394 struct rkisp_isp_subdev *isp_sdev = &dev->isp_sdev;
43144395 struct rkisp_isp_params_val_v32 *priv_val;
43154396 u64 module_en_update, module_ens;
4316
- int ret, i;
4397
+ int ret, i, id;
43174398
43184399 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
43194400 module_en_update = new_params->module_en_update;
43204401 module_ens = new_params->module_ens;
43214402
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;
4403
+ for (id = 0; id <= !!dev->hw_dev->unite; id++) {
4404
+ priv_val->buf_3dlut_idx[id] = 0;
4405
+ for (i = 0; i < ISP32_3DLUT_BUF_NUM; i++) {
4406
+ if (priv_val->buf_3dlut[id][i].mem_priv)
4407
+ continue;
4408
+ priv_val->buf_3dlut[id][i].is_need_vaddr = true;
4409
+ priv_val->buf_3dlut[id][i].size = ISP32_3DLUT_BUF_SIZE;
4410
+ ret = rkisp_alloc_buffer(dev, &priv_val->buf_3dlut[id][i]);
4411
+ if (ret) {
4412
+ dev_err(dev->dev, "alloc 3dlut buf fail:%d\n", ret);
4413
+ goto err_3dlut;
4414
+ }
43324415 }
43334416 }
43344417
....@@ -4343,6 +4426,9 @@
43434426 u32 h = ALIGN(isp_sdev->in_crop.height, 16);
43444427 u32 val, wrap_line, wsize, div;
43454428 bool is_alloc;
4429
+
4430
+ if (dev->hw_dev->unite)
4431
+ w = ALIGN(isp_sdev->in_crop.width / 2 + RKMOUDLE_UNITE_EXTEND_PIXEL, 16);
43464432
43474433 priv_val->is_lo8x8 = (!new_params->others.bay3d_cfg.lo4x8_en &&
43484434 !new_params->others.bay3d_cfg.lo4x4_en);
....@@ -4361,6 +4447,9 @@
43614447 wsize *= 2;
43624448 div = is_bwopt_dis ? 1 : 2;
43634449 val = ALIGN(wsize * h / div, 16);
4450
+ priv_val->bay3d_iir_size = val;
4451
+ if (dev->hw_dev->unite)
4452
+ val *= 2;
43644453 is_alloc = true;
43654454 if (priv_val->buf_3dnr_iir.mem_priv) {
43664455 if (val > priv_val->buf_3dnr_iir.size)
....@@ -4381,6 +4470,9 @@
43814470 val = w * h / div;
43824471 /* pixel to Byte and align */
43834472 val = ALIGN(val * 2, 16);
4473
+ priv_val->bay3d_ds_size = val;
4474
+ if (dev->hw_dev->unite)
4475
+ val *= 2;
43844476 is_alloc = true;
43854477 if (priv_val->buf_3dnr_ds.mem_priv) {
43864478 if (val > priv_val->buf_3dnr_ds.size)
....@@ -4413,8 +4505,7 @@
44134505 val = ALIGN(wsize * wrap_line / div, 16);
44144506 is_alloc = true;
44154507 if (priv_val->buf_3dnr_cur.mem_priv) {
4416
- if (val > priv_val->buf_3dnr_cur.size ||
4417
- val < dev->hw_dev->sram.size)
4508
+ if (val > priv_val->buf_3dnr_cur.size || val < dev->hw_dev->sram.size)
44184509 rkisp_free_buffer(dev, &priv_val->buf_3dnr_cur);
44194510 else
44204511 is_alloc = false;
....@@ -4440,6 +4531,8 @@
44404531 if (dev->isp_ver == ISP_V32_L) {
44414532 if (dev->hw_dev->is_frm_buf && !priv_val->buf_frm.mem_priv) {
44424533 priv_val->buf_frm.size = ISP32_LITE_FRM_BUF_SIZE;
4534
+ if (dev->hw_dev->unite)
4535
+ priv_val->buf_frm.size *= 2;
44434536 ret = rkisp_alloc_buffer(dev, &priv_val->buf_frm);
44444537 if (ret) {
44454538 dev_err(dev->dev, "alloc frm buf fail:%d\n", ret);
....@@ -4469,10 +4562,14 @@
44694562 rkisp_free_buffer(dev, &priv_val->buf_3dnr_iir);
44704563 rkisp_free_buffer(dev, &priv_val->buf_3dnr_ds);
44714564 err_3dnr:
4565
+ id = dev->hw_dev->unite ? 1 : 0;
44724566 i = ISP32_3DLUT_BUF_NUM;
44734567 err_3dlut:
4474
- for (i -= 1; i >= 0; i--)
4475
- rkisp_free_buffer(dev, &priv_val->buf_3dlut[i]);
4568
+ for (; id >= 0; id--) {
4569
+ for (i -= 1; i >= 0; i--)
4570
+ rkisp_free_buffer(dev, &priv_val->buf_3dlut[id][i]);
4571
+ i = ISP32_3DLUT_BUF_NUM;
4572
+ }
44764573 return ret;
44774574 }
44784575
....@@ -4664,6 +4761,8 @@
46644761 if (ispdev->isp_ver == ISP_V32_L)
46654762 return rkisp_params_check_bigmode_v32_lite(params_vdev);
46664763
4764
+ if (hw->unite == ISP_UNITE_ONE)
4765
+ hw->is_multi_overflow = true;
46674766 multi_overflow:
46684767 if (hw->is_multi_overflow) {
46694768 ispdev->multi_index = 0;
....@@ -4831,6 +4930,7 @@
48314930 rkisp_params_first_cfg_v32(struct rkisp_isp_params_vdev *params_vdev)
48324931 {
48334932 struct rkisp_device *dev = params_vdev->dev;
4933
+ struct rkisp_hw_dev *hw = dev->hw_dev;
48344934 struct rkisp_isp_params_val_v32 *priv_val =
48354935 (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
48364936
....@@ -4847,25 +4947,39 @@
48474947 priv_val->lsc_en = 0;
48484948 priv_val->mge_en = 0;
48494949 priv_val->lut3d_en = 0;
4950
+ if (hw->unite) {
4951
+ if (dev->is_bigmode)
4952
+ rkisp_next_set_bits(dev, ISP3X_ISP_CTRL1, 0,
4953
+ ISP3X_BIGMODE_MANUAL | ISP3X_BIGMODE_FORCE_EN, false);
4954
+ __isp_isr_meas_config(params_vdev, params_vdev->isp32_params + 1, RKISP_PARAMS_ALL, 1);
4955
+ __isp_isr_other_config(params_vdev, params_vdev->isp32_params + 1, RKISP_PARAMS_ALL, 1);
4956
+ __isp_isr_other_en(params_vdev, params_vdev->isp32_params + 1, RKISP_PARAMS_ALL, 1);
4957
+ __isp_isr_meas_en(params_vdev, params_vdev->isp32_params + 1, RKISP_PARAMS_ALL, 1);
4958
+ }
48504959 if (dev->is_bigmode)
4851
- rkisp_set_bits(params_vdev->dev, ISP3X_ISP_CTRL1, 0,
4960
+ rkisp_set_bits(dev, ISP3X_ISP_CTRL1, 0,
48524961 ISP3X_BIGMODE_MANUAL | ISP3X_BIGMODE_FORCE_EN, false);
48534962
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);
4963
+ __isp_isr_meas_config(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
4964
+ __isp_isr_other_config(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
4965
+ __isp_isr_other_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
4966
+ __isp_isr_meas_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
48584967
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;
48634968 spin_unlock(&params_vdev->config_lock);
48644969
48654970 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);
4971
+ u32 size = priv_val->buf_frm.size;
4972
+ u32 addr = priv_val->buf_frm.dma_addr;
4973
+
4974
+ if (hw->unite) {
4975
+ size /= 2;
4976
+ isp3_param_write(params_vdev, size, ISP32L_FRM_BUF_WR_SIZE, 1);
4977
+ isp3_param_write(params_vdev, addr + size, ISP32L_FRM_BUF_WR_BASE, 1);
4978
+ isp3_param_write(params_vdev, addr + size, ISP32L_FRM_BUF_RD_BASE, 1);
4979
+ }
4980
+ isp3_param_write(params_vdev, size, ISP32L_FRM_BUF_WR_SIZE, 0);
4981
+ isp3_param_write(params_vdev, addr, ISP32L_FRM_BUF_WR_BASE, 0);
4982
+ isp3_param_write(params_vdev, addr, ISP32L_FRM_BUF_RD_BASE, 0);
48694983 }
48704984 if (dev->hw_dev->is_single && (dev->isp_state & ISP_START))
48714985 rkisp_set_bits(dev, ISP3X_ISP_CTRL0, 0, CIF_ISP_CTRL_ISP_CFG_UPD, true);
....@@ -4879,11 +4993,15 @@
48794993
48804994 static void rkisp_clear_first_param_v32(struct rkisp_isp_params_vdev *params_vdev)
48814995 {
4882
- memset(params_vdev->isp32_params, 0, sizeof(struct isp32_isp_params_cfg));
4996
+ u32 size = sizeof(struct isp32_isp_params_cfg);
4997
+
4998
+ if (params_vdev->dev->hw_dev->unite)
4999
+ size *= 2;
5000
+ memset(params_vdev->isp32_params, 0, size);
48835001 }
48845002
48855003 static void rkisp_deinit_mesh_buf(struct rkisp_isp_params_vdev *params_vdev,
4886
- u64 module_id)
5004
+ u64 module_id, u32 id)
48875005 {
48885006 struct rkisp_isp_params_val_v32 *priv_val;
48895007 struct rkisp_dummy_buffer *buf;
....@@ -4895,11 +5013,11 @@
48955013
48965014 switch (module_id) {
48975015 case ISP32_MODULE_CAC:
4898
- buf = priv_val->buf_cac;
5016
+ buf = priv_val->buf_cac[id];
48995017 break;
49005018 case ISP32_MODULE_LDCH:
49015019 default:
4902
- buf = priv_val->buf_ldch;
5020
+ buf = priv_val->buf_ldch[id];
49035021 break;
49045022 }
49055023
....@@ -4919,6 +5037,7 @@
49195037 u32 mesh_h = meshsize->meas_height;
49205038 u32 mesh_size, buf_size;
49215039 int i, ret, buf_cnt = meshsize->buf_cnt;
5040
+ int id = meshsize->unite_isp_id;
49225041 bool is_alloc;
49235042
49245043 priv_val = params_vdev->priv_val;
....@@ -4929,16 +5048,16 @@
49295048
49305049 switch (meshsize->module_id) {
49315050 case ISP32_MODULE_CAC:
4932
- priv_val->buf_cac_idx = 0;
4933
- buf = priv_val->buf_cac;
5051
+ priv_val->buf_cac_idx[id] = 0;
5052
+ buf = priv_val->buf_cac[id];
49345053 mesh_w = (mesh_w + 62) / 64 * 9;
49355054 mesh_h = (mesh_h + 62) / 64 * 2;
49365055 mesh_size = mesh_w * 4 * mesh_h;
49375056 break;
49385057 case ISP32_MODULE_LDCH:
49395058 default:
4940
- priv_val->buf_ldch_idx = 0;
4941
- buf = priv_val->buf_ldch;
5059
+ priv_val->buf_ldch_idx[id] = 0;
5060
+ buf = priv_val->buf_ldch[id];
49425061 mesh_w = ((mesh_w + 15) / 16 + 2) / 2;
49435062 mesh_h = (mesh_h + 7) / 8 + 1;
49445063 mesh_size = mesh_w * 4 * mesh_h;
....@@ -4979,7 +5098,7 @@
49795098
49805099 return 0;
49815100 err:
4982
- rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id);
5101
+ rkisp_deinit_mesh_buf(params_vdev, meshsize->module_id, id);
49835102 return -ENOMEM;
49845103 }
49855104
....@@ -4987,7 +5106,9 @@
49875106 rkisp_get_param_size_v32(struct rkisp_isp_params_vdev *params_vdev,
49885107 unsigned int sizes[])
49895108 {
4990
- sizes[0] = sizeof(struct isp32_isp_params_cfg);
5109
+ u32 mult = params_vdev->dev->hw_dev->unite ? 2 : 1;
5110
+
5111
+ sizes[0] = sizeof(struct isp32_isp_params_cfg) * mult;
49915112 }
49925113
49935114 static void
....@@ -4997,18 +5118,18 @@
49975118 struct rkisp_isp_params_val_v32 *priv_val;
49985119 struct rkisp_meshbuf_info *meshbuf = meshbuf_inf;
49995120 struct rkisp_dummy_buffer *buf;
5000
- int i;
5121
+ int i, id = meshbuf->unite_isp_id;
50015122
50025123 priv_val = params_vdev->priv_val;
50035124 switch (meshbuf->module_id) {
50045125 case ISP32_MODULE_CAC:
5005
- priv_val->buf_cac_idx = 0;
5006
- buf = priv_val->buf_cac;
5126
+ priv_val->buf_cac_idx[id] = 0;
5127
+ buf = priv_val->buf_cac[id];
50075128 break;
50085129 case ISP32_MODULE_LDCH:
50095130 default:
5010
- priv_val->buf_ldch_idx = 0;
5011
- buf = priv_val->buf_ldch;
5131
+ priv_val->buf_ldch_idx[id] = 0;
5132
+ buf = priv_val->buf_ldch[id];
50125133 break;
50135134 }
50145135
....@@ -5030,6 +5151,8 @@
50305151 {
50315152 struct rkisp_meshbuf_size *meshsize = size;
50325153
5154
+ if (!params_vdev->dev->hw_dev->unite)
5155
+ meshsize->unite_isp_id = 0;
50335156 return rkisp_init_mesh_buf(params_vdev, meshsize);
50345157 }
50355158
....@@ -5037,7 +5160,10 @@
50375160 rkisp_params_free_meshbuf_v32(struct rkisp_isp_params_vdev *params_vdev,
50385161 u64 module_id)
50395162 {
5040
- rkisp_deinit_mesh_buf(params_vdev, module_id);
5163
+ int id;
5164
+
5165
+ for (id = 0; id <= !!params_vdev->dev->hw_dev->unite; id++)
5166
+ rkisp_deinit_mesh_buf(params_vdev, module_id, id);
50415167 }
50425168
50435169 static int
....@@ -5134,9 +5260,9 @@
51345260 cfg->buf_fd[i] = buf->dma_fd;
51355261 }
51365262 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);
5263
+ isp3_param_write(params_vdev, buf->dma_addr, ISP3X_MI_GAIN_WR_BASE, 0);
5264
+ isp3_param_write(params_vdev, buf->size, ISP3X_MI_GAIN_WR_SIZE, 0);
5265
+ isp3_param_write(params_vdev, wsize, ISP3X_MI_GAIN_WR_LENGTH, 0);
51405266 if (dev->hw_dev->is_single)
51415267 rkisp_write(dev, ISP3X_MI_WR_CTRL2, ISP3X_GAINSELF_UPD, true);
51425268 rkisp_set_reg_cache_bits(dev, reg, mask, ctrl);
....@@ -5164,7 +5290,7 @@
51645290 {
51655291 struct rkisp_device *ispdev = params_vdev->dev;
51665292 struct rkisp_isp_params_val_v32 *priv_val;
5167
- int i;
5293
+ int i, id;
51685294
51695295 priv_val = (struct rkisp_isp_params_val_v32 *)params_vdev->priv_val;
51705296 rkisp_free_buffer(ispdev, &priv_val->buf_frm);
....@@ -5173,10 +5299,12 @@
51735299 rkisp_free_buffer(ispdev, &priv_val->buf_3dnr_ds);
51745300 for (i = 0; i < ISP32_LSC_LUT_BUF_NUM; i++)
51755301 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]);
51785302 for (i = 0; i < RKISP_STATS_DDR_BUF_NUM; i++)
51795303 rkisp_free_buffer(ispdev, &ispdev->stats_vdev.stats_buf[i]);
5304
+ for (id = 0; id <= !!ispdev->hw_dev->unite; id++) {
5305
+ for (i = 0; i < ISP32_3DLUT_BUF_NUM; i++)
5306
+ rkisp_free_buffer(ispdev, &priv_val->buf_3dlut[id][i]);
5307
+ }
51805308 priv_val->buf_info_owner = 0;
51815309 priv_val->buf_info_cnt = 0;
51825310 priv_val->buf_info_idx = -1;
....@@ -5187,8 +5315,12 @@
51875315 static void
51885316 rkisp_params_fop_release_v32(struct rkisp_isp_params_vdev *params_vdev)
51895317 {
5190
- rkisp_deinit_mesh_buf(params_vdev, ISP32_MODULE_LDCH);
5191
- rkisp_deinit_mesh_buf(params_vdev, ISP32_MODULE_CAC);
5318
+ int id;
5319
+
5320
+ for (id = 0; id <= !!params_vdev->dev->hw_dev->unite; id++) {
5321
+ rkisp_deinit_mesh_buf(params_vdev, ISP32_MODULE_LDCH, id);
5322
+ rkisp_deinit_mesh_buf(params_vdev, ISP32_MODULE_CAC, id);
5323
+ }
51925324 }
51935325
51945326 /* Not called when the camera active, thus not isr protection. */
....@@ -5198,13 +5330,17 @@
51985330 params_vdev->isp32_params->module_ens = 0;
51995331 params_vdev->isp32_params->module_en_update = 0x7ffffffffff;
52005332
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);
5333
+ __isp_isr_other_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
5334
+ __isp_isr_meas_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 0);
5335
+ if (params_vdev->dev->hw_dev->unite) {
5336
+ __isp_isr_other_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 1);
5337
+ __isp_isr_meas_en(params_vdev, params_vdev->isp32_params, RKISP_PARAMS_ALL, 1);
5338
+ }
52035339 }
52045340
52055341 static void
52065342 module_data_abandon(struct rkisp_isp_params_vdev *params_vdev,
5207
- struct isp32_isp_params_cfg *params)
5343
+ struct isp32_isp_params_cfg *params, u32 id)
52085344 {
52095345 struct rkisp_isp_params_val_v32 *priv_val;
52105346 struct isp2x_mesh_head *mesh_head;
....@@ -5215,9 +5351,9 @@
52155351 const struct isp32_ldch_cfg *arg = &params->others.ldch_cfg;
52165352
52175353 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;
5354
+ if (priv_val->buf_ldch[id][i].vaddr &&
5355
+ arg->buf_fd == priv_val->buf_ldch[id][i].dma_fd) {
5356
+ mesh_head = (struct isp2x_mesh_head *)priv_val->buf_ldch[id][i].vaddr;
52215357 mesh_head->stat = MESH_BUF_CHIPINUSE;
52225358 break;
52235359 }
....@@ -5228,9 +5364,9 @@
52285364 const struct isp32_cac_cfg *arg = &params->others.cac_cfg;
52295365
52305366 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;
5367
+ if (priv_val->buf_cac[id][i].vaddr &&
5368
+ arg->buf_fd == priv_val->buf_cac[id][i].dma_fd) {
5369
+ mesh_head = (struct isp2x_mesh_head *)priv_val->buf_cac[id][i].vaddr;
52345370 mesh_head->stat = MESH_BUF_CHIPINUSE;
52355371 break;
52365372 }
....@@ -5242,10 +5378,9 @@
52425378 rkisp_params_cfg_v32(struct rkisp_isp_params_vdev *params_vdev,
52435379 u32 frame_id, enum rkisp_params_type type)
52445380 {
5381
+ struct rkisp_hw_dev *hw = params_vdev->dev->hw_dev;
52455382 struct isp32_isp_params_cfg *new_params = NULL;
52465383 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;
52495384
52505385 spin_lock(&params_vdev->config_lock);
52515386 if (!params_vdev->streamon)
....@@ -5264,15 +5399,27 @@
52645399 else if (new_params->module_en_update ||
52655400 (new_params->module_cfg_update & ISP32_MODULE_FORCE)) {
52665401 /* 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);
5402
+ __isp_isr_meas_config(params_vdev, new_params, type, 0);
5403
+ __isp_isr_other_config(params_vdev, new_params, type, 0);
5404
+ __isp_isr_other_en(params_vdev, new_params, type, 0);
5405
+ __isp_isr_meas_en(params_vdev, new_params, type, 0);
52715406 new_params->module_cfg_update = 0;
5407
+ if (hw->unite) {
5408
+ struct isp32_isp_params_cfg *params = new_params + 1;
5409
+
5410
+ __isp_isr_meas_config(params_vdev, params, type, 1);
5411
+ __isp_isr_other_config(params_vdev, params, type, 1);
5412
+ __isp_isr_other_en(params_vdev, params, type, 1);
5413
+ __isp_isr_meas_en(params_vdev, params, type, 1);
5414
+ params->module_cfg_update = 0;
5415
+ }
52725416 }
52735417 if (new_params->module_cfg_update &
52745418 (ISP32_MODULE_LDCH | ISP32_MODULE_CAC)) {
5275
- module_data_abandon(params_vdev, new_params);
5419
+ module_data_abandon(params_vdev, new_params, 0);
5420
+ if (hw->unite)
5421
+ module_data_abandon(params_vdev, new_params, 1);
5422
+
52765423 }
52775424 vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
52785425 cur_buf = NULL;
....@@ -5289,22 +5436,21 @@
52895436 goto unlock;
52905437
52915438 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);
5439
+ if (hw->unite) {
5440
+ __isp_isr_meas_config(params_vdev, new_params + 1, type, 1);
5441
+ __isp_isr_other_config(params_vdev, new_params + 1, type, 1);
5442
+ __isp_isr_other_en(params_vdev, new_params + 1, type, 1);
5443
+ __isp_isr_meas_en(params_vdev, new_params + 1, type, 1);
5444
+ }
5445
+ __isp_isr_meas_config(params_vdev, new_params, type, 0);
5446
+ __isp_isr_other_config(params_vdev, new_params, type, 0);
5447
+ __isp_isr_other_en(params_vdev, new_params, type, 0);
5448
+ __isp_isr_meas_en(params_vdev, new_params, type, 0);
52985449
52995450 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;
53075451 new_params->module_cfg_update = 0;
5452
+ if (hw->unite)
5453
+ (new_params++)->module_cfg_update = 0;
53085454 vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
53095455 cur_buf = NULL;
53105456 }
....@@ -5317,13 +5463,15 @@
53175463 static void
53185464 rkisp_params_clear_fstflg(struct rkisp_isp_params_vdev *params_vdev)
53195465 {
5320
- u32 value = isp3_param_read(params_vdev, ISP3X_ISP_CTRL1);
5466
+ u32 value = isp3_param_read(params_vdev, ISP3X_ISP_CTRL1, 0);
53215467
53225468 value &= (ISP3X_YNR_FST_FRAME | ISP3X_ADRC_FST_FRAME |
53235469 ISP3X_DHAZ_FST_FRAME | ISP3X_CNR_FST_FRAME |
5324
- ISP3X_RAW3D_FST_FRAME);
5470
+ ISP3X_RAW3D_FST_FRAME | ISP32_SHP_FST_FRAME);
53255471 if (value) {
5326
- isp3_param_clear_bits(params_vdev, ISP3X_ISP_CTRL1, value);
5472
+ isp3_param_clear_bits(params_vdev, ISP3X_ISP_CTRL1, value, 0);
5473
+ if (params_vdev->dev->hw_dev->unite)
5474
+ isp3_param_clear_bits(params_vdev, ISP3X_ISP_CTRL1, value, 1);
53275475 }
53285476 }
53295477
....@@ -5382,6 +5530,8 @@
53825530 return -ENOMEM;
53835531
53845532 size = sizeof(struct isp32_isp_params_cfg);
5533
+ if (params_vdev->dev->hw_dev->unite)
5534
+ size *= 2;
53855535 params_vdev->isp32_params = vmalloc(size);
53865536 if (!params_vdev->isp32_params) {
53875537 kfree(priv_val);