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