1
2
3
4
5
6
7#include <linux/clk.h>
8#include <linux/device.h>
9#include <linux/io.h>
10#include <linux/module.h>
11#include <linux/of.h>
12#include <linux/of_device.h>
13#include <linux/platform_device.h>
14#include <linux/pm_runtime.h>
15#include <linux/regmap.h>
16#include <sound/core.h>
17#include <sound/pcm.h>
18#include <sound/pcm_params.h>
19#include <sound/soc.h>
20
21#include "tegra210_sfc.h"
22#include "tegra_cif.h"
23
24#define UNSUPP_CONV ((void *)(-EOPNOTSUPP))
25#define BYPASS_CONV NULL
26
27static const struct reg_default tegra210_sfc_reg_defaults[] = {
28 { TEGRA210_SFC_RX_INT_MASK, 0x00000001},
29 { TEGRA210_SFC_RX_CIF_CTRL, 0x00007700},
30 { TEGRA210_SFC_TX_INT_MASK, 0x00000001},
31 { TEGRA210_SFC_TX_CIF_CTRL, 0x00007700},
32 { TEGRA210_SFC_CG, 0x1},
33 { TEGRA210_SFC_CFG_RAM_CTRL, 0x00004000},
34};
35
36static const int tegra210_sfc_rates[TEGRA210_SFC_NUM_RATES] = {
37 8000,
38 11025,
39 16000,
40 22050,
41 24000,
42 32000,
43 44100,
44 48000,
45 88200,
46 96000,
47 176400,
48 192000,
49};
50
51
52static u32 coef_8to11[TEGRA210_SFC_COEF_RAM_DEPTH] = {
53 0x000c6102,
54 0x0001d727,
55 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
56 0x00e55557, 0xffcadd5b, 0x003d80ba,
57 0x00d13397, 0xfff232f8, 0x00683337,
58 0x00000002,
59 0x0018a102,
60 0x000005d6,
61 0x00c6543e, 0xff342935, 0x0052f116,
62 0x000a1d78, 0xff3330c0, 0x005f88a3,
63 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
64 0x00000003,
65 0x00235204,
66 0x000aaaab,
67 0xffaaaaab,
68 0xfffaaaab,
69 0x00555555,
70 0xff600000,
71 0xfff55555,
72 0x00155555,
73 0x00055555,
74 0xffeaaaab,
75 0x00200000,
76 0x00005102,
77 0x0000015f,
78 0x00a7909c, 0xff241c71, 0x005f5e00,
79 0xffca77f4, 0xff20dd50, 0x006855eb,
80 0xff86c552, 0xff18137a, 0x00773648,
81 0x00000001
82};
83
84static u32 coef_8to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
85 0x00006102,
86 0x0001d727,
87 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
88 0x00e55557, 0xffcadd5b, 0x003d80ba,
89 0x00d13397, 0xfff232f8, 0x00683337,
90 0x00000002
91};
92
93static u32 coef_8to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
94 0x000c6102,
95 0x0001d727,
96 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
97 0x00e55557, 0xffcadd5b, 0x003d80ba,
98 0x00d13397, 0xfff232f8, 0x00683337,
99 0x00000002,
100 0x0018a102,
101 0x000005d6,
102 0x00c6543e, 0xff342935, 0x0052f116,
103 0x000a1d78, 0xff3330c0, 0x005f88a3,
104 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
105 0x00000003,
106 0x00230204,
107 0x000aaaab,
108 0xffaaaaab,
109 0xfffaaaab,
110 0x00555555,
111 0xff600000,
112 0xfff55555,
113 0x00155555,
114 0x00055555,
115 0xffeaaaab,
116 0x00200000,
117 0x00005102,
118 0x000005f3,
119 0x00d816d6, 0xff385383, 0x004fe566,
120 0x003c548d, 0xff38c23d, 0x005d0b1c,
121 0xfff02f7d, 0xff31e983, 0x0072d65d,
122 0x00000001
123};
124
125static u32 coef_8to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
126 0x0000a105,
127 0x000005e1,
128 0x00dca92f, 0xff45647a, 0x0046b59c,
129 0x00429d1e, 0xff4fec62, 0x00516d30,
130 0xffdea779, 0xff5e08ba, 0x0060185e,
131 0xffafbab2, 0xff698d5a, 0x006ce3ae,
132 0xff9a82d2, 0xff704674, 0x007633c5,
133 0xff923433, 0xff721128, 0x007cff42,
134 0x00000003
135};
136
137static u32 coef_8to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
138 0x000c6102,
139 0x0001d727,
140 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
141 0x00e55557, 0xffcadd5b, 0x003d80ba,
142 0x00d13397, 0xfff232f8, 0x00683337,
143 0x00000002,
144 0x00006102,
145 0x000013d9,
146 0x00ebd477, 0xff4ce383, 0x0042049d,
147 0x0089c278, 0xff54414d, 0x00531ded,
148 0x004a5e07, 0xff53cf41, 0x006efbdc,
149 0x00000002
150};
151
152static u32 coef_8to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
153 0x0156105,
154 0x0000d649,
155 0x00e87afb, 0xff5f69d0, 0x003df3cf,
156 0x007ce488, 0xff99a5c8, 0x0056a6a0,
157 0x00344928, 0xffcba3e5, 0x006be470,
158 0x00137aa7, 0xffe60276, 0x00773410,
159 0x0005fa2a, 0xfff1ac11, 0x007c795b,
160 0x00012d36, 0xfff5eca2, 0x007f10ef,
161 0x00000002,
162 0x0021a102,
163 0x00000e00,
164 0x00e2e000, 0xff6e1a00, 0x002aaa00,
165 0x00610a00, 0xff5dda00, 0x003ccc00,
166 0x00163a00, 0xff3c0400, 0x00633200,
167 0x00000003,
168 0x00000204,
169 0x000aaaab,
170 0xffaaaaab,
171 0xfffaaaab,
172 0x00555555,
173 0xff600000,
174 0xfff55555,
175 0x00155555,
176 0x00055555,
177 0xffeaaaab,
178 0x00200000
179};
180
181static u32 coef_8to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
182 0x00156105,
183 0x0000d649,
184 0x00e87afb, 0xff5f69d0, 0x003df3cf,
185 0x007ce488, 0xff99a5c8, 0x0056a6a0,
186 0x00344928, 0xffcba3e5, 0x006be470,
187 0x00137aa7, 0xffe60276, 0x00773410,
188 0x0005fa2a, 0xfff1ac11, 0x007c795b,
189 0x00012d36, 0xfff5eca2, 0x007f10ef,
190 0x00000002,
191 0x0000a102,
192 0x00000e00,
193 0x00e2e000, 0xff6e1a00, 0x002aaa00,
194 0x00610a00, 0xff5dda00, 0x003ccc00,
195 0x00163a00, 0xff3c0400, 0x00633200,
196 0x00000003
197};
198
199static u32 coef_8to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
200 0x000c6102,
201 0x0001d727,
202 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
203 0x00e55557, 0xffcadd5b, 0x003d80ba,
204 0x00d13397, 0xfff232f8, 0x00683337,
205 0x00000002,
206 0x00186102,
207 0x000013d9,
208 0x00ebd477, 0xff4ce383, 0x0042049d,
209 0x0089c278, 0xff54414d, 0x00531ded,
210 0x004a5e07, 0xff53cf41, 0x006efbdc,
211 0x00000002,
212 0x0024a102,
213 0x0000007d,
214 0x007d1f20, 0xff1a540e, 0x00678bf9,
215 0xff916625, 0xff16b0ff, 0x006e433a,
216 0xff5af660, 0xff0eb91f, 0x00797356,
217 0x00000003,
218 0x00000204,
219 0x000aaaab,
220 0xffaaaaab,
221 0xfffaaaab,
222 0x00555555,
223 0xff600000,
224 0xfff55555,
225 0x00155555,
226 0x00055555,
227 0xffeaaaab,
228 0x00200000
229};
230
231static u32 coef_8to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
232 0x000c6102,
233 0x0001d727,
234 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
235 0x00e55557, 0xffcadd5b, 0x003d80ba,
236 0x00d13397, 0xfff232f8, 0x00683337,
237 0x00000002,
238 0x00186102,
239 0x000013d9,
240 0x00ebd477, 0xff4ce383, 0x0042049d,
241 0x0089c278, 0xff54414d, 0x00531ded,
242 0x004a5e07, 0xff53cf41, 0x006efbdc,
243 0x00000002,
244 0x0000a102,
245 0x0000007d,
246 0x007d1f20, 0xff1a540e, 0x00678bf9,
247 0xff916625, 0xff16b0ff, 0x006e433a,
248 0xff5af660, 0xff0eb91f, 0x00797356,
249 0x00000003
250};
251
252static u32 coef_11to8[TEGRA210_SFC_COEF_RAM_DEPTH] = {
253 0x000c6102,
254 0x0000015f,
255 0x00a7909c, 0xff241c71, 0x005f5e00,
256 0xffca77f4, 0xff20dd50, 0x006855eb,
257 0xff86c552, 0xff18137a, 0x00773648,
258 0x00000002,
259 0x00186102,
260 0x000005f3,
261 0x00d816d6, 0xff385383, 0x004fe566,
262 0x003c548d, 0xff38c23d, 0x005d0b1c,
263 0xfff02f7d, 0xff31e983, 0x0072d65d,
264 0x00000002,
265 0x00239204,
266 0x000aaaab,
267 0xffaaaaab,
268 0xfffaaaab,
269 0x00555555,
270 0xff600000,
271 0xfff55555,
272 0x00155555,
273 0x00055555,
274 0xffeaaaab,
275 0x00200000,
276 0x00005102,
277 0x0001d727,
278 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
279 0x00e55557, 0xffcadd5b, 0x003d80ba,
280 0x00d13397, 0xfff232f8, 0x00683337,
281 0x00000001
282};
283
284static u32 coef_11to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
285 0x000c6102,
286 0x0001d727,
287 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
288 0x00e55557, 0xffcadd5b, 0x003d80ba,
289 0x00d13397, 0xfff232f8, 0x00683337,
290 0x00000002,
291 0x00186102,
292 0x000013d9,
293 0x00ebd477, 0xff4ce383, 0x0042049d,
294 0x0089c278, 0xff54414d, 0x00531ded,
295 0x004a5e07, 0xff53cf41, 0x006efbdc,
296 0x00000002,
297 0x00009204,
298 0x000aaaab,
299 0xffaaaaab,
300 0xfffaaaab,
301 0x00555555,
302 0xff600000,
303 0xfff55555,
304 0x00155555,
305 0x00055555,
306 0xffeaaaab,
307 0x00200000
308};
309
310static u32 coef_11to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
311 0x00006102,
312 0x0001d727,
313 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
314 0x00e55557, 0xffcadd5b, 0x003d80ba,
315 0x00d13397, 0xfff232f8, 0x00683337,
316 0x00000002
317};
318
319static u32 coef_11to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
320 0x000c6102,
321 0x0001d727,
322 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
323 0x00e55557, 0xffcadd5b, 0x003d80ba,
324 0x00d13397, 0xfff232f8, 0x00683337,
325 0x00000002,
326 0x00186102,
327 0x000013d9,
328 0x00ebd477, 0xff4ce383, 0x0042049d,
329 0x0089c278, 0xff54414d, 0x00531ded,
330 0x004a5e07, 0xff53cf41, 0x006efbdc,
331 0x00000002,
332 0x00005204,
333 0x000aaaab,
334 0xffaaaaab,
335 0xfffaaaab,
336 0x00555555,
337 0xff600000,
338 0xfff55555,
339 0x00155555,
340 0x00055555,
341 0xffeaaaab,
342 0x00200000
343};
344
345static u32 coef_11to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
346 0x000c6102,
347 0x0001d727,
348 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
349 0x00e55557, 0xffcadd5b, 0x003d80ba,
350 0x00d13397, 0xfff232f8, 0x00683337,
351 0x00000002,
352 0x00186102,
353 0x000013d9,
354 0x00ebd477, 0xff4ce383, 0x0042049d,
355 0x0089c278, 0xff54414d, 0x00531ded,
356 0x004a5e07, 0xff53cf41, 0x006efbdc,
357 0x00000002,
358 0x00246102,
359 0x0000010a,
360 0x00c93dc4, 0xff26f5f6, 0x005d1041,
361 0x001002c4, 0xff245b76, 0x00666002,
362 0xffc30a45, 0xff1baecd, 0x00765921,
363 0x00000002,
364 0x00009204,
365 0x000aaaab,
366 0xffaaaaab,
367 0xfffaaaab,
368 0x00555555,
369 0xff600000,
370 0xfff55555,
371 0x00155555,
372 0x00055555,
373 0xffeaaaab,
374 0x00200000
375};
376
377static u32 coef_11to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
378 0x000c6102,
379 0x0001d727,
380 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
381 0x00e55557, 0xffcadd5b, 0x003d80ba,
382 0x00d13397, 0xfff232f8, 0x00683337,
383 0x00000002,
384 0x00006102,
385 0x000013d9,
386 0x00ebd477, 0xff4ce383, 0x0042049d,
387 0x0089c278, 0xff54414d, 0x00531ded,
388 0x004a5e07, 0xff53cf41, 0x006efbdc,
389 0x00000002
390};
391
392static u32 coef_11to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
393 0x000c6102,
394 0x0001d727,
395 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
396 0x00e55557, 0xffcadd5b, 0x003d80ba,
397 0x00d13397, 0xfff232f8, 0x00683337,
398 0x00000002,
399 0x00186102,
400 0x000013d9,
401 0x00ebd477, 0xff4ce383, 0x0042049d,
402 0x0089c278, 0xff54414d, 0x00531ded,
403 0x004a5e07, 0xff53cf41, 0x006efbdc,
404 0x00000002,
405 0x00246102,
406 0x0000010a,
407 0x00c93dc4, 0xff26f5f6, 0x005d1041,
408 0x001002c4, 0xff245b76, 0x00666002,
409 0xffc30a45, 0xff1baecd, 0x00765921,
410 0x00000002,
411 0x00005204,
412 0x000aaaab,
413 0xffaaaaab,
414 0xfffaaaab,
415 0x00555555,
416 0xff600000,
417 0xfff55555,
418 0x00155555,
419 0x00055555,
420 0xffeaaaab,
421 0x00200000
422};
423
424static u32 coef_11to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
425 0x000c6102,
426 0x0001d727,
427 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
428 0x00e55557, 0xffcadd5b, 0x003d80ba,
429 0x00d13397, 0xfff232f8, 0x00683337,
430 0x00000002,
431 0x00186102,
432 0x000013d9,
433 0x00ebd477, 0xff4ce383, 0x0042049d,
434 0x0089c278, 0xff54414d, 0x00531ded,
435 0x004a5e07, 0xff53cf41, 0x006efbdc,
436 0x00000002,
437 0x00006102,
438 0x0000010a,
439 0x00c93dc4, 0xff26f5f6, 0x005d1041,
440 0x001002c4, 0xff245b76, 0x00666002,
441 0xffc30a45, 0xff1baecd, 0x00765921,
442 0x00000002
443};
444
445static u32 coef_11to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
446 0x000c6102,
447 0x0001d727,
448 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
449 0x00e55557, 0xffcadd5b, 0x003d80ba,
450 0x00d13397, 0xfff232f8, 0x00683337,
451 0x00000002,
452 0x00186102,
453 0x000013d9,
454 0x00ebd477, 0xff4ce383, 0x0042049d,
455 0x0089c278, 0xff54414d, 0x00531ded,
456 0x004a5e07, 0xff53cf41, 0x006efbdc,
457 0x00000002,
458 0x00246102,
459 0x0000010a,
460 0x00c93dc4, 0xff26f5f6, 0x005d1041,
461 0x001002c4, 0xff245b76, 0x00666002,
462 0xffc30a45, 0xff1baecd, 0x00765921,
463 0x00000002,
464 0x00000204,
465 0x000aaaab,
466 0xffaaaaab,
467 0xfffaaaab,
468 0x00555555,
469 0xff600000,
470 0xfff55555,
471 0x00155555,
472 0x00055555,
473 0xffeaaaab,
474 0x00200000
475};
476
477static u32 coef_16to8[TEGRA210_SFC_COEF_RAM_DEPTH] = {
478 0x00005102,
479 0x0001d727,
480 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
481 0x00e55557, 0xffcadd5b, 0x003d80ba,
482 0x00d13397, 0xfff232f8, 0x00683337,
483 0x00000001
484};
485
486static u32 coef_16to11[TEGRA210_SFC_COEF_RAM_DEPTH] = {
487 0x000fa103,
488 0x000001e0,
489 0x00de44c0, 0xff380b7f, 0x004ffc73,
490 0x00494b44, 0xff3d493a, 0x005908bf,
491 0xffe9a3c8, 0xff425647, 0x006745f7,
492 0xffc42d61, 0xff40a6c7, 0x00776709,
493 0x00000003,
494 0x001a5204,
495 0x000aaaab,
496 0xffaaaaab,
497 0xfffaaaab,
498 0x00555555,
499 0xff600000,
500 0xfff55555,
501 0x00155555,
502 0x00055555,
503 0xffeaaaab,
504 0x00200000,
505 0x00005102,
506 0x0001d727,
507 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
508 0x00e55557, 0xffcadd5b, 0x003d80ba,
509 0x00d13397, 0xfff232f8, 0x00683337,
510 0x00000001
511};
512
513static u32 coef_16to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
514 0x000c6102,
515 0x0001d727,
516 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
517 0x00e55557, 0xffcadd5b, 0x003d80ba,
518 0x00d13397, 0xfff232f8, 0x00683337,
519 0x00000002,
520 0x0018a102,
521 0x000005d6,
522 0x00c6543e, 0xff342935, 0x0052f116,
523 0x000a1d78, 0xff3330c0, 0x005f88a3,
524 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
525 0x00000003,
526 0x00235204,
527 0x000aaaab,
528 0xffaaaaab,
529 0xfffaaaab,
530 0x00555555,
531 0xff600000,
532 0xfff55555,
533 0x00155555,
534 0x00055555,
535 0xffeaaaab,
536 0x00200000,
537 0x00005102,
538 0x0000015f,
539 0x00a7909c, 0xff241c71, 0x005f5e00,
540 0xffca77f4, 0xff20dd50, 0x006855eb,
541 0xff86c552, 0xff18137a, 0x00773648,
542 0x00000001
543};
544
545static u32 coef_16to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
546 0x0015a105,
547 0x00000292,
548 0x00e4320a, 0xff41d2d9, 0x004911ac,
549 0x005dd9e3, 0xff4c7d80, 0x0052103e,
550 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
551 0xffc4b414, 0xff68582c, 0x006b38e5,
552 0xffabb861, 0xff704bec, 0x0074de52,
553 0xffa19f4c, 0xff729059, 0x007c7e90,
554 0x00000003,
555 0x00005105,
556 0x00000292,
557 0x00e4320a, 0xff41d2d9, 0x004911ac,
558 0x005dd9e3, 0xff4c7d80, 0x0052103e,
559 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
560 0xffc4b414, 0xff68582c, 0x006b38e5,
561 0xffabb861, 0xff704bec, 0x0074de52,
562 0xffa19f4c, 0xff729059, 0x007c7e90,
563 0x00000001
564};
565
566static u32 coef_16to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
567 0x00006102,
568 0x0001d727,
569 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
570 0x00e55557, 0xffcadd5b, 0x003d80ba,
571 0x00d13397, 0xfff232f8, 0x00683337,
572 0x00000002
573};
574
575static u32 coef_16to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
576 0x00156105,
577 0x0000d649,
578 0x00e87afb, 0xff5f69d0, 0x003df3cf,
579 0x007ce488, 0xff99a5c8, 0x0056a6a0,
580 0x00344928, 0xffcba3e5, 0x006be470,
581 0x00137aa7, 0xffe60276, 0x00773410,
582 0x0005fa2a, 0xfff1ac11, 0x007c795b,
583 0x00012d36, 0xfff5eca2, 0x007f10ef,
584 0x00000002,
585 0x0021a102,
586 0x00000e00,
587 0x00e2e000, 0xff6e1a00, 0x002aaa00,
588 0x00610a00, 0xff5dda00, 0x003ccc00,
589 0x00163a00, 0xff3c0400, 0x00633200,
590 0x00000003,
591 0x002c0204,
592 0x000aaaab,
593 0xffaaaaab,
594 0xfffaaaab,
595 0x00555555,
596 0xff600000,
597 0xfff55555,
598 0x00155555,
599 0x00055555,
600 0xffeaaaab,
601 0x00200000,
602 0x00005101,
603 0x0000203c,
604 0x00f52d35, 0xff2e2162, 0x005a21e0,
605 0x00c6f0f0, 0xff2ecd69, 0x006fa78d,
606 0x00000001
607};
608
609static u32 coef_16to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
610 0x0000a105,
611 0x00000784,
612 0x00cc516e, 0xff2c9639, 0x005ad5b3,
613 0x0013ad0d, 0xff3d4799, 0x0063ce75,
614 0xffb6f398, 0xff5138d1, 0x006e9e1f,
615 0xff9186e5, 0xff5f96a4, 0x0076a86e,
616 0xff82089c, 0xff676b81, 0x007b9f8a,
617 0xff7c48a5, 0xff6a31e7, 0x007ebb7b,
618 0x00000003
619};
620
621static u32 coef_16to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
622 0x000c6102,
623 0x0001d727,
624 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
625 0x00e55557, 0xffcadd5b, 0x003d80ba,
626 0x00d13397, 0xfff232f8, 0x00683337,
627 0x00000002,
628 0x0018a102,
629 0x000005d6,
630 0x00c6543e, 0xff342935, 0x0052f116,
631 0x000a1d78, 0xff3330c0, 0x005f88a3,
632 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
633 0x00000003,
634 0x00000204,
635 0x000aaaab,
636 0xffaaaaab,
637 0xfffaaaab,
638 0x00555555,
639 0xff600000,
640 0xfff55555,
641 0x00155555,
642 0x00055555,
643 0xffeaaaab,
644 0x00200000
645};
646
647static u32 coef_16to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
648 0x000c6102,
649 0x0001d727,
650 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
651 0x00e55557, 0xffcadd5b, 0x003d80ba,
652 0x00d13397, 0xfff232f8, 0x00683337,
653 0x00000002,
654 0x0000a102,
655 0x000005d6,
656 0x00c6543e, 0xff342935, 0x0052f116,
657 0x000a1d78, 0xff3330c0, 0x005f88a3,
658 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
659 0x00000003
660};
661
662static u32 coef_16to176[TEGRA210_SFC_COEF_RAM_DEPTH] = {
663 0x000c6102,
664 0x0001d727,
665 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
666 0x00e55557, 0xffcadd5b, 0x003d80ba,
667 0x00d13397, 0xfff232f8, 0x00683337,
668 0x00000002,
669 0x00186102,
670 0x000013d9,
671 0x00ebd477, 0xff4ce383, 0x0042049d,
672 0x0089c278, 0xff54414d, 0x00531ded,
673 0x004a5e07, 0xff53cf41, 0x006efbdc,
674 0x00000002,
675 0x0024a102,
676 0x0000007d,
677 0x007d1f20, 0xff1a540e, 0x00678bf9,
678 0xff916625, 0xff16b0ff, 0x006e433a,
679 0xff5af660, 0xff0eb91f, 0x00797356,
680 0x00000003,
681 0x00000204,
682 0x000aaaab,
683 0xffaaaaab,
684 0xfffaaaab,
685 0x00555555,
686 0xff600000,
687 0xfff55555,
688 0x00155555,
689 0x00055555,
690 0xffeaaaab,
691 0x00200000
692};
693
694static u32 coef_16to192[TEGRA210_SFC_COEF_RAM_DEPTH] = {
695 0x000c6102,
696 0x0001d727,
697 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
698 0x00e55557, 0xffcadd5b, 0x003d80ba,
699 0x00d13397, 0xfff232f8, 0x00683337,
700 0x00000002,
701 0x00186102,
702 0x000013d9,
703 0x00ebd477, 0xff4ce383, 0x0042049d,
704 0x0089c278, 0xff54414d, 0x00531ded,
705 0x004a5e07, 0xff53cf41, 0x006efbdc,
706 0x00000002,
707 0x0000a102,
708 0x0000007d,
709 0x007d1f20, 0xff1a540e, 0x00678bf9,
710 0xff916625, 0xff16b0ff, 0x006e433a,
711 0xff5af660, 0xff0eb91f, 0x00797356,
712 0x00000003
713};
714
715static u32 coef_22to8[TEGRA210_SFC_COEF_RAM_DEPTH] = {
716 0x000c6102,
717 0x000005f3,
718 0x00d816d6, 0xff385383, 0x004fe566,
719 0x003c548d, 0xff38c23d, 0x005d0b1c,
720 0xfff02f7d, 0xff31e983, 0x0072d65d,
721 0x00000002,
722 0x00179204,
723 0x000aaaab,
724 0xffaaaaab,
725 0xfffaaaab,
726 0x00555555,
727 0xff600000,
728 0xfff55555,
729 0x00155555,
730 0x00055555,
731 0xffeaaaab,
732 0x00200000,
733 0x00005102,
734 0x0001d727,
735 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
736 0x00e55557, 0xffcadd5b, 0x003d80ba,
737 0x00d13397, 0xfff232f8, 0x00683337,
738 0x00000001
739};
740
741static u32 coef_22to11[TEGRA210_SFC_COEF_RAM_DEPTH] = {
742 0x00005102,
743 0x0001d727,
744 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
745 0x00e55557, 0xffcadd5b, 0x003d80ba,
746 0x00d13397, 0xfff232f8, 0x00683337,
747 0x00000001
748};
749
750static u32 coef_22to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
751 0x000c6102,
752 0x0000015f,
753 0x00a7909c, 0xff241c71, 0x005f5e00,
754 0xffca77f4, 0xff20dd50, 0x006855eb,
755 0xff86c552, 0xff18137a, 0x00773648,
756 0x00000002,
757 0x00186102,
758 0x000005f3,
759 0x00d816d6, 0xff385383, 0x004fe566,
760 0x003c548d, 0xff38c23d, 0x005d0b1c,
761 0xfff02f7d, 0xff31e983, 0x0072d65d,
762 0x00000002,
763 0x00239204,
764 0x000aaaab,
765 0xffaaaaab,
766 0xfffaaaab,
767 0x00555555,
768 0xff600000,
769 0xfff55555,
770 0x00155555,
771 0x00055555,
772 0xffeaaaab,
773 0x00200000,
774 0x00005102,
775 0x0001d727,
776 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
777 0x00e55557, 0xffcadd5b, 0x003d80ba,
778 0x00d13397, 0xfff232f8, 0x00683337,
779 0x00000001
780};
781
782static u32 coef_22to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
783 0x000c6102,
784 0x0001d727,
785 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
786 0x00e55557, 0xffcadd5b, 0x003d80ba,
787 0x00d13397, 0xfff232f8, 0x00683337,
788 0x00000002,
789 0x00186102,
790 0x000013d9,
791 0x00ebd477, 0xff4ce383, 0x0042049d,
792 0x0089c278, 0xff54414d, 0x00531ded,
793 0x004a5e07, 0xff53cf41, 0x006efbdc,
794 0x00000002,
795 0x00235204,
796 0x000aaaab,
797 0xffaaaaab,
798 0xfffaaaab,
799 0x00555555,
800 0xff600000,
801 0xfff55555,
802 0x00155555,
803 0x00055555,
804 0xffeaaaab,
805 0x00200000,
806 0x00005102,
807 0x0001d029,
808 0x00f2a98b, 0xff92aa71, 0x001fcd16,
809 0x00ae9004, 0xffb85140, 0x0041813a,
810 0x007f8ed1, 0xffd585fc, 0x006a69e6,
811 0x00000001
812};
813
814static u32 coef_22to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
815 0x000c6102,
816 0x0001d727,
817 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
818 0x00e55557, 0xffcadd5b, 0x003d80ba,
819 0x00d13397, 0xfff232f8, 0x00683337,
820 0x00000002,
821 0x00186102,
822 0x000013d9,
823 0x00ebd477, 0xff4ce383, 0x0042049d,
824 0x0089c278, 0xff54414d, 0x00531ded,
825 0x004a5e07, 0xff53cf41, 0x006efbdc,
826 0x00000002,
827 0x00009204,
828 0x000aaaab,
829 0xffaaaaab,
830 0xfffaaaab,
831 0x00555555,
832 0xff600000,
833 0xfff55555,
834 0x00155555,
835 0x00055555,
836 0xffeaaaab,
837 0x00200000
838};
839
840static u32 coef_22to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
841 0x00006102,
842 0x0001d727,
843 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
844 0x00e55557, 0xffcadd5b, 0x003d80ba,
845 0x00d13397, 0xfff232f8, 0x00683337,
846 0x00000002
847};
848
849static u32 coef_22to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
850 0x000c6102,
851 0x0001d727,
852 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
853 0x00e55557, 0xffcadd5b, 0x003d80ba,
854 0x00d13397, 0xfff232f8, 0x00683337,
855 0x00000002,
856 0x00186102,
857 0x000013d9,
858 0x00ebd477, 0xff4ce383, 0x0042049d,
859 0x0089c278, 0xff54414d, 0x00531ded,
860 0x004a5e07, 0xff53cf41, 0x006efbdc,
861 0x00000002,
862 0x00005204,
863 0x000aaaab,
864 0xffaaaaab,
865 0xfffaaaab,
866 0x00555555,
867 0xff600000,
868 0xfff55555,
869 0x00155555,
870 0x00055555,
871 0xffeaaaab,
872 0x00200000
873};
874
875static u32 coef_22to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
876 0x000c6102,
877 0x0001d727,
878 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
879 0x00e55557, 0xffcadd5b, 0x003d80ba,
880 0x00d13397, 0xfff232f8, 0x00683337,
881 0x00000002,
882 0x00006102,
883 0x000013d9,
884 0x00ebd477, 0xff4ce383, 0x0042049d,
885 0x0089c278, 0xff54414d, 0x00531ded,
886 0x004a5e07, 0xff53cf41, 0x006efbdc,
887 0x00000002
888};
889
890static u32 coef_22to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
891 0x000c6102,
892 0x0001d727,
893 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
894 0x00e55557, 0xffcadd5b, 0x003d80ba,
895 0x00d13397, 0xfff232f8, 0x00683337,
896 0x00000002,
897 0x00186102,
898 0x000013d9,
899 0x00ebd477, 0xff4ce383, 0x0042049d,
900 0x0089c278, 0xff54414d, 0x00531ded,
901 0x004a5e07, 0xff53cf41, 0x006efbdc,
902 0x00000002,
903 0x00246102,
904 0x0000010a,
905 0x00c93dc4, 0xff26f5f6, 0x005d1041,
906 0x001002c4, 0xff245b76, 0x00666002,
907 0xffc30a45, 0xff1baecd, 0x00765921,
908 0x00000002,
909 0x00005204,
910 0x000aaaab,
911 0xffaaaaab,
912 0xfffaaaab,
913 0x00555555,
914 0xff600000,
915 0xfff55555,
916 0x00155555,
917 0x00055555,
918 0xffeaaaab,
919 0x00200000
920};
921
922static u32 coef_22to176[TEGRA210_SFC_COEF_RAM_DEPTH] = {
923 0x000c6102,
924 0x0001d727,
925 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
926 0x00e55557, 0xffcadd5b, 0x003d80ba,
927 0x00d13397, 0xfff232f8, 0x00683337,
928 0x00000002,
929 0x00186102,
930 0x000013d9,
931 0x00ebd477, 0xff4ce383, 0x0042049d,
932 0x0089c278, 0xff54414d, 0x00531ded,
933 0x004a5e07, 0xff53cf41, 0x006efbdc,
934 0x00000002,
935 0x00006102,
936 0x0000010a,
937 0x00c93dc4, 0xff26f5f6, 0x005d1041,
938 0x001002c4, 0xff245b76, 0x00666002,
939 0xffc30a45, 0xff1baecd, 0x00765921,
940 0x00000002
941};
942
943static u32 coef_22to192[TEGRA210_SFC_COEF_RAM_DEPTH] = {
944 0x000c6102,
945 0x0001d727,
946 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
947 0x00e55557, 0xffcadd5b, 0x003d80ba,
948 0x00d13397, 0xfff232f8, 0x00683337,
949 0x00000002,
950 0x00186102,
951 0x000013d9,
952 0x00ebd477, 0xff4ce383, 0x0042049d,
953 0x0089c278, 0xff54414d, 0x00531ded,
954 0x004a5e07, 0xff53cf41, 0x006efbdc,
955 0x00000002,
956 0x00246102,
957 0x0000010a,
958 0x00c93dc4, 0xff26f5f6, 0x005d1041,
959 0x001002c4, 0xff245b76, 0x00666002,
960 0xffc30a45, 0xff1baecd, 0x00765921,
961 0x00000002,
962 0x00000204,
963 0x000aaaab,
964 0xffaaaaab,
965 0xfffaaaab,
966 0x00555555,
967 0xff600000,
968 0xfff55555,
969 0x00155555,
970 0x00055555,
971 0xffeaaaab,
972 0x00200000
973};
974
975static u32 coef_24to8[TEGRA210_SFC_COEF_RAM_DEPTH] = {
976 0x00009105,
977 0x000005e1,
978 0x00dca92f, 0xff45647a, 0x0046b59c,
979 0x00429d1e, 0xff4fec62, 0x00516d30,
980 0xffdea779, 0xff5e08ba, 0x0060185e,
981 0xffafbab2, 0xff698d5a, 0x006ce3ae,
982 0xff9a82d2, 0xff704674, 0x007633c5,
983 0xff923433, 0xff721128, 0x007cff42,
984 0x00000001
985};
986
987static u32 coef_24to11[TEGRA210_SFC_COEF_RAM_DEPTH] = {
988 0x000f6103,
989 0x000001e0,
990 0x00de44c0, 0xff380b7f, 0x004ffc73,
991 0x00494b44, 0xff3d493a, 0x005908bf,
992 0xffe9a3c8, 0xff425647, 0x006745f7,
993 0xffc42d61, 0xff40a6c7, 0x00776709,
994 0x00000002,
995 0x001a5204,
996 0x000aaaab,
997 0xffaaaaab,
998 0xfffaaaab,
999 0x00555555,
1000 0xff600000,
1001 0xfff55555,
1002 0x00155555,
1003 0x00055555,
1004 0xffeaaaab,
1005 0x00200000,
1006 0x00005102,
1007 0x0001d727,
1008 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1009 0x00e55557, 0xffcadd5b, 0x003d80ba,
1010 0x00d13397, 0xfff232f8, 0x00683337,
1011 0x00000001
1012};
1013
1014static u32 coef_24to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1015 0x00156105,
1016 0x00000292,
1017 0x00e4320a, 0xff41d2d9, 0x004911ac,
1018 0x005dd9e3, 0xff4c7d80, 0x0052103e,
1019 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
1020 0xffc4b414, 0xff68582c, 0x006b38e5,
1021 0xffabb861, 0xff704bec, 0x0074de52,
1022 0xffa19f4c, 0xff729059, 0x007c7e90,
1023 0x00000002,
1024 0x00009105,
1025 0x00000292,
1026 0x00e4320a, 0xff41d2d9, 0x004911ac,
1027 0x005dd9e3, 0xff4c7d80, 0x0052103e,
1028 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
1029 0xffc4b414, 0xff68582c, 0x006b38e5,
1030 0xffabb861, 0xff704bec, 0x0074de52,
1031 0xffa19f4c, 0xff729059, 0x007c7e90,
1032 0x00000001
1033};
1034
1035static u32 coef_24to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1036 0x000c6102,
1037 0x0001d029,
1038 0x00f2a98b, 0xff92aa71, 0x001fcd16,
1039 0x00ae9004, 0xffb85140, 0x0041813a,
1040 0x007f8ed1, 0xffd585fc, 0x006a69e6,
1041 0x00000002,
1042 0x001b6103,
1043 0x000001e0,
1044 0x00de44c0, 0xff380b7f, 0x004ffc73,
1045 0x00494b44, 0xff3d493a, 0x005908bf,
1046 0xffe9a3c8, 0xff425647, 0x006745f7,
1047 0xffc42d61, 0xff40a6c7, 0x00776709,
1048 0x00000002,
1049 0x00265204,
1050 0x000aaaab,
1051 0xffaaaaab,
1052 0xfffaaaab,
1053 0x00555555,
1054 0xff600000,
1055 0xfff55555,
1056 0x00155555,
1057 0x00055555,
1058 0xffeaaaab,
1059 0x00200000,
1060 0x00005102,
1061 0x0001d727,
1062 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1063 0x00e55557, 0xffcadd5b, 0x003d80ba,
1064 0x00d13397, 0xfff232f8, 0x00683337,
1065 0x00000001
1066};
1067
1068static u32 coef_24to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1069 0x000c6102,
1070 0x0001d727,
1071 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1072 0x00e55557, 0xffcadd5b, 0x003d80ba,
1073 0x00d13397, 0xfff232f8, 0x00683337,
1074 0x00000002,
1075 0x00186102,
1076 0x000013d9,
1077 0x00ebd477, 0xff4ce383, 0x0042049d,
1078 0x0089c278, 0xff54414d, 0x00531ded,
1079 0x004a5e07, 0xff53cf41, 0x006efbdc,
1080 0x00000002,
1081 0x00009102,
1082 0x000013d9,
1083 0x00ebd477, 0xff4ce383, 0x0042049d,
1084 0x0089c278, 0xff54414d, 0x00531ded,
1085 0x004a5e07, 0xff53cf41, 0x006efbdc,
1086 0x00000001
1087};
1088
1089static u32 coef_24to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1090 0x000c6102,
1091 0x0001d727,
1092 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1093 0x00e55557, 0xffcadd5b, 0x003d80ba,
1094 0x00d13397, 0xfff232f8, 0x00683337,
1095 0x00000002,
1096 0x00186102,
1097 0x000013d9,
1098 0x00ebd477, 0xff4ce383, 0x0042049d,
1099 0x0089c278, 0xff54414d, 0x00531ded,
1100 0x004a5e07, 0xff53cf41, 0x006efbdc,
1101 0x00000002,
1102 0x00230204,
1103 0x000aaaab,
1104 0xffaaaaab,
1105 0xfffaaaab,
1106 0x00555555,
1107 0xff600000,
1108 0xfff55555,
1109 0x00155555,
1110 0x00055555,
1111 0xffeaaaab,
1112 0x00200000,
1113 0x00005102,
1114 0x00001685,
1115 0x00f53ae9, 0xff52f196, 0x003e3e08,
1116 0x00b9f857, 0xff5d8985, 0x0050070a,
1117 0x008c3e86, 0xff6053f0, 0x006d98ef,
1118 0x00000001
1119};
1120
1121static u32 coef_24to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1122 0x00006102,
1123 0x0001d727,
1124 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1125 0x00e55557, 0xffcadd5b, 0x003d80ba,
1126 0x00d13397, 0xfff232f8, 0x00683337,
1127 0x00000002
1128};
1129
1130static u32 coef_24to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1131 0x000c6102,
1132 0x0001d727,
1133 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1134 0x00e55557, 0xffcadd5b, 0x003d80ba,
1135 0x00d13397, 0xfff232f8, 0x00683337,
1136 0x00000002,
1137 0x00186102,
1138 0x000013d9,
1139 0x00ebd477, 0xff4ce383, 0x0042049d,
1140 0x0089c278, 0xff54414d, 0x00531ded,
1141 0x004a5e07, 0xff53cf41, 0x006efbdc,
1142 0x00000002,
1143 0x00246102,
1144 0x0000010a,
1145 0x00c93dc4, 0xff26f5f6, 0x005d1041,
1146 0x001002c4, 0xff245b76, 0x00666002,
1147 0xffc30a45, 0xff1baecd, 0x00765921,
1148 0x00000002,
1149 0x002f0204,
1150 0x000aaaab,
1151 0xffaaaaab,
1152 0xfffaaaab,
1153 0x00555555,
1154 0xff600000,
1155 0xfff55555,
1156 0x00155555,
1157 0x00055555,
1158 0xffeaaaab,
1159 0x00200000,
1160 0x00005102,
1161 0x00000138,
1162 0x00d5d232, 0xff2a3bf8, 0x005a785c,
1163 0x0034001b, 0xff283109, 0x006462a6,
1164 0xffe6746a, 0xff1fb09c, 0x00758a91,
1165 0x00000001
1166};
1167
1168static u32 coef_24to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1169 0x000c6102,
1170 0x0001d727,
1171 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1172 0x00e55557, 0xffcadd5b, 0x003d80ba,
1173 0x00d13397, 0xfff232f8, 0x00683337,
1174 0x00000002,
1175 0x00006102,
1176 0x000013d9,
1177 0x00ebd477, 0xff4ce383, 0x0042049d,
1178 0x0089c278, 0xff54414d, 0x00531ded,
1179 0x004a5e07, 0xff53cf41, 0x006efbdc,
1180 0x00000002
1181};
1182
1183static u32 coef_24to176[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1184 0x000c6102,
1185 0x0001d727,
1186 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1187 0x00e55557, 0xffcadd5b, 0x003d80ba,
1188 0x00d13397, 0xfff232f8, 0x00683337,
1189 0x00000002,
1190 0x00186102,
1191 0x000013d9,
1192 0x00ebd477, 0xff4ce383, 0x0042049d,
1193 0x0089c278, 0xff54414d, 0x00531ded,
1194 0x004a5e07, 0xff53cf41, 0x006efbdc,
1195 0x00000002,
1196 0x00246102,
1197 0x0000010a,
1198 0x00c93dc4, 0xff26f5f6, 0x005d1041,
1199 0x001002c4, 0xff245b76, 0x00666002,
1200 0xffc30a45, 0xff1baecd, 0x00765921,
1201 0x00000002,
1202 0x00000204,
1203 0x000aaaab,
1204 0xffaaaaab,
1205 0xfffaaaab,
1206 0x00555555,
1207 0xff600000,
1208 0xfff55555,
1209 0x00155555,
1210 0x00055555,
1211 0xffeaaaab,
1212 0x00200000
1213};
1214
1215static u32 coef_24to192[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1216 0x000c6102,
1217 0x0001d727,
1218 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1219 0x00e55557, 0xffcadd5b, 0x003d80ba,
1220 0x00d13397, 0xfff232f8, 0x00683337,
1221 0x00000002,
1222 0x00186102,
1223 0x000013d9,
1224 0x00ebd477, 0xff4ce383, 0x0042049d,
1225 0x0089c278, 0xff54414d, 0x00531ded,
1226 0x004a5e07, 0xff53cf41, 0x006efbdc,
1227 0x00000002,
1228 0x00006102,
1229 0x0000010a,
1230 0x00c93dc4, 0xff26f5f6, 0x005d1041,
1231 0x001002c4, 0xff245b76, 0x00666002,
1232 0xffc30a45, 0xff1baecd, 0x00765921,
1233 0x00000002
1234};
1235
1236static u32 coef_32to8[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1237 0x000c5102,
1238 0x000013d9,
1239 0x00ebd477, 0xff4ce383, 0x0042049d,
1240 0x0089c278, 0xff54414d, 0x00531ded,
1241 0x004a5e07, 0xff53cf41, 0x006efbdc,
1242 0x00000001,
1243 0x00005102,
1244 0x0001d727,
1245 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1246 0x00e55557, 0xffcadd5b, 0x003d80ba,
1247 0x00d13397, 0xfff232f8, 0x00683337,
1248 0x00000001
1249};
1250
1251static u32 coef_32to11[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1252 0x000ca102,
1253 0x000000af,
1254 0x00c65663, 0xff23d2ce, 0x005f97d6,
1255 0x00086ad6, 0xff20ec4f, 0x00683201,
1256 0xffbbbef6, 0xff184447, 0x00770963,
1257 0x00000003,
1258 0x00175204,
1259 0x000aaaab,
1260 0xffaaaaab,
1261 0xfffaaaab,
1262 0x00555555,
1263 0xff600000,
1264 0xfff55555,
1265 0x00155555,
1266 0x00055555,
1267 0xffeaaaab,
1268 0x00200000,
1269 0x0000d102,
1270 0x000013d9,
1271 0x00ebd477, 0xff4ce383, 0x0042049d,
1272 0x0089c278, 0xff54414d, 0x00531ded,
1273 0x004a5e07, 0xff53cf41, 0x006efbdc,
1274 0x00000001
1275};
1276
1277static u32 coef_32to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1278 0x00005102,
1279 0x0001d727,
1280 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1281 0x00e55557, 0xffcadd5b, 0x003d80ba,
1282 0x00d13397, 0xfff232f8, 0x00683337,
1283 0x00000001
1284};
1285
1286static u32 coef_32to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1287 0x000fa103,
1288 0x000001e0,
1289 0x00de44c0, 0xff380b7f, 0x004ffc73,
1290 0x00494b44, 0xff3d493a, 0x005908bf,
1291 0xffe9a3c8, 0xff425647, 0x006745f7,
1292 0xffc42d61, 0xff40a6c7, 0x00776709,
1293 0x00000003,
1294 0x001a5204,
1295 0x000aaaab,
1296 0xffaaaaab,
1297 0xfffaaaab,
1298 0x00555555,
1299 0xff600000,
1300 0xfff55555,
1301 0x00155555,
1302 0x00055555,
1303 0xffeaaaab,
1304 0x00200000,
1305 0x00005102,
1306 0x0001d727,
1307 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1308 0x00e55557, 0xffcadd5b, 0x003d80ba,
1309 0x00d13397, 0xfff232f8, 0x00683337,
1310 0x00000001
1311};
1312
1313static u32 coef_32to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1314 0x000ca102,
1315 0x000013d9,
1316 0x00ebd477, 0xff4ce383, 0x0042049d,
1317 0x0089c278, 0xff54414d, 0x00531ded,
1318 0x004a5e07, 0xff53cf41, 0x006efbdc,
1319 0x00000003,
1320 0x0000d102,
1321 0x000013d9,
1322 0x00ebd477, 0xff4ce383, 0x0042049d,
1323 0x0089c278, 0xff54414d, 0x00531ded,
1324 0x004a5e07, 0xff53cf41, 0x006efbdc,
1325 0x00000001
1326};
1327
1328static u32 coef_32to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1329 0x000c6102,
1330 0x0001d727,
1331 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1332 0x00e55557, 0xffcadd5b, 0x003d80ba,
1333 0x00d13397, 0xfff232f8, 0x00683337,
1334 0x00000002,
1335 0x0018a102,
1336 0x000005d6,
1337 0x00c6543e, 0xff342935, 0x0052f116,
1338 0x000a1d78, 0xff3330c0, 0x005f88a3,
1339 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
1340 0x00000003,
1341 0x00235204,
1342 0x000aaaab,
1343 0xffaaaaab,
1344 0xfffaaaab,
1345 0x00555555,
1346 0xff600000,
1347 0xfff55555,
1348 0x00155555,
1349 0x00055555,
1350 0xffeaaaab,
1351 0x00200000,
1352 0x00005102,
1353 0x0000015f,
1354 0x00a7909c, 0xff241c71, 0x005f5e00,
1355 0xffca77f4, 0xff20dd50, 0x006855eb,
1356 0xff86c552, 0xff18137a, 0x00773648,
1357 0x00000001
1358};
1359
1360static u32 coef_32to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1361 0x0015a105,
1362 0x00000292,
1363 0x00e4320a, 0xff41d2d9, 0x004911ac,
1364 0x005dd9e3, 0xff4c7d80, 0x0052103e,
1365 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
1366 0xffc4b414, 0xff68582c, 0x006b38e5,
1367 0xffabb861, 0xff704bec, 0x0074de52,
1368 0xffa19f4c, 0xff729059, 0x007c7e90,
1369 0x00000003,
1370 0x00005105,
1371 0x00000292,
1372 0x00e4320a, 0xff41d2d9, 0x004911ac,
1373 0x005dd9e3, 0xff4c7d80, 0x0052103e,
1374 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
1375 0xffc4b414, 0xff68582c, 0x006b38e5,
1376 0xffabb861, 0xff704bec, 0x0074de52,
1377 0xffa19f4c, 0xff729059, 0x007c7e90,
1378 0x00000001
1379};
1380
1381static u32 coef_32to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1382 0x000c6102,
1383 0x0001d727,
1384 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1385 0x00e55557, 0xffcadd5b, 0x003d80ba,
1386 0x00d13397, 0xfff232f8, 0x00683337,
1387 0x00000002,
1388 0x0018a102,
1389 0x000005d6,
1390 0x00c6543e, 0xff342935, 0x0052f116,
1391 0x000a1d78, 0xff3330c0, 0x005f88a3,
1392 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
1393 0x00000003,
1394 0x00230204,
1395 0x000aaaab,
1396 0xffaaaaab,
1397 0xfffaaaab,
1398 0x00555555,
1399 0xff600000,
1400 0xfff55555,
1401 0x00155555,
1402 0x00055555,
1403 0xffeaaaab,
1404 0x00200000,
1405 0x00005102,
1406 0x000005f3,
1407 0x00d816d6, 0xff385383, 0x004fe566,
1408 0x003c548d, 0xff38c23d, 0x005d0b1c,
1409 0xfff02f7d, 0xff31e983, 0x0072d65d,
1410 0x00000001
1411};
1412
1413static u32 coef_32to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1414 0x0000a105,
1415 0x00000292,
1416 0x00e4320a, 0xff41d2d9, 0x004911ac,
1417 0x005dd9e3, 0xff4c7d80, 0x0052103e,
1418 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
1419 0xffc4b414, 0xff68582c, 0x006b38e5,
1420 0xffabb861, 0xff704bec, 0x0074de52,
1421 0xffa19f4c, 0xff729059, 0x007c7e90,
1422 0x00000003
1423};
1424
1425static u32 coef_32to176[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1426 0x000c6102,
1427 0x0001d727,
1428 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1429 0x00e55557, 0xffcadd5b, 0x003d80ba,
1430 0x00d13397, 0xfff232f8, 0x00683337,
1431 0x00000002,
1432 0x0018a102,
1433 0x000005d6,
1434 0x00c6543e, 0xff342935, 0x0052f116,
1435 0x000a1d78, 0xff3330c0, 0x005f88a3,
1436 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
1437 0x00000003,
1438 0x00000204,
1439 0x000aaaab,
1440 0xffaaaaab,
1441 0xfffaaaab,
1442 0x00555555,
1443 0xff600000,
1444 0xfff55555,
1445 0x00155555,
1446 0x00055555,
1447 0xffeaaaab,
1448 0x00200000
1449};
1450
1451static u32 coef_32to192[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1452 0x000c6102,
1453 0x0001d727,
1454 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1455 0x00e55557, 0xffcadd5b, 0x003d80ba,
1456 0x00d13397, 0xfff232f8, 0x00683337,
1457 0x00000002,
1458 0x0000a102,
1459 0x000005d6,
1460 0x00c6543e, 0xff342935, 0x0052f116,
1461 0x000a1d78, 0xff3330c0, 0x005f88a3,
1462 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
1463 0x00000003
1464};
1465
1466static u32 coef_44to8[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1467 0x00120104,
1468 0x00000af2,
1469 0x0057eebe, 0xff1e9863, 0x00652604,
1470 0xff7206ea, 0xff22ad7e, 0x006d47e1,
1471 0xff42a4d7, 0xff26e722, 0x0075fd83,
1472 0xff352f66, 0xff29312b, 0x007b986b,
1473 0xff310a07, 0xff296f51, 0x007eca7c,
1474 0x00000001,
1475 0x001d9204,
1476 0x000aaaab,
1477 0xffaaaaab,
1478 0xfffaaaab,
1479 0x00555555,
1480 0xff600000,
1481 0xfff55555,
1482 0x00155555,
1483 0x00055555,
1484 0xffeaaaab,
1485 0x00200000,
1486 0x00005105,
1487 0x0000d649,
1488 0x00e87afb, 0xff5f69d0, 0x003df3cf,
1489 0x007ce488, 0xff99a5c8, 0x0056a6a0,
1490 0x00344928, 0xffcba3e5, 0x006be470,
1491 0x00137aa7, 0xffe60276, 0x00773410,
1492 0x0005fa2a, 0xfff1ac11, 0x007c795b,
1493 0x00012d36, 0xfff5eca2, 0x007f10ef,
1494 0x00000001
1495};
1496
1497static u32 coef_44to11[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1498 0x000c5102,
1499 0x000013d9,
1500 0x00ebd477, 0xff4ce383, 0x0042049d,
1501 0x0089c278, 0xff54414d, 0x00531ded,
1502 0x004a5e07, 0xff53cf41, 0x006efbdc,
1503 0x00000001,
1504 0x00005102,
1505 0x0001d727,
1506 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1507 0x00e55557, 0xffcadd5b, 0x003d80ba,
1508 0x00d13397, 0xfff232f8, 0x00683337,
1509 0x00000001
1510};
1511
1512static u32 coef_44to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1513 0x00126104,
1514 0x00000af2,
1515 0x0057eebe, 0xff1e9863, 0x00652604,
1516 0xff7206ea, 0xff22ad7e, 0x006d47e1,
1517 0xff42a4d7, 0xff26e722, 0x0075fd83,
1518 0xff352f66, 0xff29312b, 0x007b986b,
1519 0xff310a07, 0xff296f51, 0x007eca7c,
1520 0x00000002,
1521 0x001d9204,
1522 0x000aaaab,
1523 0xffaaaaab,
1524 0xfffaaaab,
1525 0x00555555,
1526 0xff600000,
1527 0xfff55555,
1528 0x00155555,
1529 0x00055555,
1530 0xffeaaaab,
1531 0x00200000,
1532 0x00005105,
1533 0x0000d649,
1534 0x00e87afb, 0xff5f69d0, 0x003df3cf,
1535 0x007ce488, 0xff99a5c8, 0x0056a6a0,
1536 0x00344928, 0xffcba3e5, 0x006be470,
1537 0x00137aa7, 0xffe60276, 0x00773410,
1538 0x0005fa2a, 0xfff1ac11, 0x007c795b,
1539 0x00012d36, 0xfff5eca2, 0x007f10ef,
1540 0x00000001
1541};
1542
1543static u32 coef_44to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1544 0x00005102,
1545 0x0001d727,
1546 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1547 0x00e55557, 0xffcadd5b, 0x003d80ba,
1548 0x00d13397, 0xfff232f8, 0x00683337,
1549 0x00000001
1550};
1551
1552static u32 coef_44to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1553 0x000c6102,
1554 0x00001685,
1555 0x00f53ae9, 0xff52f196, 0x003e3e08,
1556 0x00b9f857, 0xff5d8985, 0x0050070a,
1557 0x008c3e86, 0xff6053f0, 0x006d98ef,
1558 0x00000002,
1559 0x00175204,
1560 0x000aaaab,
1561 0xffaaaaab,
1562 0xfffaaaab,
1563 0x00555555,
1564 0xff600000,
1565 0xfff55555,
1566 0x00155555,
1567 0x00055555,
1568 0xffeaaaab,
1569 0x00200000,
1570 0x00005102,
1571 0x0001d727,
1572 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1573 0x00e55557, 0xffcadd5b, 0x003d80ba,
1574 0x00d13397, 0xfff232f8, 0x00683337,
1575 0x00000001
1576};
1577
1578static u32 coef_44to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1579 0x000c6102,
1580 0x0000015f,
1581 0x00a7909c, 0xff241c71, 0x005f5e00,
1582 0xffca77f4, 0xff20dd50, 0x006855eb,
1583 0xff86c552, 0xff18137a, 0x00773648,
1584 0x00000002,
1585 0x00186102,
1586 0x000005f3,
1587 0x00d816d6, 0xff385383, 0x004fe566,
1588 0x003c548d, 0xff38c23d, 0x005d0b1c,
1589 0xfff02f7d, 0xff31e983, 0x0072d65d,
1590 0x00000002,
1591 0x00239204,
1592 0x000aaaab,
1593 0xffaaaaab,
1594 0xfffaaaab,
1595 0x00555555,
1596 0xff600000,
1597 0xfff55555,
1598 0x00155555,
1599 0x00055555,
1600 0xffeaaaab,
1601 0x00200000,
1602 0x00005102,
1603 0x0001d727,
1604 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1605 0x00e55557, 0xffcadd5b, 0x003d80ba,
1606 0x00d13397, 0xfff232f8, 0x00683337,
1607 0x00000001
1608};
1609
1610static u32 coef_44to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1611 0x000c6102,
1612 0x0001d727,
1613 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1614 0x00e55557, 0xffcadd5b, 0x003d80ba,
1615 0x00d13397, 0xfff232f8, 0x00683337,
1616 0x00000002,
1617 0x00186102,
1618 0x000013d9,
1619 0x00ebd477, 0xff4ce383, 0x0042049d,
1620 0x0089c278, 0xff54414d, 0x00531ded,
1621 0x004a5e07, 0xff53cf41, 0x006efbdc,
1622 0x00000002,
1623 0x00235204,
1624 0x000aaaab,
1625 0xffaaaaab,
1626 0xfffaaaab,
1627 0x00555555,
1628 0xff600000,
1629 0xfff55555,
1630 0x00155555,
1631 0x00055555,
1632 0xffeaaaab,
1633 0x00200000,
1634 0x00005102,
1635 0x0001d029,
1636 0x00f2a98b, 0xff92aa71, 0x001fcd16,
1637 0x00ae9004, 0xffb85140, 0x0041813a,
1638 0x007f8ed1, 0xffd585fc, 0x006a69e6,
1639 0x00000001
1640};
1641
1642static u32 coef_44to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1643 0x00006102,
1644 0x0001d727,
1645 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1646 0x00e55557, 0xffcadd5b, 0x003d80ba,
1647 0x00d13397, 0xfff232f8, 0x00683337,
1648 0x00000002
1649};
1650
1651static u32 coef_44to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1652 0x000c6102,
1653 0x0001d727,
1654 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1655 0x00e55557, 0xffcadd5b, 0x003d80ba,
1656 0x00d13397, 0xfff232f8, 0x00683337,
1657 0x00000002,
1658 0x00186102,
1659 0x000013d9,
1660 0x00ebd477, 0xff4ce383, 0x0042049d,
1661 0x0089c278, 0xff54414d, 0x00531ded,
1662 0x004a5e07, 0xff53cf41, 0x006efbdc,
1663 0x00000002,
1664 0x00005204,
1665 0x000aaaab,
1666 0xffaaaaab,
1667 0xfffaaaab,
1668 0x00555555,
1669 0xff600000,
1670 0xfff55555,
1671 0x00155555,
1672 0x00055555,
1673 0xffeaaaab,
1674 0x00200000
1675};
1676
1677static u32 coef_44to176[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1678 0x000c6102,
1679 0x0001d727,
1680 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1681 0x00e55557, 0xffcadd5b, 0x003d80ba,
1682 0x00d13397, 0xfff232f8, 0x00683337,
1683 0x00000002,
1684 0x00006102,
1685 0x000013d9,
1686 0x00ebd477, 0xff4ce383, 0x0042049d,
1687 0x0089c278, 0xff54414d, 0x00531ded,
1688 0x004a5e07, 0xff53cf41, 0x006efbdc,
1689 0x00000002
1690};
1691
1692static u32 coef_44to192[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1693 0x000c6102,
1694 0x0001d727,
1695 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1696 0x00e55557, 0xffcadd5b, 0x003d80ba,
1697 0x00d13397, 0xfff232f8, 0x00683337,
1698 0x00000002,
1699 0x00186102,
1700 0x000013d9,
1701 0x00ebd477, 0xff4ce383, 0x0042049d,
1702 0x0089c278, 0xff54414d, 0x00531ded,
1703 0x004a5e07, 0xff53cf41, 0x006efbdc,
1704 0x00000002,
1705 0x00246102,
1706 0x0000010a,
1707 0x00c93dc4, 0xff26f5f6, 0x005d1041,
1708 0x001002c4, 0xff245b76, 0x00666002,
1709 0xffc30a45, 0xff1baecd, 0x00765921,
1710 0x00000002,
1711 0x00005204,
1712 0x000aaaab,
1713 0xffaaaaab,
1714 0xfffaaaab,
1715 0x00555555,
1716 0xff600000,
1717 0xfff55555,
1718 0x00155555,
1719 0x00055555,
1720 0xffeaaaab,
1721 0x00200000
1722};
1723
1724static u32 coef_48to8[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1725 0x000c9102,
1726 0x00000e00,
1727 0x00e2e000, 0xff6e1a00, 0x002aaa00,
1728 0x00610a00, 0xff5dda00, 0x003ccc00,
1729 0x00163a00, 0xff3c0400, 0x00633200,
1730 0x00000001,
1731 0x00005105,
1732 0x0000d649,
1733 0x00e87afb, 0xff5f69d0, 0x003df3cf,
1734 0x007ce488, 0xff99a5c8, 0x0056a6a0,
1735 0x00344928, 0xffcba3e5, 0x006be470,
1736 0x00137aa7, 0xffe60276, 0x00773410,
1737 0x0005fa2a, 0xfff1ac11, 0x007c795b,
1738 0x00012d36, 0xfff5eca2, 0x007f10ef,
1739 0x00000001
1740};
1741
1742static u32 coef_48to11[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1743 0x000c6102,
1744 0x000000af,
1745 0x00c65663, 0xff23d2ce, 0x005f97d6,
1746 0x00086ad6, 0xff20ec4f, 0x00683201,
1747 0xffbbbef6, 0xff184447, 0x00770963,
1748 0x00000002,
1749 0x00175204,
1750 0x000aaaab,
1751 0xffaaaaab,
1752 0xfffaaaab,
1753 0x00555555,
1754 0xff600000,
1755 0xfff55555,
1756 0x00155555,
1757 0x00055555,
1758 0xffeaaaab,
1759 0x00200000,
1760 0x00235102,
1761 0x000013d9,
1762 0x00ebd477, 0xff4ce383, 0x0042049d,
1763 0x0089c278, 0xff54414d, 0x00531ded,
1764 0x004a5e07, 0xff53cf41, 0x006efbdc,
1765 0x00000001,
1766 0x00005102,
1767 0x0001d727,
1768 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1769 0x00e55557, 0xffcadd5b, 0x003d80ba,
1770 0x00d13397, 0xfff232f8, 0x00683337,
1771 0x00000001
1772};
1773
1774static u32 coef_48to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1775 0x00009105,
1776 0x00000784,
1777 0x00cc516e, 0xff2c9639, 0x005ad5b3,
1778 0x0013ad0d, 0xff3d4799, 0x0063ce75,
1779 0xffb6f398, 0xff5138d1, 0x006e9e1f,
1780 0xff9186e5, 0xff5f96a4, 0x0076a86e,
1781 0xff82089c, 0xff676b81, 0x007b9f8a,
1782 0xff7c48a5, 0xff6a31e7, 0x007ebb7b,
1783 0x00000001
1784};
1785
1786static u32 coef_48to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1787 0x000f6103,
1788 0x000001e0,
1789 0x00de44c0, 0xff380b7f, 0x004ffc73,
1790 0x00494b44, 0xff3d493a, 0x005908bf,
1791 0xffe9a3c8, 0xff425647, 0x006745f7,
1792 0xffc42d61, 0xff40a6c7, 0x00776709,
1793 0x00000002,
1794 0x001a5204,
1795 0x000aaaab,
1796 0xffaaaaab,
1797 0xfffaaaab,
1798 0x00555555,
1799 0xff600000,
1800 0xfff55555,
1801 0x00155555,
1802 0x00055555,
1803 0xffeaaaab,
1804 0x00200000,
1805 0x00005102,
1806 0x0001d727,
1807 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1808 0x00e55557, 0xffcadd5b, 0x003d80ba,
1809 0x00d13397, 0xfff232f8, 0x00683337,
1810 0x00000001
1811};
1812
1813static u32 coef_48to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1814 0x00005102,
1815 0x0001d727,
1816 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1817 0x00e55557, 0xffcadd5b, 0x003d80ba,
1818 0x00d13397, 0xfff232f8, 0x00683337,
1819 0x00000001
1820};
1821
1822static u32 coef_48to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1823 0x00156105,
1824 0x00000292,
1825 0x00e4320a, 0xff41d2d9, 0x004911ac,
1826 0x005dd9e3, 0xff4c7d80, 0x0052103e,
1827 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
1828 0xffc4b414, 0xff68582c, 0x006b38e5,
1829 0xffabb861, 0xff704bec, 0x0074de52,
1830 0xffa19f4c, 0xff729059, 0x007c7e90,
1831 0x00000002,
1832 0x00009105,
1833 0x00000292,
1834 0x00e4320a, 0xff41d2d9, 0x004911ac,
1835 0x005dd9e3, 0xff4c7d80, 0x0052103e,
1836 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
1837 0xffc4b414, 0xff68582c, 0x006b38e5,
1838 0xffabb861, 0xff704bec, 0x0074de52,
1839 0xffa19f4c, 0xff729059, 0x007c7e90,
1840 0x00000001
1841};
1842
1843static u32 coef_48to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1844 0x000c6102,
1845 0x0001d029,
1846 0x00f2a98b, 0xff92aa71, 0x001fcd16,
1847 0x00ae9004, 0xffb85140, 0x0041813a,
1848 0x007f8ed1, 0xffd585fc, 0x006a69e6,
1849 0x00000002,
1850 0x001b6103,
1851 0x000001e0,
1852 0x00de44c0, 0xff380b7f, 0x004ffc73,
1853 0x00494b44, 0xff3d493a, 0x005908bf,
1854 0xffe9a3c8, 0xff425647, 0x006745f7,
1855 0xffc42d61, 0xff40a6c7, 0x00776709,
1856 0x00000002,
1857 0x00265204,
1858 0x000aaaab,
1859 0xffaaaaab,
1860 0xfffaaaab,
1861 0x00555555,
1862 0xff600000,
1863 0xfff55555,
1864 0x00155555,
1865 0x00055555,
1866 0xffeaaaab,
1867 0x00200000,
1868 0x00005102,
1869 0x0001d727,
1870 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1871 0x00e55557, 0xffcadd5b, 0x003d80ba,
1872 0x00d13397, 0xfff232f8, 0x00683337,
1873 0x00000001
1874};
1875
1876static u32 coef_48to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1877 0x000c6102,
1878 0x0001d727,
1879 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1880 0x00e55557, 0xffcadd5b, 0x003d80ba,
1881 0x00d13397, 0xfff232f8, 0x00683337,
1882 0x00000002,
1883 0x00186102,
1884 0x000013d9,
1885 0x00ebd477, 0xff4ce383, 0x0042049d,
1886 0x0089c278, 0xff54414d, 0x00531ded,
1887 0x004a5e07, 0xff53cf41, 0x006efbdc,
1888 0x00000002,
1889 0x00230204,
1890 0x000aaaab,
1891 0xffaaaaab,
1892 0xfffaaaab,
1893 0x00555555,
1894 0xff600000,
1895 0xfff55555,
1896 0x00155555,
1897 0x00055555,
1898 0xffeaaaab,
1899 0x00200000,
1900 0x00005102,
1901 0x00001685,
1902 0x00f53ae9, 0xff52f196, 0x003e3e08,
1903 0x00b9f857, 0xff5d8985, 0x0050070a,
1904 0x008c3e86, 0xff6053f0, 0x006d98ef,
1905 0x00000001
1906};
1907
1908static u32 coef_48to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1909 0x00006102,
1910 0x0001d727,
1911 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1912 0x00e55557, 0xffcadd5b, 0x003d80ba,
1913 0x00d13397, 0xfff232f8, 0x00683337,
1914 0x00000002
1915};
1916
1917static u32 coef_48to176[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1918 0x000c6102,
1919 0x0001d727,
1920 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1921 0x00e55557, 0xffcadd5b, 0x003d80ba,
1922 0x00d13397, 0xfff232f8, 0x00683337,
1923 0x00000002,
1924 0x00186102,
1925 0x000013d9,
1926 0x00ebd477, 0xff4ce383, 0x0042049d,
1927 0x0089c278, 0xff54414d, 0x00531ded,
1928 0x004a5e07, 0xff53cf41, 0x006efbdc,
1929 0x00000002,
1930 0x00246102,
1931 0x0000010a,
1932 0x00c93dc4, 0xff26f5f6, 0x005d1041,
1933 0x001002c4, 0xff245b76, 0x00666002,
1934 0xffc30a45, 0xff1baecd, 0x00765921,
1935 0x00000002,
1936 0x002f0204,
1937 0x000aaaab,
1938 0xffaaaaab,
1939 0xfffaaaab,
1940 0x00555555,
1941 0xff600000,
1942 0xfff55555,
1943 0x00155555,
1944 0x00055555,
1945 0xffeaaaab,
1946 0x00200000,
1947 0x00005102,
1948 0x00000138,
1949 0x00d5d232, 0xff2a3bf8, 0x005a785c,
1950 0x0034001b, 0xff283109, 0x006462a6,
1951 0xffe6746a, 0xff1fb09c, 0x00758a91,
1952 0x00000001
1953};
1954
1955static u32 coef_48to192[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1956 0x000c6102,
1957 0x0001d727,
1958 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1959 0x00e55557, 0xffcadd5b, 0x003d80ba,
1960 0x00d13397, 0xfff232f8, 0x00683337,
1961 0x00000002,
1962 0x00006102,
1963 0x000013d9,
1964 0x00ebd477, 0xff4ce383, 0x0042049d,
1965 0x0089c278, 0xff54414d, 0x00531ded,
1966 0x004a5e07, 0xff53cf41, 0x006efbdc,
1967 0x00000002
1968};
1969
1970static u32 coef_88to8[TEGRA210_SFC_COEF_RAM_DEPTH] = {
1971 0x000c0102,
1972 0x00000057,
1973 0x00a8e717, 0xff1c748d, 0x0065b976,
1974 0xffcbccab, 0xff190aff, 0x006cc1cf,
1975 0xff871ce1, 0xff10d878, 0x0078cfc5,
1976 0x00000001,
1977 0x00179204,
1978 0x000aaaab,
1979 0xffaaaaab,
1980 0xfffaaaab,
1981 0x00555555,
1982 0xff600000,
1983 0xfff55555,
1984 0x00155555,
1985 0x00055555,
1986 0xffeaaaab,
1987 0x00200000,
1988 0x00235102,
1989 0x000013d9,
1990 0x00ebd477, 0xff4ce383, 0x0042049d,
1991 0x0089c278, 0xff54414d, 0x00531ded,
1992 0x004a5e07, 0xff53cf41, 0x006efbdc,
1993 0x00000001,
1994 0x00005102,
1995 0x0001d727,
1996 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
1997 0x00e55557, 0xffcadd5b, 0x003d80ba,
1998 0x00d13397, 0xfff232f8, 0x00683337,
1999 0x00000001
2000};
2001
2002static u32 coef_88to11[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2003 0x000c5102,
2004 0x0000010a,
2005 0x00c93dc4, 0xff26f5f6, 0x005d1041,
2006 0x001002c4, 0xff245b76, 0x00666002,
2007 0xffc30a45, 0xff1baecd, 0x00765921,
2008 0x00000001,
2009 0x00185102,
2010 0x000013d9,
2011 0x00ebd477, 0xff4ce383, 0x0042049d,
2012 0x0089c278, 0xff54414d, 0x00531ded,
2013 0x004a5e07, 0xff53cf41, 0x006efbdc,
2014 0x00000001,
2015 0x00005102,
2016 0x0001d727,
2017 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2018 0x00e55557, 0xffcadd5b, 0x003d80ba,
2019 0x00d13397, 0xfff232f8, 0x00683337,
2020 0x00000001
2021};
2022
2023static u32 coef_88to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2024 0x000c0102,
2025 0x000005f3,
2026 0x00d816d6, 0xff385383, 0x004fe566,
2027 0x003c548d, 0xff38c23d, 0x005d0b1c,
2028 0xfff02f7d, 0xff31e983, 0x0072d65d,
2029 0x00000001,
2030 0x00179204,
2031 0x000aaaab,
2032 0xffaaaaab,
2033 0xfffaaaab,
2034 0x00555555,
2035 0xff600000,
2036 0xfff55555,
2037 0x00155555,
2038 0x00055555,
2039 0xffeaaaab,
2040 0x00200000,
2041 0x00005102,
2042 0x0001d727,
2043 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2044 0x00e55557, 0xffcadd5b, 0x003d80ba,
2045 0x00d13397, 0xfff232f8, 0x00683337,
2046 0x00000001
2047};
2048
2049static u32 coef_88to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2050 0x000c5102,
2051 0x000013d9,
2052 0x00ebd477, 0xff4ce383, 0x0042049d,
2053 0x0089c278, 0xff54414d, 0x00531ded,
2054 0x004a5e07, 0xff53cf41, 0x006efbdc,
2055 0x00000001,
2056 0x00005102,
2057 0x0001d727,
2058 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2059 0x00e55557, 0xffcadd5b, 0x003d80ba,
2060 0x00d13397, 0xfff232f8, 0x00683337,
2061 0x00000001
2062};
2063
2064static u32 coef_88to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2065 0x000c0102,
2066 0x00001685,
2067 0x00f53ae9, 0xff52f196, 0x003e3e08,
2068 0x00b9f857, 0xff5d8985, 0x0050070a,
2069 0x008c3e86, 0xff6053f0, 0x006d98ef,
2070 0x00000001,
2071 0x00175204,
2072 0x000aaaab,
2073 0xffaaaaab,
2074 0xfffaaaab,
2075 0x00555555,
2076 0xff600000,
2077 0xfff55555,
2078 0x00155555,
2079 0x00055555,
2080 0xffeaaaab,
2081 0x00200000,
2082 0x00005102,
2083 0x0001d727,
2084 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2085 0x00e55557, 0xffcadd5b, 0x003d80ba,
2086 0x00d13397, 0xfff232f8, 0x00683337,
2087 0x00000001
2088};
2089
2090static u32 coef_88to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2091 0x000c6102,
2092 0x000005f3,
2093 0x00d816d6, 0xff385383, 0x004fe566,
2094 0x003c548d, 0xff38c23d, 0x005d0b1c,
2095 0xfff02f7d, 0xff31e983, 0x0072d65d,
2096 0x00000002,
2097 0x00179204,
2098 0x000aaaab,
2099 0xffaaaaab,
2100 0xfffaaaab,
2101 0x00555555,
2102 0xff600000,
2103 0xfff55555,
2104 0x00155555,
2105 0x00055555,
2106 0xffeaaaab,
2107 0x00200000,
2108 0x00005102,
2109 0x0001d727,
2110 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2111 0x00e55557, 0xffcadd5b, 0x003d80ba,
2112 0x00d13397, 0xfff232f8, 0x00683337,
2113 0x00000001
2114};
2115
2116static u32 coef_88to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2117 0x00005102,
2118 0x0001d727,
2119 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2120 0x00e55557, 0xffcadd5b, 0x003d80ba,
2121 0x00d13397, 0xfff232f8, 0x00683337,
2122 0x00000001
2123};
2124
2125static u32 coef_88to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2126 0x000c6102,
2127 0x00001685,
2128 0x00f53ae9, 0xff52f196, 0x003e3e08,
2129 0x00b9f857, 0xff5d8985, 0x0050070a,
2130 0x008c3e86, 0xff6053f0, 0x006d98ef,
2131 0x00000002,
2132 0x00175204,
2133 0x000aaaab,
2134 0xffaaaaab,
2135 0xfffaaaab,
2136 0x00555555,
2137 0xff600000,
2138 0xfff55555,
2139 0x00155555,
2140 0x00055555,
2141 0xffeaaaab,
2142 0x00200000,
2143 0x00005102,
2144 0x0001d727,
2145 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2146 0x00e55557, 0xffcadd5b, 0x003d80ba,
2147 0x00d13397, 0xfff232f8, 0x00683337,
2148 0x00000001
2149};
2150
2151static u32 coef_88to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2152 0x000c6102,
2153 0x000013d9,
2154 0x00ebd477, 0xff4ce383, 0x0042049d,
2155 0x0089c278, 0xff54414d, 0x00531ded,
2156 0x004a5e07, 0xff53cf41, 0x006efbdc,
2157 0x00000002,
2158 0x00005204,
2159 0x000aaaab,
2160 0xffaaaaab,
2161 0xfffaaaab,
2162 0x00555555,
2163 0xff600000,
2164 0xfff55555,
2165 0x00155555,
2166 0x00055555,
2167 0xffeaaaab,
2168 0x00200000
2169};
2170
2171static u32 coef_88to176[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2172 0x00006102,
2173 0x000013d9,
2174 0x00ebd477, 0xff4ce383, 0x0042049d,
2175 0x0089c278, 0xff54414d, 0x00531ded,
2176 0x004a5e07, 0xff53cf41, 0x006efbdc,
2177 0x00000002
2178};
2179
2180static u32 coef_88to192[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2181 0x000c6102,
2182 0x000013d9,
2183 0x00ebd477, 0xff4ce383, 0x0042049d,
2184 0x0089c278, 0xff54414d, 0x00531ded,
2185 0x004a5e07, 0xff53cf41, 0x006efbdc,
2186 0x00000002,
2187 0x00186102,
2188 0x0000010a,
2189 0x00c93dc4, 0xff26f5f6, 0x005d1041,
2190 0x001002c4, 0xff245b76, 0x00666002,
2191 0xffc30a45, 0xff1baecd, 0x00765921,
2192 0x00000002,
2193 0x00005204,
2194 0x000aaaab,
2195 0xffaaaaab,
2196 0xfffaaaab,
2197 0x00555555,
2198 0xff600000,
2199 0xfff55555,
2200 0x00155555,
2201 0x00055555,
2202 0xffeaaaab,
2203 0x00200000
2204};
2205
2206static u32 coef_96to8[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2207 0x000c9102,
2208 0x0000007d,
2209 0x007d1f20, 0xff1a540e, 0x00678bf9,
2210 0xff916625, 0xff16b0ff, 0x006e433a,
2211 0xff5af660, 0xff0eb91f, 0x00797356,
2212 0x00000001,
2213 0x00185102,
2214 0x000013d9,
2215 0x00ebd477, 0xff4ce383, 0x0042049d,
2216 0x0089c278, 0xff54414d, 0x00531ded,
2217 0x004a5e07, 0xff53cf41, 0x006efbdc,
2218 0x00000001,
2219 0x00005102,
2220 0x0001d727,
2221 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2222 0x00e55557, 0xffcadd5b, 0x003d80ba,
2223 0x00d13397, 0xfff232f8, 0x00683337,
2224 0x00000001
2225};
2226
2227static u32 coef_96to11[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2228 0x000c0102,
2229 0x000000af,
2230 0x00c65663, 0xff23d2ce, 0x005f97d6,
2231 0x00086ad6, 0xff20ec4f, 0x00683201,
2232 0xffbbbef6, 0xff184447, 0x00770963,
2233 0x00000001,
2234 0x00175204,
2235 0x000aaaab,
2236 0xffaaaaab,
2237 0xfffaaaab,
2238 0x00555555,
2239 0xff600000,
2240 0xfff55555,
2241 0x00155555,
2242 0x00055555,
2243 0xffeaaaab,
2244 0x00200000,
2245 0x00235102,
2246 0x000013d9,
2247 0x00ebd477, 0xff4ce383, 0x0042049d,
2248 0x0089c278, 0xff54414d, 0x00531ded,
2249 0x004a5e07, 0xff53cf41, 0x006efbdc,
2250 0x00000001,
2251 0x00005102,
2252 0x0001d727,
2253 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2254 0x00e55557, 0xffcadd5b, 0x003d80ba,
2255 0x00d13397, 0xfff232f8, 0x00683337,
2256 0x00000001
2257};
2258
2259static u32 coef_96to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2260 0x000c9102,
2261 0x000005d6,
2262 0x00c6543e, 0xff342935, 0x0052f116,
2263 0x000a1d78, 0xff3330c0, 0x005f88a3,
2264 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
2265 0x00000001,
2266 0x00005102,
2267 0x0001d727,
2268 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2269 0x00e55557, 0xffcadd5b, 0x003d80ba,
2270 0x00d13397, 0xfff232f8, 0x00683337,
2271 0x00000001
2272};
2273
2274static u32 coef_96to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2275 0x000c6102,
2276 0x000000af,
2277 0x00c65663, 0xff23d2ce, 0x005f97d6,
2278 0x00086ad6, 0xff20ec4f, 0x00683201,
2279 0xffbbbef6, 0xff184447, 0x00770963,
2280 0x00000002,
2281 0x00175204,
2282 0x000aaaab,
2283 0xffaaaaab,
2284 0xfffaaaab,
2285 0x00555555,
2286 0xff600000,
2287 0xfff55555,
2288 0x00155555,
2289 0x00055555,
2290 0xffeaaaab,
2291 0x00200000,
2292 0x00235102,
2293 0x000013d9,
2294 0x00ebd477, 0xff4ce383, 0x0042049d,
2295 0x0089c278, 0xff54414d, 0x00531ded,
2296 0x004a5e07, 0xff53cf41, 0x006efbdc,
2297 0x00000001,
2298 0x00005102,
2299 0x0001d727,
2300 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2301 0x00e55557, 0xffcadd5b, 0x003d80ba,
2302 0x00d13397, 0xfff232f8, 0x00683337,
2303 0x00000001
2304};
2305
2306static u32 coef_96to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2307 0x000c5102,
2308 0x000013d9,
2309 0x00ebd477, 0xff4ce383, 0x0042049d,
2310 0x0089c278, 0xff54414d, 0x00531ded,
2311 0x004a5e07, 0xff53cf41, 0x006efbdc,
2312 0x00000001,
2313 0x00005102,
2314 0x0001d727,
2315 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2316 0x00e55557, 0xffcadd5b, 0x003d80ba,
2317 0x00d13397, 0xfff232f8, 0x00683337,
2318 0x00000001
2319};
2320
2321static u32 coef_96to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2322 0x00009105,
2323 0x00000292,
2324 0x00e4320a, 0xff41d2d9, 0x004911ac,
2325 0x005dd9e3, 0xff4c7d80, 0x0052103e,
2326 0xfff8ebef, 0xff5b6fab, 0x005f0a0d,
2327 0xffc4b414, 0xff68582c, 0x006b38e5,
2328 0xffabb861, 0xff704bec, 0x0074de52,
2329 0xffa19f4c, 0xff729059, 0x007c7e90,
2330 0x00000001
2331};
2332
2333static u32 coef_96to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2334 0x000f6103,
2335 0x000001e0,
2336 0x00de44c0, 0xff380b7f, 0x004ffc73,
2337 0x00494b44, 0xff3d493a, 0x005908bf,
2338 0xffe9a3c8, 0xff425647, 0x006745f7,
2339 0xffc42d61, 0xff40a6c7, 0x00776709,
2340 0x00000002,
2341 0x001a5204,
2342 0x000aaaab,
2343 0xffaaaaab,
2344 0xfffaaaab,
2345 0x00555555,
2346 0xff600000,
2347 0xfff55555,
2348 0x00155555,
2349 0x00055555,
2350 0xffeaaaab,
2351 0x00200000,
2352 0x00005102,
2353 0x0001d727,
2354 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2355 0x00e55557, 0xffcadd5b, 0x003d80ba,
2356 0x00d13397, 0xfff232f8, 0x00683337,
2357 0x00000001
2358};
2359
2360static u32 coef_96to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2361 0x00005102,
2362 0x0001d727,
2363 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2364 0x00e55557, 0xffcadd5b, 0x003d80ba,
2365 0x00d13397, 0xfff232f8, 0x00683337,
2366 0x00000001
2367};
2368
2369static u32 coef_96to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2370 0x000f6103,
2371 0x000001e0,
2372 0x00de44c0, 0xff380b7f, 0x004ffc73,
2373 0x00494b44, 0xff3d493a, 0x005908bf,
2374 0xffe9a3c8, 0xff425647, 0x006745f7,
2375 0xffc42d61, 0xff40a6c7, 0x00776709,
2376 0x00000002,
2377 0x001a0204,
2378 0x000aaaab,
2379 0xffaaaaab,
2380 0xfffaaaab,
2381 0x00555555,
2382 0xff600000,
2383 0xfff55555,
2384 0x00155555,
2385 0x00055555,
2386 0xffeaaaab,
2387 0x00200000,
2388 0x00005102,
2389 0x000013d9,
2390 0x00ebd477, 0xff4ce383, 0x0042049d,
2391 0x0089c278, 0xff54414d, 0x00531ded,
2392 0x004a5e07, 0xff53cf41, 0x006efbdc,
2393 0x00000001
2394};
2395
2396static u32 coef_96to176[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2397 0x000f6103,
2398 0x000001e0,
2399 0x00de44c0, 0xff380b7f, 0x004ffc73,
2400 0x00494b44, 0xff3d493a, 0x005908bf,
2401 0xffe9a3c8, 0xff425647, 0x006745f7,
2402 0xffc42d61, 0xff40a6c7, 0x00776709,
2403 0x00000002,
2404 0x001b6102,
2405 0x000000af,
2406 0x00c65663, 0xff23d2ce, 0x005f97d6,
2407 0x00086ad6, 0xff20ec4f, 0x00683201,
2408 0xffbbbef6, 0xff184447, 0x00770963,
2409 0x00000002,
2410 0x00260204,
2411 0x000aaaab,
2412 0xffaaaaab,
2413 0xfffaaaab,
2414 0x00555555,
2415 0xff600000,
2416 0xfff55555,
2417 0x00155555,
2418 0x00055555,
2419 0xffeaaaab,
2420 0x00200000,
2421 0x00005102,
2422 0x0000010a,
2423 0x00c93dc4, 0xff26f5f6, 0x005d1041,
2424 0x001002c4, 0xff245b76, 0x00666002,
2425 0xffc30a45, 0xff1baecd, 0x00765921,
2426 0x00000001
2427};
2428
2429static u32 coef_96to192[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2430 0x00006103,
2431 0x000001e0,
2432 0x00de44c0, 0xff380b7f, 0x004ffc73,
2433 0x00494b44, 0xff3d493a, 0x005908bf,
2434 0xffe9a3c8, 0xff425647, 0x006745f7,
2435 0xffc42d61, 0xff40a6c7, 0x00776709,
2436 0x00000002
2437};
2438
2439static u32 coef_176to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2440 0x000c0102,
2441 0x00000057,
2442 0x00a8e717, 0xff1c748d, 0x0065b976,
2443 0xffcbccab, 0xff190aff, 0x006cc1cf,
2444 0xff871ce1, 0xff10d878, 0x0078cfc5,
2445 0x00000001,
2446 0x00179204,
2447 0x000aaaab,
2448 0xffaaaaab,
2449 0xfffaaaab,
2450 0x00555555,
2451 0xff600000,
2452 0xfff55555,
2453 0x00155555,
2454 0x00055555,
2455 0xffeaaaab,
2456 0x00200000,
2457 0x00235102,
2458 0x000013d9,
2459 0x00ebd477, 0xff4ce383, 0x0042049d,
2460 0x0089c278, 0xff54414d, 0x00531ded,
2461 0x004a5e07, 0xff53cf41, 0x006efbdc,
2462 0x00000001,
2463 0x00005102,
2464 0x0001d727,
2465 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2466 0x00e55557, 0xffcadd5b, 0x003d80ba,
2467 0x00d13397, 0xfff232f8, 0x00683337,
2468 0x00000001
2469};
2470
2471static u32 coef_176to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2472 0x000c5102,
2473 0x0000010a,
2474 0x00c93dc4, 0xff26f5f6, 0x005d1041,
2475 0x001002c4, 0xff245b76, 0x00666002,
2476 0xffc30a45, 0xff1baecd, 0x00765921,
2477 0x00000001,
2478 0x00185102,
2479 0x000013d9,
2480 0x00ebd477, 0xff4ce383, 0x0042049d,
2481 0x0089c278, 0xff54414d, 0x00531ded,
2482 0x004a5e07, 0xff53cf41, 0x006efbdc,
2483 0x00000001,
2484 0x00005102,
2485 0x0001d727,
2486 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2487 0x00e55557, 0xffcadd5b, 0x003d80ba,
2488 0x00d13397, 0xfff232f8, 0x00683337,
2489 0x00000001
2490};
2491
2492static u32 coef_176to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2493 0x000c0102,
2494 0x00000138,
2495 0x00d5d232, 0xff2a3bf8, 0x005a785c,
2496 0x0034001b, 0xff283109, 0x006462a6,
2497 0xffe6746a, 0xff1fb09c, 0x00758a91,
2498 0x00000001,
2499 0x00175204,
2500 0x000aaaab,
2501 0xffaaaaab,
2502 0xfffaaaab,
2503 0x00555555,
2504 0xff600000,
2505 0xfff55555,
2506 0x00155555,
2507 0x00055555,
2508 0xffeaaaab,
2509 0x00200000,
2510 0x00235102,
2511 0x000013d9,
2512 0x00ebd477, 0xff4ce383, 0x0042049d,
2513 0x0089c278, 0xff54414d, 0x00531ded,
2514 0x004a5e07, 0xff53cf41, 0x006efbdc,
2515 0x00000001,
2516 0x00005102,
2517 0x0001d727,
2518 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2519 0x00e55557, 0xffcadd5b, 0x003d80ba,
2520 0x00d13397, 0xfff232f8, 0x00683337,
2521 0x00000001
2522};
2523
2524static u32 coef_176to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2525 0x000c0102,
2526 0x000005f3,
2527 0x00d816d6, 0xff385383, 0x004fe566,
2528 0x003c548d, 0xff38c23d, 0x005d0b1c,
2529 0xfff02f7d, 0xff31e983, 0x0072d65d,
2530 0x00000001,
2531 0x00179204,
2532 0x000aaaab,
2533 0xffaaaaab,
2534 0xfffaaaab,
2535 0x00555555,
2536 0xff600000,
2537 0xfff55555,
2538 0x00155555,
2539 0x00055555,
2540 0xffeaaaab,
2541 0x00200000,
2542 0x00005102,
2543 0x0001d727,
2544 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2545 0x00e55557, 0xffcadd5b, 0x003d80ba,
2546 0x00d13397, 0xfff232f8, 0x00683337,
2547 0x00000001
2548};
2549
2550static u32 coef_176to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2551 0x000c5102,
2552 0x000013d9,
2553 0x00ebd477, 0xff4ce383, 0x0042049d,
2554 0x0089c278, 0xff54414d, 0x00531ded,
2555 0x004a5e07, 0xff53cf41, 0x006efbdc,
2556 0x00000001,
2557 0x00005102,
2558 0x0001d727,
2559 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2560 0x00e55557, 0xffcadd5b, 0x003d80ba,
2561 0x00d13397, 0xfff232f8, 0x00683337,
2562 0x00000001
2563};
2564
2565static u32 coef_176to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2566 0x000c0102,
2567 0x00001685,
2568 0x00f53ae9, 0xff52f196, 0x003e3e08,
2569 0x00b9f857, 0xff5d8985, 0x0050070a,
2570 0x008c3e86, 0xff6053f0, 0x006d98ef,
2571 0x00000001,
2572 0x00175204,
2573 0x000aaaab,
2574 0xffaaaaab,
2575 0xfffaaaab,
2576 0x00555555,
2577 0xff600000,
2578 0xfff55555,
2579 0x00155555,
2580 0x00055555,
2581 0xffeaaaab,
2582 0x00200000,
2583 0x00005102,
2584 0x0001d727,
2585 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2586 0x00e55557, 0xffcadd5b, 0x003d80ba,
2587 0x00d13397, 0xfff232f8, 0x00683337,
2588 0x00000001
2589};
2590
2591static u32 coef_176to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2592 0x00005102,
2593 0x000013d9,
2594 0x00ebd477, 0xff4ce383, 0x0042049d,
2595 0x0089c278, 0xff54414d, 0x00531ded,
2596 0x004a5e07, 0xff53cf41, 0x006efbdc,
2597 0x00000001
2598};
2599
2600static u32 coef_176to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2601 0x000c6102,
2602 0x0000010a,
2603 0x00c93dc4, 0xff26f5f6, 0x005d1041,
2604 0x001002c4, 0xff245b76, 0x00666002,
2605 0xffc30a45, 0xff1baecd, 0x00765921,
2606 0x00000002,
2607 0x00175204,
2608 0x000aaaab,
2609 0xffaaaaab,
2610 0xfffaaaab,
2611 0x00555555,
2612 0xff600000,
2613 0xfff55555,
2614 0x00155555,
2615 0x00055555,
2616 0xffeaaaab,
2617 0x00200000,
2618 0x00005103,
2619 0x000001e0,
2620 0x00de44c0, 0xff380b7f, 0x004ffc73,
2621 0x00494b44, 0xff3d493a, 0x005908bf,
2622 0xffe9a3c8, 0xff425647, 0x006745f7,
2623 0xffc42d61, 0xff40a6c7, 0x00776709,
2624 0x00000001
2625};
2626
2627static u32 coef_176to192[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2628 0x000c6102,
2629 0x0000010a,
2630 0x00c93dc4, 0xff26f5f6, 0x005d1041,
2631 0x001002c4, 0xff245b76, 0x00666002,
2632 0xffc30a45, 0xff1baecd, 0x00765921,
2633 0x00000002,
2634 0x00005204,
2635 0x000aaaab,
2636 0xffaaaaab,
2637 0xfffaaaab,
2638 0x00555555,
2639 0xff600000,
2640 0xfff55555,
2641 0x00155555,
2642 0x00055555,
2643 0xffeaaaab,
2644 0x00200000
2645};
2646
2647static u32 coef_192to16[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2648 0x000c9102,
2649 0x0000007d,
2650 0x007d1f20, 0xff1a540e, 0x00678bf9,
2651 0xff916625, 0xff16b0ff, 0x006e433a,
2652 0xff5af660, 0xff0eb91f, 0x00797356,
2653 0x00000001,
2654 0x00185102,
2655 0x000013d9,
2656 0x00ebd477, 0xff4ce383, 0x0042049d,
2657 0x0089c278, 0xff54414d, 0x00531ded,
2658 0x004a5e07, 0xff53cf41, 0x006efbdc,
2659 0x00000001,
2660 0x00005102,
2661 0x0001d727,
2662 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2663 0x00e55557, 0xffcadd5b, 0x003d80ba,
2664 0x00d13397, 0xfff232f8, 0x00683337,
2665 0x00000001
2666};
2667
2668static u32 coef_192to22[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2669 0x000c0102,
2670 0x000000af,
2671 0x00c65663, 0xff23d2ce, 0x005f97d6,
2672 0x00086ad6, 0xff20ec4f, 0x00683201,
2673 0xffbbbef6, 0xff184447, 0x00770963,
2674 0x00000001,
2675 0x00175204,
2676 0x000aaaab,
2677 0xffaaaaab,
2678 0xfffaaaab,
2679 0x00555555,
2680 0xff600000,
2681 0xfff55555,
2682 0x00155555,
2683 0x00055555,
2684 0xffeaaaab,
2685 0x00200000,
2686 0x00235102,
2687 0x000013d9,
2688 0x00ebd477, 0xff4ce383, 0x0042049d,
2689 0x0089c278, 0xff54414d, 0x00531ded,
2690 0x004a5e07, 0xff53cf41, 0x006efbdc,
2691 0x00000001,
2692 0x00005102,
2693 0x0001d727,
2694 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2695 0x00e55557, 0xffcadd5b, 0x003d80ba,
2696 0x00d13397, 0xfff232f8, 0x00683337,
2697 0x00000001
2698};
2699
2700static u32 coef_192to24[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2701 0x000c5102,
2702 0x0000010a,
2703 0x00c93dc4, 0xff26f5f6, 0x005d1041,
2704 0x001002c4, 0xff245b76, 0x00666002,
2705 0xffc30a45, 0xff1baecd, 0x00765921,
2706 0x00000001,
2707 0x00185102,
2708 0x000013d9,
2709 0x00ebd477, 0xff4ce383, 0x0042049d,
2710 0x0089c278, 0xff54414d, 0x00531ded,
2711 0x004a5e07, 0xff53cf41, 0x006efbdc,
2712 0x00000001,
2713 0x00005102,
2714 0x0001d727,
2715 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2716 0x00e55557, 0xffcadd5b, 0x003d80ba,
2717 0x00d13397, 0xfff232f8, 0x00683337,
2718 0x00000001
2719};
2720
2721static u32 coef_192to32[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2722 0x000c9102,
2723 0x000005d6,
2724 0x00c6543e, 0xff342935, 0x0052f116,
2725 0x000a1d78, 0xff3330c0, 0x005f88a3,
2726 0xffbee7c0, 0xff2b5ba5, 0x0073eb26,
2727 0x00000001,
2728 0x00005102,
2729 0x0001d727,
2730 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2731 0x00e55557, 0xffcadd5b, 0x003d80ba,
2732 0x00d13397, 0xfff232f8, 0x00683337,
2733 0x00000001
2734};
2735
2736static u32 coef_192to44[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2737 0x000c6102,
2738 0x000000af,
2739 0x00c65663, 0xff23d2ce, 0x005f97d6,
2740 0x00086ad6, 0xff20ec4f, 0x00683201,
2741 0xffbbbef6, 0xff184447, 0x00770963,
2742 0x00000002,
2743 0x00175204,
2744 0x000aaaab,
2745 0xffaaaaab,
2746 0xfffaaaab,
2747 0x00555555,
2748 0xff600000,
2749 0xfff55555,
2750 0x00155555,
2751 0x00055555,
2752 0xffeaaaab,
2753 0x00200000,
2754 0x00235102,
2755 0x000013d9,
2756 0x00ebd477, 0xff4ce383, 0x0042049d,
2757 0x0089c278, 0xff54414d, 0x00531ded,
2758 0x004a5e07, 0xff53cf41, 0x006efbdc,
2759 0x00000001,
2760 0x00005102,
2761 0x0001d727,
2762 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2763 0x00e55557, 0xffcadd5b, 0x003d80ba,
2764 0x00d13397, 0xfff232f8, 0x00683337,
2765 0x00000001
2766};
2767
2768static u32 coef_192to48[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2769 0x000c5102,
2770 0x000013d9,
2771 0x00ebd477, 0xff4ce383, 0x0042049d,
2772 0x0089c278, 0xff54414d, 0x00531ded,
2773 0x004a5e07, 0xff53cf41, 0x006efbdc,
2774 0x00000001,
2775 0x00005102,
2776 0x0001d727,
2777 0x00fc2fc7, 0xff9bb27b, 0x001c564c,
2778 0x00e55557, 0xffcadd5b, 0x003d80ba,
2779 0x00d13397, 0xfff232f8, 0x00683337,
2780 0x00000001
2781};
2782
2783static u32 coef_192to88[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2784 0x000c6102,
2785 0x000000af,
2786 0x00c65663, 0xff23d2ce, 0x005f97d6,
2787 0x00086ad6, 0xff20ec4f, 0x00683201,
2788 0xffbbbef6, 0xff184447, 0x00770963,
2789 0x00000002,
2790 0x00175204,
2791 0x000aaaab,
2792 0xffaaaaab,
2793 0xfffaaaab,
2794 0x00555555,
2795 0xff600000,
2796 0xfff55555,
2797 0x00155555,
2798 0x00055555,
2799 0xffeaaaab,
2800 0x00200000,
2801 0x00005102,
2802 0x000013d9,
2803 0x00ebd477, 0xff4ce383, 0x0042049d,
2804 0x0089c278, 0xff54414d, 0x00531ded,
2805 0x004a5e07, 0xff53cf41, 0x006efbdc,
2806 0x00000001
2807};
2808
2809static u32 coef_192to96[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2810 0x00005103,
2811 0x000001e0,
2812 0x00de44c0, 0xff380b7f, 0x004ffc73,
2813 0x00494b44, 0xff3d493a, 0x005908bf,
2814 0xffe9a3c8, 0xff425647, 0x006745f7,
2815 0xffc42d61, 0xff40a6c7, 0x00776709,
2816 0x00000001
2817};
2818
2819static u32 coef_192to176[TEGRA210_SFC_COEF_RAM_DEPTH] = {
2820 0x000c6102,
2821 0x000000af,
2822 0x00c65663, 0xff23d2ce, 0x005f97d6,
2823 0x00086ad6, 0xff20ec4f, 0x00683201,
2824 0xffbbbef6, 0xff184447, 0x00770963,
2825 0x00000002,
2826 0x00170204,
2827 0x000aaaab,
2828 0xffaaaaab,
2829 0xfffaaaab,
2830 0x00555555,
2831 0xff600000,
2832 0xfff55555,
2833 0x00155555,
2834 0x00055555,
2835 0xffeaaaab,
2836 0x00200000,
2837 0x00005102,
2838 0x0000010a,
2839 0x00c93dc4, 0xff26f5f6, 0x005d1041,
2840 0x001002c4, 0xff245b76, 0x00666002,
2841 0xffc30a45, 0xff1baecd, 0x00765921,
2842 0x00000001
2843};
2844
2845
2846
2847
2848
2849static s32 *coef_addr_table[TEGRA210_SFC_NUM_RATES][TEGRA210_SFC_NUM_RATES] = {
2850
2851 {
2852 BYPASS_CONV,
2853 coef_8to11,
2854 coef_8to16,
2855 coef_8to22,
2856 coef_8to24,
2857 coef_8to32,
2858 coef_8to44,
2859 coef_8to48,
2860 coef_8to88,
2861 coef_8to96,
2862 UNSUPP_CONV,
2863 UNSUPP_CONV,
2864 },
2865
2866 {
2867 coef_11to8,
2868 BYPASS_CONV,
2869 coef_11to16,
2870 coef_11to22,
2871 coef_11to24,
2872 coef_11to32,
2873 coef_11to44,
2874 coef_11to48,
2875 coef_11to88,
2876 coef_11to96,
2877 UNSUPP_CONV,
2878 UNSUPP_CONV,
2879 },
2880
2881 {
2882 coef_16to8,
2883 coef_16to11,
2884 BYPASS_CONV,
2885 coef_16to22,
2886 coef_16to24,
2887 coef_16to32,
2888 coef_16to44,
2889 coef_16to48,
2890 coef_16to88,
2891 coef_16to96,
2892 coef_16to176,
2893 coef_16to192,
2894 },
2895
2896 {
2897 coef_22to8,
2898 coef_22to11,
2899 coef_22to16,
2900 BYPASS_CONV,
2901 coef_22to24,
2902 coef_22to32,
2903 coef_22to44,
2904 coef_22to48,
2905 coef_22to88,
2906 coef_22to96,
2907 coef_22to176,
2908 coef_22to192,
2909 },
2910
2911 {
2912 coef_24to8,
2913 coef_24to11,
2914 coef_24to16,
2915 coef_24to22,
2916 BYPASS_CONV,
2917 coef_24to32,
2918 coef_24to44,
2919 coef_24to48,
2920 coef_24to88,
2921 coef_24to96,
2922 coef_24to176,
2923 coef_24to192,
2924 },
2925
2926 {
2927 coef_32to8,
2928 coef_32to11,
2929 coef_32to16,
2930 coef_32to22,
2931 coef_32to24,
2932 BYPASS_CONV,
2933 coef_32to44,
2934 coef_32to48,
2935 coef_32to88,
2936 coef_32to96,
2937 coef_32to176,
2938 coef_32to192,
2939 },
2940
2941 {
2942 coef_44to8,
2943 coef_44to11,
2944 coef_44to16,
2945 coef_44to22,
2946 coef_44to24,
2947 coef_44to32,
2948 BYPASS_CONV,
2949 coef_44to48,
2950 coef_44to88,
2951 coef_44to96,
2952 coef_44to176,
2953 coef_44to192,
2954 },
2955
2956 {
2957 coef_48to8,
2958 coef_48to11,
2959 coef_48to16,
2960 coef_48to22,
2961 coef_48to24,
2962 coef_48to32,
2963 coef_48to44,
2964 BYPASS_CONV,
2965 coef_48to88,
2966 coef_48to96,
2967 coef_48to176,
2968 coef_48to192,
2969 },
2970
2971 {
2972 coef_88to8,
2973 coef_88to11,
2974 coef_88to16,
2975 coef_88to22,
2976 coef_88to24,
2977 coef_88to32,
2978 coef_88to44,
2979 coef_88to48,
2980 BYPASS_CONV,
2981 coef_88to96,
2982 coef_88to176,
2983 coef_88to192,
2984 },
2985
2986 { coef_96to8,
2987 coef_96to11,
2988 coef_96to16,
2989 coef_96to22,
2990 coef_96to24,
2991 coef_96to32,
2992 coef_96to44,
2993 coef_96to48,
2994 coef_96to88,
2995 BYPASS_CONV,
2996 coef_96to176,
2997 coef_96to192,
2998 },
2999
3000 {
3001 UNSUPP_CONV,
3002 UNSUPP_CONV,
3003 coef_176to16,
3004 coef_176to22,
3005 coef_176to24,
3006 coef_176to32,
3007 coef_176to44,
3008 coef_176to48,
3009 coef_176to88,
3010 coef_176to96,
3011 BYPASS_CONV,
3012 coef_176to192,
3013 },
3014
3015 {
3016 UNSUPP_CONV,
3017 UNSUPP_CONV,
3018 coef_192to16,
3019 coef_192to22,
3020 coef_192to24,
3021 coef_192to32,
3022 coef_192to44,
3023 coef_192to48,
3024 coef_192to88,
3025 coef_192to96,
3026 coef_192to176,
3027 BYPASS_CONV,
3028 },
3029};
3030
3031static int __maybe_unused tegra210_sfc_runtime_suspend(struct device *dev)
3032{
3033 struct tegra210_sfc *sfc = dev_get_drvdata(dev);
3034
3035 regcache_cache_only(sfc->regmap, true);
3036 regcache_mark_dirty(sfc->regmap);
3037
3038 return 0;
3039}
3040
3041static int __maybe_unused tegra210_sfc_runtime_resume(struct device *dev)
3042{
3043 struct tegra210_sfc *sfc = dev_get_drvdata(dev);
3044
3045 regcache_cache_only(sfc->regmap, false);
3046 regcache_sync(sfc->regmap);
3047
3048 return 0;
3049}
3050
3051static inline void tegra210_sfc_write_ram(struct regmap *regmap,
3052 s32 *data)
3053{
3054 int i;
3055
3056 regmap_write(regmap, TEGRA210_SFC_CFG_RAM_CTRL,
3057 TEGRA210_SFC_RAM_CTRL_SEQ_ACCESS_EN |
3058 TEGRA210_SFC_RAM_CTRL_ADDR_INIT_EN |
3059 TEGRA210_SFC_RAM_CTRL_RW_WRITE);
3060
3061 for (i = 0; i < TEGRA210_SFC_COEF_RAM_DEPTH; i++)
3062 regmap_write(regmap, TEGRA210_SFC_CFG_RAM_DATA, data[i]);
3063}
3064
3065static int tegra210_sfc_write_coeff_ram(struct snd_soc_component *cmpnt)
3066{
3067 struct tegra210_sfc *sfc = dev_get_drvdata(cmpnt->dev);
3068 s32 *coeff_ram;
3069
3070
3071 if (sfc->srate_in == sfc->srate_out)
3072 return 0;
3073
3074 coeff_ram = coef_addr_table[sfc->srate_in][sfc->srate_out];
3075 if (IS_ERR_OR_NULL(coeff_ram)) {
3076 dev_err(cmpnt->dev,
3077 "Conversion from %d to %d Hz is not supported\n",
3078 sfc->srate_in, sfc->srate_out);
3079
3080 return PTR_ERR_OR_ZERO(coeff_ram);
3081 }
3082
3083 tegra210_sfc_write_ram(sfc->regmap, coeff_ram);
3084
3085 regmap_update_bits(sfc->regmap,
3086 TEGRA210_SFC_COEF_RAM,
3087 TEGRA210_SFC_COEF_RAM_EN,
3088 TEGRA210_SFC_COEF_RAM_EN);
3089
3090 return 0;
3091}
3092
3093static int tegra210_sfc_set_audio_cif(struct tegra210_sfc *sfc,
3094 struct snd_pcm_hw_params *params,
3095 unsigned int reg)
3096{
3097 unsigned int channels, audio_bits, path;
3098 struct tegra_cif_conf cif_conf;
3099
3100 memset(&cif_conf, 0, sizeof(struct tegra_cif_conf));
3101
3102 channels = params_channels(params);
3103
3104 switch (params_format(params)) {
3105 case SNDRV_PCM_FORMAT_S16_LE:
3106 audio_bits = TEGRA_ACIF_BITS_16;
3107 break;
3108 case SNDRV_PCM_FORMAT_S32_LE:
3109 audio_bits = TEGRA_ACIF_BITS_32;
3110 break;
3111 default:
3112 return -EOPNOTSUPP;
3113 }
3114
3115 cif_conf.audio_ch = channels;
3116 cif_conf.client_ch = channels;
3117 cif_conf.audio_bits = audio_bits;
3118 cif_conf.client_bits = TEGRA_ACIF_BITS_32;
3119
3120 if (reg == TEGRA210_SFC_RX_CIF_CTRL)
3121 path = SFC_RX_PATH;
3122 else
3123 path = SFC_TX_PATH;
3124
3125 cif_conf.stereo_conv = sfc->stereo_to_mono[path];
3126 cif_conf.mono_conv = sfc->mono_to_stereo[path];
3127
3128 tegra_set_cif(sfc->regmap, reg, &cif_conf);
3129
3130 return 0;
3131}
3132
3133static int tegra210_sfc_soft_reset(struct tegra210_sfc *sfc)
3134{
3135 u32 val;
3136
3137
3138
3139
3140
3141
3142
3143 regmap_update_bits(sfc->regmap, TEGRA210_SFC_SOFT_RESET,
3144 TEGRA210_SFC_SOFT_RESET_EN, 1);
3145
3146 return regmap_read_poll_timeout(sfc->regmap,
3147 TEGRA210_SFC_SOFT_RESET,
3148 val,
3149 !(val & TEGRA210_SFC_SOFT_RESET_EN),
3150 10, 10000);
3151}
3152
3153static int tegra210_sfc_rate_to_idx(struct device *dev, int rate,
3154 int *rate_idx)
3155{
3156 int i;
3157
3158 for (i = 0; i < ARRAY_SIZE(tegra210_sfc_rates); i++) {
3159 if (rate == tegra210_sfc_rates[i]) {
3160 *rate_idx = i;
3161
3162 return 0;
3163 }
3164 }
3165
3166 dev_err(dev, "Sample rate %d Hz is not supported\n", rate);
3167
3168 return -EOPNOTSUPP;
3169}
3170
3171static int tegra210_sfc_startup(struct snd_pcm_substream *substream,
3172 struct snd_soc_dai *dai)
3173{
3174 struct tegra210_sfc *sfc = snd_soc_dai_get_drvdata(dai);
3175 int err;
3176
3177 regmap_update_bits(sfc->regmap, TEGRA210_SFC_COEF_RAM,
3178 TEGRA210_SFC_COEF_RAM_EN, 0);
3179
3180 err = tegra210_sfc_soft_reset(sfc);
3181 if (err < 0) {
3182 dev_err(dai->dev, "Failed to reset SFC in %s, err = %d\n",
3183 __func__, err);
3184
3185 return err;
3186 }
3187
3188 return 0;
3189}
3190
3191static int tegra210_sfc_in_hw_params(struct snd_pcm_substream *substream,
3192 struct snd_pcm_hw_params *params,
3193 struct snd_soc_dai *dai)
3194{
3195 struct tegra210_sfc *sfc = snd_soc_dai_get_drvdata(dai);
3196 struct device *dev = dai->dev;
3197 int err;
3198
3199 err = tegra210_sfc_rate_to_idx(dev, params_rate(params),
3200 &sfc->srate_in);
3201 if (err < 0)
3202 return err;
3203
3204 err = tegra210_sfc_set_audio_cif(sfc, params, TEGRA210_SFC_RX_CIF_CTRL);
3205 if (err < 0) {
3206 dev_err(dev, "Can't set SFC RX CIF: %d\n", err);
3207 return err;
3208 }
3209
3210 regmap_write(sfc->regmap, TEGRA210_SFC_RX_FREQ, sfc->srate_in);
3211
3212 return err;
3213}
3214
3215static int tegra210_sfc_out_hw_params(struct snd_pcm_substream *substream,
3216 struct snd_pcm_hw_params *params,
3217 struct snd_soc_dai *dai)
3218{
3219 struct tegra210_sfc *sfc = snd_soc_dai_get_drvdata(dai);
3220 struct device *dev = dai->dev;
3221 int err;
3222
3223 err = tegra210_sfc_rate_to_idx(dev, params_rate(params),
3224 &sfc->srate_out);
3225 if (err < 0)
3226 return err;
3227
3228 err = tegra210_sfc_set_audio_cif(sfc, params, TEGRA210_SFC_TX_CIF_CTRL);
3229 if (err < 0) {
3230 dev_err(dev, "Can't set SFC TX CIF: %d\n", err);
3231 return err;
3232 }
3233
3234 regmap_write(sfc->regmap, TEGRA210_SFC_TX_FREQ, sfc->srate_out);
3235
3236 return 0;
3237}
3238
3239static int tegra210_sfc_init(struct snd_soc_dapm_widget *w,
3240 struct snd_kcontrol *kcontrol, int event)
3241{
3242 struct snd_soc_component *cmpnt = snd_soc_dapm_to_component(w->dapm);
3243
3244 return tegra210_sfc_write_coeff_ram(cmpnt);
3245}
3246
3247static int tegra210_sfc_iget_stereo_to_mono(struct snd_kcontrol *kcontrol,
3248 struct snd_ctl_elem_value *ucontrol)
3249{
3250 struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
3251 struct tegra210_sfc *sfc = snd_soc_component_get_drvdata(cmpnt);
3252
3253 ucontrol->value.enumerated.item[0] = sfc->stereo_to_mono[SFC_RX_PATH];
3254
3255 return 0;
3256}
3257
3258static int tegra210_sfc_iput_stereo_to_mono(struct snd_kcontrol *kcontrol,
3259 struct snd_ctl_elem_value *ucontrol)
3260{
3261 struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
3262 struct tegra210_sfc *sfc = snd_soc_component_get_drvdata(cmpnt);
3263 unsigned int value = ucontrol->value.enumerated.item[0];
3264
3265 if (value == sfc->stereo_to_mono[SFC_RX_PATH])
3266 return 0;
3267
3268 sfc->stereo_to_mono[SFC_RX_PATH] = value;
3269
3270 return 1;
3271}
3272
3273static int tegra210_sfc_iget_mono_to_stereo(struct snd_kcontrol *kcontrol,
3274 struct snd_ctl_elem_value *ucontrol)
3275{
3276 struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
3277 struct tegra210_sfc *sfc = snd_soc_component_get_drvdata(cmpnt);
3278
3279 ucontrol->value.enumerated.item[0] = sfc->mono_to_stereo[SFC_RX_PATH];
3280
3281 return 0;
3282}
3283
3284static int tegra210_sfc_iput_mono_to_stereo(struct snd_kcontrol *kcontrol,
3285 struct snd_ctl_elem_value *ucontrol)
3286{
3287 struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
3288 struct tegra210_sfc *sfc = snd_soc_component_get_drvdata(cmpnt);
3289 unsigned int value = ucontrol->value.enumerated.item[0];
3290
3291 if (value == sfc->mono_to_stereo[SFC_RX_PATH])
3292 return 0;
3293
3294 sfc->mono_to_stereo[SFC_RX_PATH] = value;
3295
3296 return 1;
3297}
3298
3299static int tegra210_sfc_oget_stereo_to_mono(struct snd_kcontrol *kcontrol,
3300 struct snd_ctl_elem_value *ucontrol)
3301{
3302 struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
3303 struct tegra210_sfc *sfc = snd_soc_component_get_drvdata(cmpnt);
3304
3305 ucontrol->value.enumerated.item[0] = sfc->stereo_to_mono[SFC_TX_PATH];
3306
3307 return 0;
3308}
3309
3310static int tegra210_sfc_oput_stereo_to_mono(struct snd_kcontrol *kcontrol,
3311 struct snd_ctl_elem_value *ucontrol)
3312{
3313 struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
3314 struct tegra210_sfc *sfc = snd_soc_component_get_drvdata(cmpnt);
3315 unsigned int value = ucontrol->value.enumerated.item[0];
3316
3317 if (value == sfc->stereo_to_mono[SFC_TX_PATH])
3318 return 0;
3319
3320 sfc->stereo_to_mono[SFC_TX_PATH] = value;
3321
3322 return 1;
3323}
3324
3325static int tegra210_sfc_oget_mono_to_stereo(struct snd_kcontrol *kcontrol,
3326 struct snd_ctl_elem_value *ucontrol)
3327{
3328 struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
3329 struct tegra210_sfc *sfc = snd_soc_component_get_drvdata(cmpnt);
3330
3331 ucontrol->value.enumerated.item[0] = sfc->mono_to_stereo[SFC_TX_PATH];
3332
3333 return 0;
3334}
3335
3336static int tegra210_sfc_oput_mono_to_stereo(struct snd_kcontrol *kcontrol,
3337 struct snd_ctl_elem_value *ucontrol)
3338{
3339 struct snd_soc_component *cmpnt = snd_soc_kcontrol_component(kcontrol);
3340 struct tegra210_sfc *sfc = snd_soc_component_get_drvdata(cmpnt);
3341 unsigned int value = ucontrol->value.enumerated.item[0];
3342
3343 if (value == sfc->mono_to_stereo[SFC_TX_PATH])
3344 return 0;
3345
3346 sfc->mono_to_stereo[SFC_TX_PATH] = value;
3347
3348 return 1;
3349}
3350
3351static const struct snd_soc_dai_ops tegra210_sfc_in_dai_ops = {
3352 .hw_params = tegra210_sfc_in_hw_params,
3353 .startup = tegra210_sfc_startup,
3354};
3355
3356static const struct snd_soc_dai_ops tegra210_sfc_out_dai_ops = {
3357 .hw_params = tegra210_sfc_out_hw_params,
3358};
3359
3360static struct snd_soc_dai_driver tegra210_sfc_dais[] = {
3361 {
3362 .name = "SFC-RX-CIF",
3363 .playback = {
3364 .stream_name = "RX-CIF-Playback",
3365 .channels_min = 1,
3366 .channels_max = 2,
3367 .rates = SNDRV_PCM_RATE_8000_192000,
3368 .formats = SNDRV_PCM_FMTBIT_S8 |
3369 SNDRV_PCM_FMTBIT_S16_LE |
3370 SNDRV_PCM_FMTBIT_S32_LE,
3371 },
3372 .capture = {
3373 .stream_name = "RX-CIF-Capture",
3374 .channels_min = 1,
3375 .channels_max = 2,
3376 .rates = SNDRV_PCM_RATE_8000_192000,
3377 .formats = SNDRV_PCM_FMTBIT_S8 |
3378 SNDRV_PCM_FMTBIT_S16_LE |
3379 SNDRV_PCM_FMTBIT_S32_LE,
3380 },
3381 .ops = &tegra210_sfc_in_dai_ops,
3382 },
3383 {
3384 .name = "SFC-TX-CIF",
3385 .playback = {
3386 .stream_name = "TX-CIF-Playback",
3387 .channels_min = 1,
3388 .channels_max = 2,
3389 .rates = SNDRV_PCM_RATE_8000_192000,
3390 .formats = SNDRV_PCM_FMTBIT_S8 |
3391 SNDRV_PCM_FMTBIT_S16_LE |
3392 SNDRV_PCM_FMTBIT_S32_LE,
3393 },
3394 .capture = {
3395 .stream_name = "TX-CIF-Capture",
3396 .channels_min = 1,
3397 .channels_max = 2,
3398 .rates = SNDRV_PCM_RATE_8000_192000,
3399 .formats = SNDRV_PCM_FMTBIT_S8 |
3400 SNDRV_PCM_FMTBIT_S16_LE |
3401 SNDRV_PCM_FMTBIT_S32_LE,
3402 },
3403 .ops = &tegra210_sfc_out_dai_ops,
3404 },
3405};
3406
3407static const struct snd_soc_dapm_widget tegra210_sfc_widgets[] = {
3408 SND_SOC_DAPM_AIF_IN("RX", NULL, 0, SND_SOC_NOPM, 0, 0),
3409 SND_SOC_DAPM_AIF_OUT_E("TX", NULL, 0, TEGRA210_SFC_ENABLE,
3410 TEGRA210_SFC_EN_SHIFT, 0,
3411 tegra210_sfc_init, SND_SOC_DAPM_PRE_PMU),
3412};
3413
3414#define RESAMPLE_ROUTE(sname) \
3415 { "RX XBAR-" sname, NULL, "XBAR-TX" }, \
3416 { "RX-CIF-" sname, NULL, "RX XBAR-" sname }, \
3417 { "RX", NULL, "RX-CIF-" sname }, \
3418 { "TX-CIF-" sname, NULL, "TX" }, \
3419 { "TX XBAR-" sname, NULL, "TX-CIF-" sname }, \
3420 { "XBAR-RX", NULL, "TX XBAR-" sname }
3421
3422static const struct snd_soc_dapm_route tegra210_sfc_routes[] = {
3423 { "TX", NULL, "RX" },
3424 RESAMPLE_ROUTE("Playback"),
3425 RESAMPLE_ROUTE("Capture"),
3426};
3427
3428static const char * const tegra210_sfc_stereo_conv_text[] = {
3429 "CH0", "CH1", "AVG",
3430};
3431
3432static const char * const tegra210_sfc_mono_conv_text[] = {
3433 "Zero", "Copy",
3434};
3435
3436static const struct soc_enum tegra210_sfc_stereo_conv_enum =
3437 SOC_ENUM_SINGLE(SND_SOC_NOPM, 0,
3438 ARRAY_SIZE(tegra210_sfc_stereo_conv_text),
3439 tegra210_sfc_stereo_conv_text);
3440
3441static const struct soc_enum tegra210_sfc_mono_conv_enum =
3442 SOC_ENUM_SINGLE(SND_SOC_NOPM, 0,
3443 ARRAY_SIZE(tegra210_sfc_mono_conv_text),
3444 tegra210_sfc_mono_conv_text);
3445
3446static const struct snd_kcontrol_new tegra210_sfc_controls[] = {
3447 SOC_ENUM_EXT("Input Stereo To Mono", tegra210_sfc_stereo_conv_enum,
3448 tegra210_sfc_iget_stereo_to_mono,
3449 tegra210_sfc_iput_stereo_to_mono),
3450 SOC_ENUM_EXT("Input Mono To Stereo", tegra210_sfc_mono_conv_enum,
3451 tegra210_sfc_iget_mono_to_stereo,
3452 tegra210_sfc_iput_mono_to_stereo),
3453 SOC_ENUM_EXT("Output Stereo To Mono", tegra210_sfc_stereo_conv_enum,
3454 tegra210_sfc_oget_stereo_to_mono,
3455 tegra210_sfc_oput_stereo_to_mono),
3456 SOC_ENUM_EXT("Output Mono To Stereo", tegra210_sfc_mono_conv_enum,
3457 tegra210_sfc_oget_mono_to_stereo,
3458 tegra210_sfc_oput_mono_to_stereo),
3459};
3460
3461static const struct snd_soc_component_driver tegra210_sfc_cmpnt = {
3462 .dapm_widgets = tegra210_sfc_widgets,
3463 .num_dapm_widgets = ARRAY_SIZE(tegra210_sfc_widgets),
3464 .dapm_routes = tegra210_sfc_routes,
3465 .num_dapm_routes = ARRAY_SIZE(tegra210_sfc_routes),
3466 .controls = tegra210_sfc_controls,
3467 .num_controls = ARRAY_SIZE(tegra210_sfc_controls),
3468};
3469
3470static bool tegra210_sfc_wr_reg(struct device *dev, unsigned int reg)
3471{
3472 switch (reg) {
3473 case TEGRA210_SFC_RX_INT_MASK ... TEGRA210_SFC_RX_FREQ:
3474 case TEGRA210_SFC_TX_INT_MASK ... TEGRA210_SFC_TX_FREQ:
3475 case TEGRA210_SFC_ENABLE ... TEGRA210_SFC_CG:
3476 case TEGRA210_SFC_COEF_RAM ... TEGRA210_SFC_CFG_RAM_DATA:
3477 return true;
3478 default:
3479 return false;
3480 }
3481}
3482
3483static bool tegra210_sfc_rd_reg(struct device *dev, unsigned int reg)
3484{
3485 switch (reg) {
3486 case TEGRA210_SFC_RX_STATUS ... TEGRA210_SFC_RX_FREQ:
3487 case TEGRA210_SFC_TX_STATUS ... TEGRA210_SFC_TX_FREQ:
3488 case TEGRA210_SFC_ENABLE ... TEGRA210_SFC_INT_STATUS:
3489 case TEGRA210_SFC_COEF_RAM ... TEGRA210_SFC_CFG_RAM_DATA:
3490 return true;
3491 default:
3492 return false;
3493 }
3494}
3495
3496static bool tegra210_sfc_volatile_reg(struct device *dev, unsigned int reg)
3497{
3498 switch (reg) {
3499 case TEGRA210_SFC_RX_STATUS:
3500 case TEGRA210_SFC_RX_INT_STATUS:
3501 case TEGRA210_SFC_RX_INT_SET:
3502
3503 case TEGRA210_SFC_TX_STATUS:
3504 case TEGRA210_SFC_TX_INT_STATUS:
3505 case TEGRA210_SFC_TX_INT_SET:
3506
3507 case TEGRA210_SFC_SOFT_RESET:
3508 case TEGRA210_SFC_STATUS:
3509 case TEGRA210_SFC_INT_STATUS:
3510 case TEGRA210_SFC_CFG_RAM_CTRL:
3511 case TEGRA210_SFC_CFG_RAM_DATA:
3512 return true;
3513 default:
3514 return false;
3515 }
3516}
3517
3518static bool tegra210_sfc_precious_reg(struct device *dev, unsigned int reg)
3519{
3520 switch (reg) {
3521 case TEGRA210_SFC_CFG_RAM_DATA:
3522 return true;
3523 default:
3524 return false;
3525 }
3526}
3527
3528static const struct regmap_config tegra210_sfc_regmap_config = {
3529 .reg_bits = 32,
3530 .reg_stride = 4,
3531 .val_bits = 32,
3532 .max_register = TEGRA210_SFC_CFG_RAM_DATA,
3533 .writeable_reg = tegra210_sfc_wr_reg,
3534 .readable_reg = tegra210_sfc_rd_reg,
3535 .volatile_reg = tegra210_sfc_volatile_reg,
3536 .precious_reg = tegra210_sfc_precious_reg,
3537 .reg_defaults = tegra210_sfc_reg_defaults,
3538 .num_reg_defaults = ARRAY_SIZE(tegra210_sfc_reg_defaults),
3539 .cache_type = REGCACHE_FLAT,
3540};
3541
3542static const struct of_device_id tegra210_sfc_of_match[] = {
3543 { .compatible = "nvidia,tegra210-sfc" },
3544 {},
3545};
3546MODULE_DEVICE_TABLE(of, tegra210_sfc_of_match);
3547
3548static int tegra210_sfc_platform_probe(struct platform_device *pdev)
3549{
3550 struct device *dev = &pdev->dev;
3551 struct tegra210_sfc *sfc;
3552 void __iomem *regs;
3553 int err;
3554
3555 sfc = devm_kzalloc(dev, sizeof(*sfc), GFP_KERNEL);
3556 if (!sfc)
3557 return -ENOMEM;
3558
3559 dev_set_drvdata(dev, sfc);
3560
3561 regs = devm_platform_ioremap_resource(pdev, 0);
3562 if (IS_ERR(regs))
3563 return PTR_ERR(regs);
3564
3565 sfc->regmap = devm_regmap_init_mmio(dev, regs,
3566 &tegra210_sfc_regmap_config);
3567 if (IS_ERR(sfc->regmap)) {
3568 dev_err(dev, "regmap init failed\n");
3569 return PTR_ERR(sfc->regmap);
3570 }
3571
3572 regcache_cache_only(sfc->regmap, true);
3573
3574 err = devm_snd_soc_register_component(dev, &tegra210_sfc_cmpnt,
3575 tegra210_sfc_dais,
3576 ARRAY_SIZE(tegra210_sfc_dais));
3577 if (err) {
3578 dev_err(dev, "can't register SFC component, err: %d\n", err);
3579 return err;
3580 }
3581
3582 pm_runtime_enable(&pdev->dev);
3583
3584 return 0;
3585}
3586
3587static int tegra210_sfc_platform_remove(struct platform_device *pdev)
3588{
3589 pm_runtime_disable(&pdev->dev);
3590
3591 return 0;
3592}
3593
3594static const struct dev_pm_ops tegra210_sfc_pm_ops = {
3595 SET_RUNTIME_PM_OPS(tegra210_sfc_runtime_suspend,
3596 tegra210_sfc_runtime_resume, NULL)
3597 SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
3598 pm_runtime_force_resume)
3599};
3600
3601static struct platform_driver tegra210_sfc_driver = {
3602 .driver = {
3603 .name = "tegra210-sfc",
3604 .of_match_table = tegra210_sfc_of_match,
3605 .pm = &tegra210_sfc_pm_ops,
3606 },
3607 .probe = tegra210_sfc_platform_probe,
3608 .remove = tegra210_sfc_platform_remove,
3609};
3610module_platform_driver(tegra210_sfc_driver)
3611
3612MODULE_AUTHOR("Arun Shamanna Lakshmi <aruns@nvidia.com>");
3613MODULE_DESCRIPTION("Tegra210 SFC ASoC driver");
3614MODULE_LICENSE("GPL v2");
3615