1 // SPDX-License-Identifier: GPL-2.0-only
2 //
3 // tegra210_ahub.c - Tegra210 AHUB driver
4 //
5 // Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.
6
7 #include <linux/clk.h>
8 #include <linux/device.h>
9 #include <linux/module.h>
10 #include <linux/of_platform.h>
11 #include <linux/platform_device.h>
12 #include <linux/pm_runtime.h>
13 #include <linux/regmap.h>
14 #include <sound/soc.h>
15 #include "tegra210_ahub.h"
16
tegra_ahub_get_value_enum(struct snd_kcontrol * kctl,struct snd_ctl_elem_value * uctl)17 static int tegra_ahub_get_value_enum(struct snd_kcontrol *kctl,
18 struct snd_ctl_elem_value *uctl)
19 {
20 struct snd_soc_component *cmpnt = snd_soc_dapm_kcontrol_component(kctl);
21 struct tegra_ahub *ahub = snd_soc_component_get_drvdata(cmpnt);
22 struct soc_enum *e = (struct soc_enum *)kctl->private_value;
23 unsigned int reg, i, bit_pos = 0;
24
25 /*
26 * Find the bit position of current MUX input.
27 * If nothing is set, position would be 0 and it corresponds to 'None'.
28 */
29 for (i = 0; i < ahub->soc_data->reg_count; i++) {
30 unsigned int reg_val;
31
32 reg = e->reg + (ahub->soc_data->xbar_part_size * i);
33 reg_val = snd_soc_component_read(cmpnt, reg);
34 reg_val &= ahub->soc_data->mask[i];
35
36 if (reg_val) {
37 bit_pos = ffs(reg_val) +
38 (8 * cmpnt->val_bytes * i);
39 break;
40 }
41 }
42
43 /* Find index related to the item in array *_ahub_mux_texts[] */
44 for (i = 0; i < e->items; i++) {
45 if (bit_pos == e->values[i]) {
46 uctl->value.enumerated.item[0] = i;
47 break;
48 }
49 }
50
51 return 0;
52 }
53
tegra_ahub_put_value_enum(struct snd_kcontrol * kctl,struct snd_ctl_elem_value * uctl)54 static int tegra_ahub_put_value_enum(struct snd_kcontrol *kctl,
55 struct snd_ctl_elem_value *uctl)
56 {
57 struct snd_soc_component *cmpnt = snd_soc_dapm_kcontrol_component(kctl);
58 struct tegra_ahub *ahub = snd_soc_component_get_drvdata(cmpnt);
59 struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kctl);
60 struct soc_enum *e = (struct soc_enum *)kctl->private_value;
61 struct snd_soc_dapm_update update[TEGRA_XBAR_UPDATE_MAX_REG] = { };
62 unsigned int *item = uctl->value.enumerated.item;
63 unsigned int value = e->values[item[0]];
64 unsigned int i, bit_pos, reg_idx = 0, reg_val = 0;
65 int change = 0;
66
67 if (item[0] >= e->items)
68 return -EINVAL;
69
70 if (value) {
71 /* Get the register index and value to set */
72 reg_idx = (value - 1) / (8 * cmpnt->val_bytes);
73 bit_pos = (value - 1) % (8 * cmpnt->val_bytes);
74 reg_val = BIT(bit_pos);
75 }
76
77 /*
78 * Run through all parts of a MUX register to find the state changes.
79 * There will be an additional update if new MUX input value is from
80 * different part of the MUX register.
81 */
82 for (i = 0; i < ahub->soc_data->reg_count; i++) {
83 update[i].reg = e->reg + (ahub->soc_data->xbar_part_size * i);
84 update[i].val = (i == reg_idx) ? reg_val : 0;
85 update[i].mask = ahub->soc_data->mask[i];
86 update[i].kcontrol = kctl;
87
88 /* Update widget power if state has changed */
89 if (snd_soc_component_test_bits(cmpnt, update[i].reg,
90 update[i].mask,
91 update[i].val))
92 change |= snd_soc_dapm_mux_update_power(dapm, kctl,
93 item[0], e,
94 &update[i]);
95 }
96
97 return change;
98 }
99
100 static struct snd_soc_dai_driver tegra210_ahub_dais[] = {
101 DAI(ADMAIF1),
102 DAI(ADMAIF2),
103 DAI(ADMAIF3),
104 DAI(ADMAIF4),
105 DAI(ADMAIF5),
106 DAI(ADMAIF6),
107 DAI(ADMAIF7),
108 DAI(ADMAIF8),
109 DAI(ADMAIF9),
110 DAI(ADMAIF10),
111 /* XBAR <-> I2S <-> Codec */
112 DAI(I2S1),
113 DAI(I2S2),
114 DAI(I2S3),
115 DAI(I2S4),
116 DAI(I2S5),
117 /* XBAR <- DMIC <- Codec */
118 DAI(DMIC1),
119 DAI(DMIC2),
120 DAI(DMIC3),
121 /* XBAR -> SFC -> XBAR */
122 DAI(SFC1 RX),
123 DAI(SFC1 TX),
124 DAI(SFC2 RX),
125 DAI(SFC2 TX),
126 DAI(SFC3 RX),
127 DAI(SFC3 TX),
128 DAI(SFC4 RX),
129 DAI(SFC4 TX),
130 /* XBAR -> MVC -> XBAR */
131 DAI(MVC1 RX),
132 DAI(MVC1 TX),
133 DAI(MVC2 RX),
134 DAI(MVC2 TX),
135 /* XBAR -> AMX(4:1) -> XBAR */
136 DAI(AMX1 RX1),
137 DAI(AMX1 RX2),
138 DAI(AMX1 RX3),
139 DAI(AMX1 RX4),
140 DAI(AMX1),
141 DAI(AMX2 RX1),
142 DAI(AMX2 RX2),
143 DAI(AMX2 RX3),
144 DAI(AMX2 RX4),
145 DAI(AMX2),
146 /* XBAR -> ADX(1:4) -> XBAR */
147 DAI(ADX1),
148 DAI(ADX1 TX1),
149 DAI(ADX1 TX2),
150 DAI(ADX1 TX3),
151 DAI(ADX1 TX4),
152 DAI(ADX2),
153 DAI(ADX2 TX1),
154 DAI(ADX2 TX2),
155 DAI(ADX2 TX3),
156 DAI(ADX2 TX4),
157 /* XBAR -> MIXER(10:5) -> XBAR */
158 DAI(MIXER1 RX1),
159 DAI(MIXER1 RX2),
160 DAI(MIXER1 RX3),
161 DAI(MIXER1 RX4),
162 DAI(MIXER1 RX5),
163 DAI(MIXER1 RX6),
164 DAI(MIXER1 RX7),
165 DAI(MIXER1 RX8),
166 DAI(MIXER1 RX9),
167 DAI(MIXER1 RX10),
168 DAI(MIXER1 TX1),
169 DAI(MIXER1 TX2),
170 DAI(MIXER1 TX3),
171 DAI(MIXER1 TX4),
172 DAI(MIXER1 TX5),
173 /* XBAR -> OPE -> XBAR */
174 DAI(OPE1 RX),
175 DAI(OPE1 TX),
176 DAI(OPE2 RX),
177 DAI(OPE2 TX),
178 };
179
180 static struct snd_soc_dai_driver tegra186_ahub_dais[] = {
181 DAI(ADMAIF1),
182 DAI(ADMAIF2),
183 DAI(ADMAIF3),
184 DAI(ADMAIF4),
185 DAI(ADMAIF5),
186 DAI(ADMAIF6),
187 DAI(ADMAIF7),
188 DAI(ADMAIF8),
189 DAI(ADMAIF9),
190 DAI(ADMAIF10),
191 DAI(ADMAIF11),
192 DAI(ADMAIF12),
193 DAI(ADMAIF13),
194 DAI(ADMAIF14),
195 DAI(ADMAIF15),
196 DAI(ADMAIF16),
197 DAI(ADMAIF17),
198 DAI(ADMAIF18),
199 DAI(ADMAIF19),
200 DAI(ADMAIF20),
201 /* XBAR <-> I2S <-> Codec */
202 DAI(I2S1),
203 DAI(I2S2),
204 DAI(I2S3),
205 DAI(I2S4),
206 DAI(I2S5),
207 DAI(I2S6),
208 /* XBAR <- DMIC <- Codec */
209 DAI(DMIC1),
210 DAI(DMIC2),
211 DAI(DMIC3),
212 DAI(DMIC4),
213 /* XBAR -> DSPK -> Codec */
214 DAI(DSPK1),
215 DAI(DSPK2),
216 /* XBAR -> SFC -> XBAR */
217 DAI(SFC1 RX),
218 DAI(SFC1 TX),
219 DAI(SFC2 RX),
220 DAI(SFC2 TX),
221 DAI(SFC3 RX),
222 DAI(SFC3 TX),
223 DAI(SFC4 RX),
224 DAI(SFC4 TX),
225 /* XBAR -> MVC -> XBAR */
226 DAI(MVC1 RX),
227 DAI(MVC1 TX),
228 DAI(MVC2 RX),
229 DAI(MVC2 TX),
230 /* XBAR -> AMX(4:1) -> XBAR */
231 DAI(AMX1 RX1),
232 DAI(AMX1 RX2),
233 DAI(AMX1 RX3),
234 DAI(AMX1 RX4),
235 DAI(AMX1),
236 DAI(AMX2 RX1),
237 DAI(AMX2 RX2),
238 DAI(AMX2 RX3),
239 DAI(AMX2 RX4),
240 DAI(AMX2),
241 DAI(AMX3 RX1),
242 DAI(AMX3 RX2),
243 DAI(AMX3 RX3),
244 DAI(AMX3 RX4),
245 DAI(AMX3),
246 DAI(AMX4 RX1),
247 DAI(AMX4 RX2),
248 DAI(AMX4 RX3),
249 DAI(AMX4 RX4),
250 DAI(AMX4),
251 /* XBAR -> ADX(1:4) -> XBAR */
252 DAI(ADX1),
253 DAI(ADX1 TX1),
254 DAI(ADX1 TX2),
255 DAI(ADX1 TX3),
256 DAI(ADX1 TX4),
257 DAI(ADX2),
258 DAI(ADX2 TX1),
259 DAI(ADX2 TX2),
260 DAI(ADX2 TX3),
261 DAI(ADX2 TX4),
262 DAI(ADX3),
263 DAI(ADX3 TX1),
264 DAI(ADX3 TX2),
265 DAI(ADX3 TX3),
266 DAI(ADX3 TX4),
267 DAI(ADX4),
268 DAI(ADX4 TX1),
269 DAI(ADX4 TX2),
270 DAI(ADX4 TX3),
271 DAI(ADX4 TX4),
272 /* XBAR -> MIXER1(10:5) -> XBAR */
273 DAI(MIXER1 RX1),
274 DAI(MIXER1 RX2),
275 DAI(MIXER1 RX3),
276 DAI(MIXER1 RX4),
277 DAI(MIXER1 RX5),
278 DAI(MIXER1 RX6),
279 DAI(MIXER1 RX7),
280 DAI(MIXER1 RX8),
281 DAI(MIXER1 RX9),
282 DAI(MIXER1 RX10),
283 DAI(MIXER1 TX1),
284 DAI(MIXER1 TX2),
285 DAI(MIXER1 TX3),
286 DAI(MIXER1 TX4),
287 DAI(MIXER1 TX5),
288 /* XBAR -> ASRC -> XBAR */
289 DAI(ASRC1 RX1),
290 DAI(ASRC1 TX1),
291 DAI(ASRC1 RX2),
292 DAI(ASRC1 TX2),
293 DAI(ASRC1 RX3),
294 DAI(ASRC1 TX3),
295 DAI(ASRC1 RX4),
296 DAI(ASRC1 TX4),
297 DAI(ASRC1 RX5),
298 DAI(ASRC1 TX5),
299 DAI(ASRC1 RX6),
300 DAI(ASRC1 TX6),
301 DAI(ASRC1 RX7),
302 /* XBAR -> OPE -> XBAR */
303 DAI(OPE1 RX),
304 DAI(OPE1 TX),
305 };
306
307 static struct snd_soc_dai_driver tegra264_ahub_dais[] = {
308 DAI(ADMAIF1),
309 DAI(ADMAIF2),
310 DAI(ADMAIF3),
311 DAI(ADMAIF4),
312 DAI(ADMAIF5),
313 DAI(ADMAIF6),
314 DAI(ADMAIF7),
315 DAI(ADMAIF8),
316 DAI(ADMAIF9),
317 DAI(ADMAIF10),
318 DAI(ADMAIF11),
319 DAI(ADMAIF12),
320 DAI(ADMAIF13),
321 DAI(ADMAIF14),
322 DAI(ADMAIF15),
323 DAI(ADMAIF16),
324 DAI(ADMAIF17),
325 DAI(ADMAIF18),
326 DAI(ADMAIF19),
327 DAI(ADMAIF20),
328 DAI(ADMAIF21),
329 DAI(ADMAIF22),
330 DAI(ADMAIF23),
331 DAI(ADMAIF24),
332 DAI(ADMAIF25),
333 DAI(ADMAIF26),
334 DAI(ADMAIF27),
335 DAI(ADMAIF28),
336 DAI(ADMAIF29),
337 DAI(ADMAIF30),
338 DAI(ADMAIF31),
339 DAI(ADMAIF32),
340 /* XBAR <-> I2S <-> Codec */
341 DAI(I2S1),
342 DAI(I2S2),
343 DAI(I2S3),
344 DAI(I2S4),
345 DAI(I2S5),
346 DAI(I2S6),
347 DAI(I2S7),
348 DAI(I2S8),
349 /* XBAR <-> DMIC <-> Codec */
350 DAI(DMIC1),
351 DAI(DMIC2),
352 /* XBAR <-> DSPK <-> Codec */
353 DAI(DSPK1),
354 /* XBAR -> SFC -> XBAR */
355 DAI(SFC1 RX),
356 DAI(SFC1 TX),
357 DAI(SFC2 RX),
358 DAI(SFC2 TX),
359 DAI(SFC3 RX),
360 DAI(SFC3 TX),
361 DAI(SFC4 RX),
362 DAI(SFC4 TX),
363 /* XBAR -> MVC -> XBAR */
364 DAI(MVC1 RX),
365 DAI(MVC1 TX),
366 DAI(MVC2 RX),
367 DAI(MVC2 TX),
368 /* XBAR -> AMX(4:1) -> XBAR */
369 DAI(AMX1 RX1),
370 DAI(AMX1 RX2),
371 DAI(AMX1 RX3),
372 DAI(AMX1 RX4),
373 DAI(AMX1),
374 DAI(AMX2 RX1),
375 DAI(AMX2 RX2),
376 DAI(AMX2 RX3),
377 DAI(AMX2 RX4),
378 DAI(AMX2),
379 DAI(AMX3 RX1),
380 DAI(AMX3 RX2),
381 DAI(AMX3 RX3),
382 DAI(AMX3 RX4),
383 DAI(AMX3),
384 DAI(AMX4 RX1),
385 DAI(AMX4 RX2),
386 DAI(AMX4 RX3),
387 DAI(AMX4 RX4),
388 DAI(AMX4),
389 DAI(AMX5 RX1),
390 DAI(AMX5 RX2),
391 DAI(AMX5 RX3),
392 DAI(AMX5 RX4),
393 DAI(AMX5),
394 DAI(AMX6 RX1),
395 DAI(AMX6 RX2),
396 DAI(AMX6 RX3),
397 DAI(AMX6 RX4),
398 DAI(AMX6),
399 /* XBAR -> ADX(1:4) -> XBAR */
400 DAI(ADX1),
401 DAI(ADX1 TX1),
402 DAI(ADX1 TX2),
403 DAI(ADX1 TX3),
404 DAI(ADX1 TX4),
405 DAI(ADX2),
406 DAI(ADX2 TX1),
407 DAI(ADX2 TX2),
408 DAI(ADX2 TX3),
409 DAI(ADX2 TX4),
410 DAI(ADX3),
411 DAI(ADX3 TX1),
412 DAI(ADX3 TX2),
413 DAI(ADX3 TX3),
414 DAI(ADX3 TX4),
415 DAI(ADX4),
416 DAI(ADX4 TX1),
417 DAI(ADX4 TX2),
418 DAI(ADX4 TX3),
419 DAI(ADX4 TX4),
420 DAI(ADX5),
421 DAI(ADX5 TX1),
422 DAI(ADX5 TX2),
423 DAI(ADX5 TX3),
424 DAI(ADX5 TX4),
425 DAI(ADX6),
426 DAI(ADX6 TX1),
427 DAI(ADX6 TX2),
428 DAI(ADX6 TX3),
429 DAI(ADX6 TX4),
430 /* XBAR -> MIXER1(10:5) -> XBAR */
431 DAI(MIXER1 RX1),
432 DAI(MIXER1 RX2),
433 DAI(MIXER1 RX3),
434 DAI(MIXER1 RX4),
435 DAI(MIXER1 RX5),
436 DAI(MIXER1 RX6),
437 DAI(MIXER1 RX7),
438 DAI(MIXER1 RX8),
439 DAI(MIXER1 RX9),
440 DAI(MIXER1 RX10),
441 DAI(MIXER1 TX1),
442 DAI(MIXER1 TX2),
443 DAI(MIXER1 TX3),
444 DAI(MIXER1 TX4),
445 DAI(MIXER1 TX5),
446 /* XBAR -> ASRC -> XBAR */
447 DAI(ASRC1 RX1),
448 DAI(ASRC1 TX1),
449 DAI(ASRC1 RX2),
450 DAI(ASRC1 TX2),
451 DAI(ASRC1 RX3),
452 DAI(ASRC1 TX3),
453 DAI(ASRC1 RX4),
454 DAI(ASRC1 TX4),
455 DAI(ASRC1 RX5),
456 DAI(ASRC1 TX5),
457 DAI(ASRC1 RX6),
458 DAI(ASRC1 TX6),
459 DAI(ASRC1 RX7),
460 /* XBAR -> OPE -> XBAR */
461 DAI(OPE1 RX),
462 DAI(OPE1 TX),
463 };
464
465 static const char * const tegra210_ahub_mux_texts[] = {
466 "None",
467 "ADMAIF1",
468 "ADMAIF2",
469 "ADMAIF3",
470 "ADMAIF4",
471 "ADMAIF5",
472 "ADMAIF6",
473 "ADMAIF7",
474 "ADMAIF8",
475 "ADMAIF9",
476 "ADMAIF10",
477 "I2S1",
478 "I2S2",
479 "I2S3",
480 "I2S4",
481 "I2S5",
482 "DMIC1",
483 "DMIC2",
484 "DMIC3",
485 "SFC1",
486 "SFC2",
487 "SFC3",
488 "SFC4",
489 "MVC1",
490 "MVC2",
491 "AMX1",
492 "AMX2",
493 "ADX1 TX1",
494 "ADX1 TX2",
495 "ADX1 TX3",
496 "ADX1 TX4",
497 "ADX2 TX1",
498 "ADX2 TX2",
499 "ADX2 TX3",
500 "ADX2 TX4",
501 "MIXER1 TX1",
502 "MIXER1 TX2",
503 "MIXER1 TX3",
504 "MIXER1 TX4",
505 "MIXER1 TX5",
506 "OPE1",
507 "OPE2",
508 };
509
510 static const char * const tegra186_ahub_mux_texts[] = {
511 "None",
512 "ADMAIF1",
513 "ADMAIF2",
514 "ADMAIF3",
515 "ADMAIF4",
516 "ADMAIF5",
517 "ADMAIF6",
518 "ADMAIF7",
519 "ADMAIF8",
520 "ADMAIF9",
521 "ADMAIF10",
522 "ADMAIF11",
523 "ADMAIF12",
524 "ADMAIF13",
525 "ADMAIF14",
526 "ADMAIF15",
527 "ADMAIF16",
528 "I2S1",
529 "I2S2",
530 "I2S3",
531 "I2S4",
532 "I2S5",
533 "I2S6",
534 "ADMAIF17",
535 "ADMAIF18",
536 "ADMAIF19",
537 "ADMAIF20",
538 "DMIC1",
539 "DMIC2",
540 "DMIC3",
541 "DMIC4",
542 "SFC1",
543 "SFC2",
544 "SFC3",
545 "SFC4",
546 "MVC1",
547 "MVC2",
548 "AMX1",
549 "AMX2",
550 "AMX3",
551 "AMX4",
552 "ADX1 TX1",
553 "ADX1 TX2",
554 "ADX1 TX3",
555 "ADX1 TX4",
556 "ADX2 TX1",
557 "ADX2 TX2",
558 "ADX2 TX3",
559 "ADX2 TX4",
560 "ADX3 TX1",
561 "ADX3 TX2",
562 "ADX3 TX3",
563 "ADX3 TX4",
564 "ADX4 TX1",
565 "ADX4 TX2",
566 "ADX4 TX3",
567 "ADX4 TX4",
568 "MIXER1 TX1",
569 "MIXER1 TX2",
570 "MIXER1 TX3",
571 "MIXER1 TX4",
572 "MIXER1 TX5",
573 "ASRC1 TX1",
574 "ASRC1 TX2",
575 "ASRC1 TX3",
576 "ASRC1 TX4",
577 "ASRC1 TX5",
578 "ASRC1 TX6",
579 "OPE1",
580 };
581
582 static const char * const tegra264_ahub_mux_texts[] = {
583 "None",
584 "ADMAIF1",
585 "ADMAIF2",
586 "ADMAIF3",
587 "ADMAIF4",
588 "ADMAIF5",
589 "ADMAIF6",
590 "ADMAIF7",
591 "ADMAIF8",
592 "ADMAIF9",
593 "ADMAIF10",
594 "ADMAIF11",
595 "ADMAIF12",
596 "ADMAIF13",
597 "ADMAIF14",
598 "ADMAIF15",
599 "ADMAIF16",
600 "I2S1",
601 "I2S2",
602 "I2S3",
603 "I2S4",
604 "I2S5",
605 "I2S6",
606 "I2S7",
607 "I2S8",
608 "SFC1",
609 "SFC2",
610 "SFC3",
611 "SFC4",
612 "MIXER1 TX1",
613 "MIXER1 TX2",
614 "MIXER1 TX3",
615 "MIXER1 TX4",
616 "MIXER1 TX5",
617 "AMX1",
618 "AMX2",
619 "AMX3",
620 "AMX4",
621 "AMX5",
622 "AMX6",
623 "OPE1",
624 "MVC1",
625 "MVC2",
626 "DMIC1",
627 "DMIC2",
628 "ADX1 TX1",
629 "ADX1 TX2",
630 "ADX1 TX3",
631 "ADX1 TX4",
632 "ADX2 TX1",
633 "ADX2 TX2",
634 "ADX2 TX3",
635 "ADX2 TX4",
636 "ADX3 TX1",
637 "ADX3 TX2",
638 "ADX3 TX3",
639 "ADX3 TX4",
640 "ADX4 TX1",
641 "ADX4 TX2",
642 "ADX4 TX3",
643 "ADX4 TX4",
644 "ADX5 TX1",
645 "ADX5 TX2",
646 "ADX5 TX3",
647 "ADX5 TX4",
648 "ADX6 TX1",
649 "ADX6 TX2",
650 "ADX6 TX3",
651 "ADX6 TX4",
652 "ASRC1 TX1",
653 "ASRC1 TX2",
654 "ASRC1 TX3",
655 "ASRC1 TX4",
656 "ASRC1 TX5",
657 "ASRC1 TX6",
658 "ADMAIF17",
659 "ADMAIF18",
660 "ADMAIF19",
661 "ADMAIF20",
662 "ADMAIF21",
663 "ADMAIF22",
664 "ADMAIF23",
665 "ADMAIF24",
666 "ADMAIF25",
667 "ADMAIF26",
668 "ADMAIF27",
669 "ADMAIF28",
670 "ADMAIF29",
671 "ADMAIF30",
672 "ADMAIF31",
673 "ADMAIF32",
674 };
675
676 static const unsigned int tegra210_ahub_mux_values[] = {
677 0,
678 /* ADMAIF */
679 MUX_VALUE(0, 0),
680 MUX_VALUE(0, 1),
681 MUX_VALUE(0, 2),
682 MUX_VALUE(0, 3),
683 MUX_VALUE(0, 4),
684 MUX_VALUE(0, 5),
685 MUX_VALUE(0, 6),
686 MUX_VALUE(0, 7),
687 MUX_VALUE(0, 8),
688 MUX_VALUE(0, 9),
689 /* I2S */
690 MUX_VALUE(0, 16),
691 MUX_VALUE(0, 17),
692 MUX_VALUE(0, 18),
693 MUX_VALUE(0, 19),
694 MUX_VALUE(0, 20),
695 /* DMIC */
696 MUX_VALUE(2, 18),
697 MUX_VALUE(2, 19),
698 MUX_VALUE(2, 20),
699 /* SFC */
700 MUX_VALUE(0, 24),
701 MUX_VALUE(0, 25),
702 MUX_VALUE(0, 26),
703 MUX_VALUE(0, 27),
704 /* MVC */
705 MUX_VALUE(2, 8),
706 MUX_VALUE(2, 9),
707 /* AMX */
708 MUX_VALUE(1, 8),
709 MUX_VALUE(1, 9),
710 /* ADX */
711 MUX_VALUE(2, 24),
712 MUX_VALUE(2, 25),
713 MUX_VALUE(2, 26),
714 MUX_VALUE(2, 27),
715 MUX_VALUE(2, 28),
716 MUX_VALUE(2, 29),
717 MUX_VALUE(2, 30),
718 MUX_VALUE(2, 31),
719 /* MIXER */
720 MUX_VALUE(1, 0),
721 MUX_VALUE(1, 1),
722 MUX_VALUE(1, 2),
723 MUX_VALUE(1, 3),
724 MUX_VALUE(1, 4),
725 /* OPE */
726 MUX_VALUE(2, 0),
727 MUX_VALUE(2, 1),
728 };
729
730 static const unsigned int tegra186_ahub_mux_values[] = {
731 0,
732 /* ADMAIF */
733 MUX_VALUE(0, 0),
734 MUX_VALUE(0, 1),
735 MUX_VALUE(0, 2),
736 MUX_VALUE(0, 3),
737 MUX_VALUE(0, 4),
738 MUX_VALUE(0, 5),
739 MUX_VALUE(0, 6),
740 MUX_VALUE(0, 7),
741 MUX_VALUE(0, 8),
742 MUX_VALUE(0, 9),
743 MUX_VALUE(0, 10),
744 MUX_VALUE(0, 11),
745 MUX_VALUE(0, 12),
746 MUX_VALUE(0, 13),
747 MUX_VALUE(0, 14),
748 MUX_VALUE(0, 15),
749 /* I2S */
750 MUX_VALUE(0, 16),
751 MUX_VALUE(0, 17),
752 MUX_VALUE(0, 18),
753 MUX_VALUE(0, 19),
754 MUX_VALUE(0, 20),
755 MUX_VALUE(0, 21),
756 /* ADMAIF */
757 MUX_VALUE(3, 16),
758 MUX_VALUE(3, 17),
759 MUX_VALUE(3, 18),
760 MUX_VALUE(3, 19),
761 /* DMIC */
762 MUX_VALUE(2, 18),
763 MUX_VALUE(2, 19),
764 MUX_VALUE(2, 20),
765 MUX_VALUE(2, 21),
766 /* SFC */
767 MUX_VALUE(0, 24),
768 MUX_VALUE(0, 25),
769 MUX_VALUE(0, 26),
770 MUX_VALUE(0, 27),
771 /* MVC */
772 MUX_VALUE(2, 8),
773 MUX_VALUE(2, 9),
774 /* AMX */
775 MUX_VALUE(1, 8),
776 MUX_VALUE(1, 9),
777 MUX_VALUE(1, 10),
778 MUX_VALUE(1, 11),
779 /* ADX */
780 MUX_VALUE(2, 24),
781 MUX_VALUE(2, 25),
782 MUX_VALUE(2, 26),
783 MUX_VALUE(2, 27),
784 MUX_VALUE(2, 28),
785 MUX_VALUE(2, 29),
786 MUX_VALUE(2, 30),
787 MUX_VALUE(2, 31),
788 MUX_VALUE(3, 0),
789 MUX_VALUE(3, 1),
790 MUX_VALUE(3, 2),
791 MUX_VALUE(3, 3),
792 MUX_VALUE(3, 4),
793 MUX_VALUE(3, 5),
794 MUX_VALUE(3, 6),
795 MUX_VALUE(3, 7),
796 /* MIXER */
797 MUX_VALUE(1, 0),
798 MUX_VALUE(1, 1),
799 MUX_VALUE(1, 2),
800 MUX_VALUE(1, 3),
801 MUX_VALUE(1, 4),
802 /* ASRC */
803 MUX_VALUE(3, 24),
804 MUX_VALUE(3, 25),
805 MUX_VALUE(3, 26),
806 MUX_VALUE(3, 27),
807 MUX_VALUE(3, 28),
808 MUX_VALUE(3, 29),
809 /* OPE */
810 MUX_VALUE(2, 0),
811 };
812
813 static const unsigned int tegra264_ahub_mux_values[] = {
814 0,
815 /* ADMAIF */
816 MUX_VALUE(0, 0),
817 MUX_VALUE(0, 1),
818 MUX_VALUE(0, 2),
819 MUX_VALUE(0, 3),
820 MUX_VALUE(0, 4),
821 MUX_VALUE(0, 5),
822 MUX_VALUE(0, 6),
823 MUX_VALUE(0, 7),
824 MUX_VALUE(0, 8),
825 MUX_VALUE(0, 9),
826 MUX_VALUE(0, 10),
827 MUX_VALUE(0, 11),
828 MUX_VALUE(0, 12),
829 MUX_VALUE(0, 13),
830 MUX_VALUE(0, 14),
831 MUX_VALUE(0, 15),
832 /* I2S */
833 MUX_VALUE(0, 16),
834 MUX_VALUE(0, 17),
835 MUX_VALUE(0, 18),
836 MUX_VALUE(0, 19),
837 MUX_VALUE(0, 20),
838 MUX_VALUE(0, 21),
839 MUX_VALUE(0, 22),
840 MUX_VALUE(0, 23),
841 /* SFC */
842 MUX_VALUE(0, 24),
843 MUX_VALUE(0, 25),
844 MUX_VALUE(0, 26),
845 MUX_VALUE(0, 27),
846 /* MIXER */
847 MUX_VALUE(1, 0),
848 MUX_VALUE(1, 1),
849 MUX_VALUE(1, 2),
850 MUX_VALUE(1, 3),
851 MUX_VALUE(1, 4),
852 /* AMX */
853 MUX_VALUE(1, 8),
854 MUX_VALUE(1, 9),
855 MUX_VALUE(1, 10),
856 MUX_VALUE(1, 11),
857 MUX_VALUE(1, 12),
858 MUX_VALUE(1, 13),
859 /* OPE */
860 MUX_VALUE(2, 0),
861 /* MVC */
862 MUX_VALUE(2, 8),
863 MUX_VALUE(2, 9),
864 /* DMIC */
865 MUX_VALUE(2, 18),
866 MUX_VALUE(2, 19),
867 /* ADX */
868 MUX_VALUE(2, 24),
869 MUX_VALUE(2, 25),
870 MUX_VALUE(2, 26),
871 MUX_VALUE(2, 27),
872 MUX_VALUE(2, 28),
873 MUX_VALUE(2, 29),
874 MUX_VALUE(2, 30),
875 MUX_VALUE(2, 31),
876 MUX_VALUE(3, 0),
877 MUX_VALUE(3, 1),
878 MUX_VALUE(3, 2),
879 MUX_VALUE(3, 3),
880 MUX_VALUE(3, 4),
881 MUX_VALUE(3, 5),
882 MUX_VALUE(3, 6),
883 MUX_VALUE(3, 7),
884 MUX_VALUE(3, 8),
885 MUX_VALUE(3, 9),
886 MUX_VALUE(3, 10),
887 MUX_VALUE(3, 11),
888 MUX_VALUE(3, 12),
889 MUX_VALUE(3, 13),
890 MUX_VALUE(3, 14),
891 MUX_VALUE(3, 15),
892 /* ASRC */
893 MUX_VALUE(3, 24),
894 MUX_VALUE(3, 25),
895 MUX_VALUE(3, 26),
896 MUX_VALUE(3, 27),
897 MUX_VALUE(3, 28),
898 MUX_VALUE(3, 29),
899 /* ADMAIF */
900 MUX_VALUE(4, 7),
901 MUX_VALUE(4, 8),
902 MUX_VALUE(4, 9),
903 MUX_VALUE(4, 10),
904 MUX_VALUE(4, 11),
905 MUX_VALUE(4, 12),
906 MUX_VALUE(4, 13),
907 MUX_VALUE(4, 14),
908 MUX_VALUE(4, 15),
909 MUX_VALUE(4, 16),
910 MUX_VALUE(4, 17),
911 MUX_VALUE(4, 18),
912 MUX_VALUE(4, 19),
913 MUX_VALUE(4, 20),
914 MUX_VALUE(4, 21),
915 MUX_VALUE(4, 22),
916 };
917
918 /* Controls for t210 */
919 MUX_ENUM_CTRL_DECL(t210_admaif1_tx, 0x00);
920 MUX_ENUM_CTRL_DECL(t210_admaif2_tx, 0x01);
921 MUX_ENUM_CTRL_DECL(t210_admaif3_tx, 0x02);
922 MUX_ENUM_CTRL_DECL(t210_admaif4_tx, 0x03);
923 MUX_ENUM_CTRL_DECL(t210_admaif5_tx, 0x04);
924 MUX_ENUM_CTRL_DECL(t210_admaif6_tx, 0x05);
925 MUX_ENUM_CTRL_DECL(t210_admaif7_tx, 0x06);
926 MUX_ENUM_CTRL_DECL(t210_admaif8_tx, 0x07);
927 MUX_ENUM_CTRL_DECL(t210_admaif9_tx, 0x08);
928 MUX_ENUM_CTRL_DECL(t210_admaif10_tx, 0x09);
929 MUX_ENUM_CTRL_DECL(t210_i2s1_tx, 0x10);
930 MUX_ENUM_CTRL_DECL(t210_i2s2_tx, 0x11);
931 MUX_ENUM_CTRL_DECL(t210_i2s3_tx, 0x12);
932 MUX_ENUM_CTRL_DECL(t210_i2s4_tx, 0x13);
933 MUX_ENUM_CTRL_DECL(t210_i2s5_tx, 0x14);
934 MUX_ENUM_CTRL_DECL(t210_sfc1_tx, 0x18);
935 MUX_ENUM_CTRL_DECL(t210_sfc2_tx, 0x19);
936 MUX_ENUM_CTRL_DECL(t210_sfc3_tx, 0x1a);
937 MUX_ENUM_CTRL_DECL(t210_sfc4_tx, 0x1b);
938 MUX_ENUM_CTRL_DECL(t210_mvc1_tx, 0x48);
939 MUX_ENUM_CTRL_DECL(t210_mvc2_tx, 0x49);
940 MUX_ENUM_CTRL_DECL(t210_amx11_tx, 0x50);
941 MUX_ENUM_CTRL_DECL(t210_amx12_tx, 0x51);
942 MUX_ENUM_CTRL_DECL(t210_amx13_tx, 0x52);
943 MUX_ENUM_CTRL_DECL(t210_amx14_tx, 0x53);
944 MUX_ENUM_CTRL_DECL(t210_amx21_tx, 0x54);
945 MUX_ENUM_CTRL_DECL(t210_amx22_tx, 0x55);
946 MUX_ENUM_CTRL_DECL(t210_amx23_tx, 0x56);
947 MUX_ENUM_CTRL_DECL(t210_amx24_tx, 0x57);
948 MUX_ENUM_CTRL_DECL(t210_adx1_tx, 0x58);
949 MUX_ENUM_CTRL_DECL(t210_adx2_tx, 0x59);
950 MUX_ENUM_CTRL_DECL(t210_mixer11_tx, 0x20);
951 MUX_ENUM_CTRL_DECL(t210_mixer12_tx, 0x21);
952 MUX_ENUM_CTRL_DECL(t210_mixer13_tx, 0x22);
953 MUX_ENUM_CTRL_DECL(t210_mixer14_tx, 0x23);
954 MUX_ENUM_CTRL_DECL(t210_mixer15_tx, 0x24);
955 MUX_ENUM_CTRL_DECL(t210_mixer16_tx, 0x25);
956 MUX_ENUM_CTRL_DECL(t210_mixer17_tx, 0x26);
957 MUX_ENUM_CTRL_DECL(t210_mixer18_tx, 0x27);
958 MUX_ENUM_CTRL_DECL(t210_mixer19_tx, 0x28);
959 MUX_ENUM_CTRL_DECL(t210_mixer110_tx, 0x29);
960 MUX_ENUM_CTRL_DECL(t210_ope1_tx, 0x40);
961 MUX_ENUM_CTRL_DECL(t210_ope2_tx, 0x41);
962
963 /* Controls for t186 */
964 MUX_ENUM_CTRL_DECL_186(t186_admaif1_tx, 0x00);
965 MUX_ENUM_CTRL_DECL_186(t186_admaif2_tx, 0x01);
966 MUX_ENUM_CTRL_DECL_186(t186_admaif3_tx, 0x02);
967 MUX_ENUM_CTRL_DECL_186(t186_admaif4_tx, 0x03);
968 MUX_ENUM_CTRL_DECL_186(t186_admaif5_tx, 0x04);
969 MUX_ENUM_CTRL_DECL_186(t186_admaif6_tx, 0x05);
970 MUX_ENUM_CTRL_DECL_186(t186_admaif7_tx, 0x06);
971 MUX_ENUM_CTRL_DECL_186(t186_admaif8_tx, 0x07);
972 MUX_ENUM_CTRL_DECL_186(t186_admaif9_tx, 0x08);
973 MUX_ENUM_CTRL_DECL_186(t186_admaif10_tx, 0x09);
974 MUX_ENUM_CTRL_DECL_186(t186_i2s1_tx, 0x10);
975 MUX_ENUM_CTRL_DECL_186(t186_i2s2_tx, 0x11);
976 MUX_ENUM_CTRL_DECL_186(t186_i2s3_tx, 0x12);
977 MUX_ENUM_CTRL_DECL_186(t186_i2s4_tx, 0x13);
978 MUX_ENUM_CTRL_DECL_186(t186_i2s5_tx, 0x14);
979 MUX_ENUM_CTRL_DECL_186(t186_admaif11_tx, 0x0a);
980 MUX_ENUM_CTRL_DECL_186(t186_admaif12_tx, 0x0b);
981 MUX_ENUM_CTRL_DECL_186(t186_admaif13_tx, 0x0c);
982 MUX_ENUM_CTRL_DECL_186(t186_admaif14_tx, 0x0d);
983 MUX_ENUM_CTRL_DECL_186(t186_admaif15_tx, 0x0e);
984 MUX_ENUM_CTRL_DECL_186(t186_admaif16_tx, 0x0f);
985 MUX_ENUM_CTRL_DECL_186(t186_i2s6_tx, 0x15);
986 MUX_ENUM_CTRL_DECL_186(t186_dspk1_tx, 0x30);
987 MUX_ENUM_CTRL_DECL_186(t186_dspk2_tx, 0x31);
988 MUX_ENUM_CTRL_DECL_186(t186_admaif17_tx, 0x68);
989 MUX_ENUM_CTRL_DECL_186(t186_admaif18_tx, 0x69);
990 MUX_ENUM_CTRL_DECL_186(t186_admaif19_tx, 0x6a);
991 MUX_ENUM_CTRL_DECL_186(t186_admaif20_tx, 0x6b);
992 MUX_ENUM_CTRL_DECL_186(t186_sfc1_tx, 0x18);
993 MUX_ENUM_CTRL_DECL_186(t186_sfc2_tx, 0x19);
994 MUX_ENUM_CTRL_DECL_186(t186_sfc3_tx, 0x1a);
995 MUX_ENUM_CTRL_DECL_186(t186_sfc4_tx, 0x1b);
996 MUX_ENUM_CTRL_DECL_186(t186_mvc1_tx, 0x48);
997 MUX_ENUM_CTRL_DECL_186(t186_mvc2_tx, 0x49);
998 MUX_ENUM_CTRL_DECL_186(t186_amx11_tx, 0x50);
999 MUX_ENUM_CTRL_DECL_186(t186_amx12_tx, 0x51);
1000 MUX_ENUM_CTRL_DECL_186(t186_amx13_tx, 0x52);
1001 MUX_ENUM_CTRL_DECL_186(t186_amx14_tx, 0x53);
1002 MUX_ENUM_CTRL_DECL_186(t186_amx21_tx, 0x54);
1003 MUX_ENUM_CTRL_DECL_186(t186_amx22_tx, 0x55);
1004 MUX_ENUM_CTRL_DECL_186(t186_amx23_tx, 0x56);
1005 MUX_ENUM_CTRL_DECL_186(t186_amx24_tx, 0x57);
1006 MUX_ENUM_CTRL_DECL_186(t186_amx31_tx, 0x58);
1007 MUX_ENUM_CTRL_DECL_186(t186_amx32_tx, 0x59);
1008 MUX_ENUM_CTRL_DECL_186(t186_amx33_tx, 0x5a);
1009 MUX_ENUM_CTRL_DECL_186(t186_amx34_tx, 0x5b);
1010 MUX_ENUM_CTRL_DECL_186(t186_amx41_tx, 0x64);
1011 MUX_ENUM_CTRL_DECL_186(t186_amx42_tx, 0x65);
1012 MUX_ENUM_CTRL_DECL_186(t186_amx43_tx, 0x66);
1013 MUX_ENUM_CTRL_DECL_186(t186_amx44_tx, 0x67);
1014 MUX_ENUM_CTRL_DECL_186(t186_adx1_tx, 0x60);
1015 MUX_ENUM_CTRL_DECL_186(t186_adx2_tx, 0x61);
1016 MUX_ENUM_CTRL_DECL_186(t186_adx3_tx, 0x62);
1017 MUX_ENUM_CTRL_DECL_186(t186_adx4_tx, 0x63);
1018 MUX_ENUM_CTRL_DECL_186(t186_mixer11_tx, 0x20);
1019 MUX_ENUM_CTRL_DECL_186(t186_mixer12_tx, 0x21);
1020 MUX_ENUM_CTRL_DECL_186(t186_mixer13_tx, 0x22);
1021 MUX_ENUM_CTRL_DECL_186(t186_mixer14_tx, 0x23);
1022 MUX_ENUM_CTRL_DECL_186(t186_mixer15_tx, 0x24);
1023 MUX_ENUM_CTRL_DECL_186(t186_mixer16_tx, 0x25);
1024 MUX_ENUM_CTRL_DECL_186(t186_mixer17_tx, 0x26);
1025 MUX_ENUM_CTRL_DECL_186(t186_mixer18_tx, 0x27);
1026 MUX_ENUM_CTRL_DECL_186(t186_mixer19_tx, 0x28);
1027 MUX_ENUM_CTRL_DECL_186(t186_mixer110_tx, 0x29);
1028 MUX_ENUM_CTRL_DECL_186(t186_asrc11_tx, 0x6c);
1029 MUX_ENUM_CTRL_DECL_186(t186_asrc12_tx, 0x6d);
1030 MUX_ENUM_CTRL_DECL_186(t186_asrc13_tx, 0x6e);
1031 MUX_ENUM_CTRL_DECL_186(t186_asrc14_tx, 0x6f);
1032 MUX_ENUM_CTRL_DECL_186(t186_asrc15_tx, 0x70);
1033 MUX_ENUM_CTRL_DECL_186(t186_asrc16_tx, 0x71);
1034 MUX_ENUM_CTRL_DECL_186(t186_asrc17_tx, 0x72);
1035 MUX_ENUM_CTRL_DECL_186(t186_ope1_tx, 0x40);
1036
1037 /* Controls for t234 */
1038 MUX_ENUM_CTRL_DECL_234(t234_mvc1_tx, 0x44);
1039 MUX_ENUM_CTRL_DECL_234(t234_mvc2_tx, 0x45);
1040 MUX_ENUM_CTRL_DECL_234(t234_amx11_tx, 0x48);
1041 MUX_ENUM_CTRL_DECL_234(t234_amx12_tx, 0x49);
1042 MUX_ENUM_CTRL_DECL_234(t234_amx13_tx, 0x4a);
1043 MUX_ENUM_CTRL_DECL_234(t234_amx14_tx, 0x4b);
1044 MUX_ENUM_CTRL_DECL_234(t234_amx21_tx, 0x4c);
1045 MUX_ENUM_CTRL_DECL_234(t234_amx22_tx, 0x4d);
1046 MUX_ENUM_CTRL_DECL_234(t234_amx23_tx, 0x4e);
1047 MUX_ENUM_CTRL_DECL_234(t234_amx24_tx, 0x4f);
1048 MUX_ENUM_CTRL_DECL_234(t234_amx31_tx, 0x50);
1049 MUX_ENUM_CTRL_DECL_234(t234_amx32_tx, 0x51);
1050 MUX_ENUM_CTRL_DECL_234(t234_amx33_tx, 0x52);
1051 MUX_ENUM_CTRL_DECL_234(t234_amx34_tx, 0x53);
1052 MUX_ENUM_CTRL_DECL_234(t234_adx1_tx, 0x58);
1053 MUX_ENUM_CTRL_DECL_234(t234_adx2_tx, 0x59);
1054 MUX_ENUM_CTRL_DECL_234(t234_adx3_tx, 0x5a);
1055 MUX_ENUM_CTRL_DECL_234(t234_adx4_tx, 0x5b);
1056 MUX_ENUM_CTRL_DECL_234(t234_amx41_tx, 0x5c);
1057 MUX_ENUM_CTRL_DECL_234(t234_amx42_tx, 0x5d);
1058 MUX_ENUM_CTRL_DECL_234(t234_amx43_tx, 0x5e);
1059 MUX_ENUM_CTRL_DECL_234(t234_amx44_tx, 0x5f);
1060 MUX_ENUM_CTRL_DECL_234(t234_admaif17_tx, 0x60);
1061 MUX_ENUM_CTRL_DECL_234(t234_admaif18_tx, 0x61);
1062 MUX_ENUM_CTRL_DECL_234(t234_admaif19_tx, 0x62);
1063 MUX_ENUM_CTRL_DECL_234(t234_admaif20_tx, 0x63);
1064 MUX_ENUM_CTRL_DECL_234(t234_asrc11_tx, 0x64);
1065 MUX_ENUM_CTRL_DECL_234(t234_asrc12_tx, 0x65);
1066 MUX_ENUM_CTRL_DECL_234(t234_asrc13_tx, 0x66);
1067 MUX_ENUM_CTRL_DECL_234(t234_asrc14_tx, 0x67);
1068 MUX_ENUM_CTRL_DECL_234(t234_asrc15_tx, 0x68);
1069 MUX_ENUM_CTRL_DECL_234(t234_asrc16_tx, 0x69);
1070 MUX_ENUM_CTRL_DECL_234(t234_asrc17_tx, 0x6a);
1071
1072 /* Controls for t264 */
1073 MUX_ENUM_CTRL_DECL_264(t264_admaif1_tx, 0x00);
1074 MUX_ENUM_CTRL_DECL_264(t264_admaif2_tx, 0x01);
1075 MUX_ENUM_CTRL_DECL_264(t264_admaif3_tx, 0x02);
1076 MUX_ENUM_CTRL_DECL_264(t264_admaif4_tx, 0x03);
1077 MUX_ENUM_CTRL_DECL_264(t264_admaif5_tx, 0x04);
1078 MUX_ENUM_CTRL_DECL_264(t264_admaif6_tx, 0x05);
1079 MUX_ENUM_CTRL_DECL_264(t264_admaif7_tx, 0x06);
1080 MUX_ENUM_CTRL_DECL_264(t264_admaif8_tx, 0x07);
1081 MUX_ENUM_CTRL_DECL_264(t264_admaif9_tx, 0x08);
1082 MUX_ENUM_CTRL_DECL_264(t264_admaif10_tx, 0x09);
1083 MUX_ENUM_CTRL_DECL_264(t264_admaif11_tx, 0x0a);
1084 MUX_ENUM_CTRL_DECL_264(t264_admaif12_tx, 0x0b);
1085 MUX_ENUM_CTRL_DECL_264(t264_admaif13_tx, 0x0c);
1086 MUX_ENUM_CTRL_DECL_264(t264_admaif14_tx, 0x0d);
1087 MUX_ENUM_CTRL_DECL_264(t264_admaif15_tx, 0x0e);
1088 MUX_ENUM_CTRL_DECL_264(t264_admaif16_tx, 0x0f);
1089 MUX_ENUM_CTRL_DECL_264(t264_i2s1_tx, 0x10);
1090 MUX_ENUM_CTRL_DECL_264(t264_i2s2_tx, 0x11);
1091 MUX_ENUM_CTRL_DECL_264(t264_i2s3_tx, 0x12);
1092 MUX_ENUM_CTRL_DECL_264(t264_i2s4_tx, 0x13);
1093 MUX_ENUM_CTRL_DECL_264(t264_i2s5_tx, 0x14);
1094 MUX_ENUM_CTRL_DECL_264(t264_i2s6_tx, 0x15);
1095 MUX_ENUM_CTRL_DECL_264(t264_i2s7_tx, 0x16);
1096 MUX_ENUM_CTRL_DECL_264(t264_i2s8_tx, 0x17);
1097 MUX_ENUM_CTRL_DECL_264(t264_sfc1_tx, 0x18);
1098 MUX_ENUM_CTRL_DECL_264(t264_sfc2_tx, 0x19);
1099 MUX_ENUM_CTRL_DECL_264(t264_sfc3_tx, 0x1a);
1100 MUX_ENUM_CTRL_DECL_264(t264_sfc4_tx, 0x1b);
1101 MUX_ENUM_CTRL_DECL_264(t264_mixer11_tx, 0x20);
1102 MUX_ENUM_CTRL_DECL_264(t264_mixer12_tx, 0x21);
1103 MUX_ENUM_CTRL_DECL_264(t264_mixer13_tx, 0x22);
1104 MUX_ENUM_CTRL_DECL_264(t264_mixer14_tx, 0x23);
1105 MUX_ENUM_CTRL_DECL_264(t264_mixer15_tx, 0x24);
1106 MUX_ENUM_CTRL_DECL_264(t264_mixer16_tx, 0x25);
1107 MUX_ENUM_CTRL_DECL_264(t264_mixer17_tx, 0x26);
1108 MUX_ENUM_CTRL_DECL_264(t264_mixer18_tx, 0x27);
1109 MUX_ENUM_CTRL_DECL_264(t264_mixer19_tx, 0x28);
1110 MUX_ENUM_CTRL_DECL_264(t264_mixer110_tx, 0x29);
1111 MUX_ENUM_CTRL_DECL_264(t264_dspk1_tx, 0x30);
1112 MUX_ENUM_CTRL_DECL_264(t264_ope1_tx, 0x40);
1113 MUX_ENUM_CTRL_DECL_264(t264_mvc1_tx, 0x44);
1114 MUX_ENUM_CTRL_DECL_264(t264_mvc2_tx, 0x45);
1115 MUX_ENUM_CTRL_DECL_264(t264_amx11_tx, 0x48);
1116 MUX_ENUM_CTRL_DECL_264(t264_amx12_tx, 0x49);
1117 MUX_ENUM_CTRL_DECL_264(t264_amx13_tx, 0x4a);
1118 MUX_ENUM_CTRL_DECL_264(t264_amx14_tx, 0x4b);
1119 MUX_ENUM_CTRL_DECL_264(t264_amx21_tx, 0x4c);
1120 MUX_ENUM_CTRL_DECL_264(t264_amx22_tx, 0x4d);
1121 MUX_ENUM_CTRL_DECL_264(t264_amx23_tx, 0x4e);
1122 MUX_ENUM_CTRL_DECL_264(t264_amx24_tx, 0x4f);
1123 MUX_ENUM_CTRL_DECL_264(t264_amx31_tx, 0x50);
1124 MUX_ENUM_CTRL_DECL_264(t264_amx32_tx, 0x51);
1125 MUX_ENUM_CTRL_DECL_264(t264_amx33_tx, 0x52);
1126 MUX_ENUM_CTRL_DECL_264(t264_amx34_tx, 0x53);
1127 MUX_ENUM_CTRL_DECL_264(t264_adx1_tx, 0x58);
1128 MUX_ENUM_CTRL_DECL_264(t264_adx2_tx, 0x59);
1129 MUX_ENUM_CTRL_DECL_264(t264_adx3_tx, 0x5a);
1130 MUX_ENUM_CTRL_DECL_264(t264_adx4_tx, 0x5b);
1131 MUX_ENUM_CTRL_DECL_264(t264_amx41_tx, 0x5c);
1132 MUX_ENUM_CTRL_DECL_264(t264_amx42_tx, 0x5d);
1133 MUX_ENUM_CTRL_DECL_264(t264_amx43_tx, 0x5e);
1134 MUX_ENUM_CTRL_DECL_264(t264_amx44_tx, 0x5f);
1135 MUX_ENUM_CTRL_DECL_264(t264_admaif17_tx, 0x60);
1136 MUX_ENUM_CTRL_DECL_264(t264_admaif18_tx, 0x61);
1137 MUX_ENUM_CTRL_DECL_264(t264_admaif19_tx, 0x62);
1138 MUX_ENUM_CTRL_DECL_264(t264_admaif20_tx, 0x63);
1139 MUX_ENUM_CTRL_DECL_264(t264_asrc11_tx, 0x64);
1140 MUX_ENUM_CTRL_DECL_264(t264_asrc12_tx, 0x65);
1141 MUX_ENUM_CTRL_DECL_264(t264_asrc13_tx, 0x66);
1142 MUX_ENUM_CTRL_DECL_264(t264_asrc14_tx, 0x67);
1143 MUX_ENUM_CTRL_DECL_264(t264_asrc15_tx, 0x68);
1144 MUX_ENUM_CTRL_DECL_264(t264_asrc16_tx, 0x69);
1145 MUX_ENUM_CTRL_DECL_264(t264_asrc17_tx, 0x6a);
1146 MUX_ENUM_CTRL_DECL_264(t264_admaif21_tx, 0x74);
1147 MUX_ENUM_CTRL_DECL_264(t264_admaif22_tx, 0x75);
1148 MUX_ENUM_CTRL_DECL_264(t264_admaif23_tx, 0x76);
1149 MUX_ENUM_CTRL_DECL_264(t264_admaif24_tx, 0x77);
1150 MUX_ENUM_CTRL_DECL_264(t264_admaif25_tx, 0x78);
1151 MUX_ENUM_CTRL_DECL_264(t264_admaif26_tx, 0x79);
1152 MUX_ENUM_CTRL_DECL_264(t264_admaif27_tx, 0x7a);
1153 MUX_ENUM_CTRL_DECL_264(t264_admaif28_tx, 0x7b);
1154 MUX_ENUM_CTRL_DECL_264(t264_admaif29_tx, 0x7c);
1155 MUX_ENUM_CTRL_DECL_264(t264_admaif30_tx, 0x7d);
1156 MUX_ENUM_CTRL_DECL_264(t264_admaif31_tx, 0x7e);
1157 MUX_ENUM_CTRL_DECL_264(t264_admaif32_tx, 0x7f);
1158 MUX_ENUM_CTRL_DECL_264(t264_amx51_tx, 0x80);
1159 MUX_ENUM_CTRL_DECL_264(t264_amx52_tx, 0x81);
1160 MUX_ENUM_CTRL_DECL_264(t264_amx53_tx, 0x82);
1161 MUX_ENUM_CTRL_DECL_264(t264_amx54_tx, 0x83);
1162 MUX_ENUM_CTRL_DECL_264(t264_amx61_tx, 0x84);
1163 MUX_ENUM_CTRL_DECL_264(t264_amx62_tx, 0x85);
1164 MUX_ENUM_CTRL_DECL_264(t264_amx63_tx, 0x86);
1165 MUX_ENUM_CTRL_DECL_264(t264_amx64_tx, 0x87);
1166 MUX_ENUM_CTRL_DECL_264(t264_adx5_tx, 0x88);
1167 MUX_ENUM_CTRL_DECL_264(t264_adx6_tx, 0x89);
1168
1169 static const struct snd_soc_dapm_widget tegra210_ahub_widgets[] = {
1170 WIDGETS("ADMAIF1", t210_admaif1_tx),
1171 WIDGETS("ADMAIF2", t210_admaif2_tx),
1172 WIDGETS("ADMAIF3", t210_admaif3_tx),
1173 WIDGETS("ADMAIF4", t210_admaif4_tx),
1174 WIDGETS("ADMAIF5", t210_admaif5_tx),
1175 WIDGETS("ADMAIF6", t210_admaif6_tx),
1176 WIDGETS("ADMAIF7", t210_admaif7_tx),
1177 WIDGETS("ADMAIF8", t210_admaif8_tx),
1178 WIDGETS("ADMAIF9", t210_admaif9_tx),
1179 WIDGETS("ADMAIF10", t210_admaif10_tx),
1180 WIDGETS("I2S1", t210_i2s1_tx),
1181 WIDGETS("I2S2", t210_i2s2_tx),
1182 WIDGETS("I2S3", t210_i2s3_tx),
1183 WIDGETS("I2S4", t210_i2s4_tx),
1184 WIDGETS("I2S5", t210_i2s5_tx),
1185 TX_WIDGETS("DMIC1"),
1186 TX_WIDGETS("DMIC2"),
1187 TX_WIDGETS("DMIC3"),
1188 WIDGETS("SFC1", t210_sfc1_tx),
1189 WIDGETS("SFC2", t210_sfc2_tx),
1190 WIDGETS("SFC3", t210_sfc3_tx),
1191 WIDGETS("SFC4", t210_sfc4_tx),
1192 WIDGETS("MVC1", t210_mvc1_tx),
1193 WIDGETS("MVC2", t210_mvc2_tx),
1194 WIDGETS("AMX1 RX1", t210_amx11_tx),
1195 WIDGETS("AMX1 RX2", t210_amx12_tx),
1196 WIDGETS("AMX1 RX3", t210_amx13_tx),
1197 WIDGETS("AMX1 RX4", t210_amx14_tx),
1198 WIDGETS("AMX2 RX1", t210_amx21_tx),
1199 WIDGETS("AMX2 RX2", t210_amx22_tx),
1200 WIDGETS("AMX2 RX3", t210_amx23_tx),
1201 WIDGETS("AMX2 RX4", t210_amx24_tx),
1202 TX_WIDGETS("AMX1"),
1203 TX_WIDGETS("AMX2"),
1204 WIDGETS("ADX1", t210_adx1_tx),
1205 WIDGETS("ADX2", t210_adx2_tx),
1206 TX_WIDGETS("ADX1 TX1"),
1207 TX_WIDGETS("ADX1 TX2"),
1208 TX_WIDGETS("ADX1 TX3"),
1209 TX_WIDGETS("ADX1 TX4"),
1210 TX_WIDGETS("ADX2 TX1"),
1211 TX_WIDGETS("ADX2 TX2"),
1212 TX_WIDGETS("ADX2 TX3"),
1213 TX_WIDGETS("ADX2 TX4"),
1214 WIDGETS("MIXER1 RX1", t210_mixer11_tx),
1215 WIDGETS("MIXER1 RX2", t210_mixer12_tx),
1216 WIDGETS("MIXER1 RX3", t210_mixer13_tx),
1217 WIDGETS("MIXER1 RX4", t210_mixer14_tx),
1218 WIDGETS("MIXER1 RX5", t210_mixer15_tx),
1219 WIDGETS("MIXER1 RX6", t210_mixer16_tx),
1220 WIDGETS("MIXER1 RX7", t210_mixer17_tx),
1221 WIDGETS("MIXER1 RX8", t210_mixer18_tx),
1222 WIDGETS("MIXER1 RX9", t210_mixer19_tx),
1223 WIDGETS("MIXER1 RX10", t210_mixer110_tx),
1224 TX_WIDGETS("MIXER1 TX1"),
1225 TX_WIDGETS("MIXER1 TX2"),
1226 TX_WIDGETS("MIXER1 TX3"),
1227 TX_WIDGETS("MIXER1 TX4"),
1228 TX_WIDGETS("MIXER1 TX5"),
1229 WIDGETS("OPE1", t210_ope1_tx),
1230 WIDGETS("OPE2", t210_ope2_tx),
1231 };
1232
1233 static const struct snd_soc_dapm_widget tegra186_ahub_widgets[] = {
1234 WIDGETS("ADMAIF1", t186_admaif1_tx),
1235 WIDGETS("ADMAIF2", t186_admaif2_tx),
1236 WIDGETS("ADMAIF3", t186_admaif3_tx),
1237 WIDGETS("ADMAIF4", t186_admaif4_tx),
1238 WIDGETS("ADMAIF5", t186_admaif5_tx),
1239 WIDGETS("ADMAIF6", t186_admaif6_tx),
1240 WIDGETS("ADMAIF7", t186_admaif7_tx),
1241 WIDGETS("ADMAIF8", t186_admaif8_tx),
1242 WIDGETS("ADMAIF9", t186_admaif9_tx),
1243 WIDGETS("ADMAIF10", t186_admaif10_tx),
1244 WIDGETS("ADMAIF11", t186_admaif11_tx),
1245 WIDGETS("ADMAIF12", t186_admaif12_tx),
1246 WIDGETS("ADMAIF13", t186_admaif13_tx),
1247 WIDGETS("ADMAIF14", t186_admaif14_tx),
1248 WIDGETS("ADMAIF15", t186_admaif15_tx),
1249 WIDGETS("ADMAIF16", t186_admaif16_tx),
1250 WIDGETS("ADMAIF17", t186_admaif17_tx),
1251 WIDGETS("ADMAIF18", t186_admaif18_tx),
1252 WIDGETS("ADMAIF19", t186_admaif19_tx),
1253 WIDGETS("ADMAIF20", t186_admaif20_tx),
1254 WIDGETS("I2S1", t186_i2s1_tx),
1255 WIDGETS("I2S2", t186_i2s2_tx),
1256 WIDGETS("I2S3", t186_i2s3_tx),
1257 WIDGETS("I2S4", t186_i2s4_tx),
1258 WIDGETS("I2S5", t186_i2s5_tx),
1259 WIDGETS("I2S6", t186_i2s6_tx),
1260 TX_WIDGETS("DMIC1"),
1261 TX_WIDGETS("DMIC2"),
1262 TX_WIDGETS("DMIC3"),
1263 TX_WIDGETS("DMIC4"),
1264 WIDGETS("DSPK1", t186_dspk1_tx),
1265 WIDGETS("DSPK2", t186_dspk2_tx),
1266 WIDGETS("SFC1", t186_sfc1_tx),
1267 WIDGETS("SFC2", t186_sfc2_tx),
1268 WIDGETS("SFC3", t186_sfc3_tx),
1269 WIDGETS("SFC4", t186_sfc4_tx),
1270 WIDGETS("MVC1", t186_mvc1_tx),
1271 WIDGETS("MVC2", t186_mvc2_tx),
1272 WIDGETS("AMX1 RX1", t186_amx11_tx),
1273 WIDGETS("AMX1 RX2", t186_amx12_tx),
1274 WIDGETS("AMX1 RX3", t186_amx13_tx),
1275 WIDGETS("AMX1 RX4", t186_amx14_tx),
1276 WIDGETS("AMX2 RX1", t186_amx21_tx),
1277 WIDGETS("AMX2 RX2", t186_amx22_tx),
1278 WIDGETS("AMX2 RX3", t186_amx23_tx),
1279 WIDGETS("AMX2 RX4", t186_amx24_tx),
1280 WIDGETS("AMX3 RX1", t186_amx31_tx),
1281 WIDGETS("AMX3 RX2", t186_amx32_tx),
1282 WIDGETS("AMX3 RX3", t186_amx33_tx),
1283 WIDGETS("AMX3 RX4", t186_amx34_tx),
1284 WIDGETS("AMX4 RX1", t186_amx41_tx),
1285 WIDGETS("AMX4 RX2", t186_amx42_tx),
1286 WIDGETS("AMX4 RX3", t186_amx43_tx),
1287 WIDGETS("AMX4 RX4", t186_amx44_tx),
1288 TX_WIDGETS("AMX1"),
1289 TX_WIDGETS("AMX2"),
1290 TX_WIDGETS("AMX3"),
1291 TX_WIDGETS("AMX4"),
1292 WIDGETS("ADX1", t186_adx1_tx),
1293 WIDGETS("ADX2", t186_adx2_tx),
1294 WIDGETS("ADX3", t186_adx3_tx),
1295 WIDGETS("ADX4", t186_adx4_tx),
1296 TX_WIDGETS("ADX1 TX1"),
1297 TX_WIDGETS("ADX1 TX2"),
1298 TX_WIDGETS("ADX1 TX3"),
1299 TX_WIDGETS("ADX1 TX4"),
1300 TX_WIDGETS("ADX2 TX1"),
1301 TX_WIDGETS("ADX2 TX2"),
1302 TX_WIDGETS("ADX2 TX3"),
1303 TX_WIDGETS("ADX2 TX4"),
1304 TX_WIDGETS("ADX3 TX1"),
1305 TX_WIDGETS("ADX3 TX2"),
1306 TX_WIDGETS("ADX3 TX3"),
1307 TX_WIDGETS("ADX3 TX4"),
1308 TX_WIDGETS("ADX4 TX1"),
1309 TX_WIDGETS("ADX4 TX2"),
1310 TX_WIDGETS("ADX4 TX3"),
1311 TX_WIDGETS("ADX4 TX4"),
1312 WIDGETS("MIXER1 RX1", t186_mixer11_tx),
1313 WIDGETS("MIXER1 RX2", t186_mixer12_tx),
1314 WIDGETS("MIXER1 RX3", t186_mixer13_tx),
1315 WIDGETS("MIXER1 RX4", t186_mixer14_tx),
1316 WIDGETS("MIXER1 RX5", t186_mixer15_tx),
1317 WIDGETS("MIXER1 RX6", t186_mixer16_tx),
1318 WIDGETS("MIXER1 RX7", t186_mixer17_tx),
1319 WIDGETS("MIXER1 RX8", t186_mixer18_tx),
1320 WIDGETS("MIXER1 RX9", t186_mixer19_tx),
1321 WIDGETS("MIXER1 RX10", t186_mixer110_tx),
1322 TX_WIDGETS("MIXER1 TX1"),
1323 TX_WIDGETS("MIXER1 TX2"),
1324 TX_WIDGETS("MIXER1 TX3"),
1325 TX_WIDGETS("MIXER1 TX4"),
1326 TX_WIDGETS("MIXER1 TX5"),
1327 WIDGETS("ASRC1 RX1", t186_asrc11_tx),
1328 WIDGETS("ASRC1 RX2", t186_asrc12_tx),
1329 WIDGETS("ASRC1 RX3", t186_asrc13_tx),
1330 WIDGETS("ASRC1 RX4", t186_asrc14_tx),
1331 WIDGETS("ASRC1 RX5", t186_asrc15_tx),
1332 WIDGETS("ASRC1 RX6", t186_asrc16_tx),
1333 WIDGETS("ASRC1 RX7", t186_asrc17_tx),
1334 TX_WIDGETS("ASRC1 TX1"),
1335 TX_WIDGETS("ASRC1 TX2"),
1336 TX_WIDGETS("ASRC1 TX3"),
1337 TX_WIDGETS("ASRC1 TX4"),
1338 TX_WIDGETS("ASRC1 TX5"),
1339 TX_WIDGETS("ASRC1 TX6"),
1340 WIDGETS("OPE1", t186_ope1_tx),
1341 };
1342
1343 static const struct snd_soc_dapm_widget tegra234_ahub_widgets[] = {
1344 WIDGETS("ADMAIF1", t186_admaif1_tx),
1345 WIDGETS("ADMAIF2", t186_admaif2_tx),
1346 WIDGETS("ADMAIF3", t186_admaif3_tx),
1347 WIDGETS("ADMAIF4", t186_admaif4_tx),
1348 WIDGETS("ADMAIF5", t186_admaif5_tx),
1349 WIDGETS("ADMAIF6", t186_admaif6_tx),
1350 WIDGETS("ADMAIF7", t186_admaif7_tx),
1351 WIDGETS("ADMAIF8", t186_admaif8_tx),
1352 WIDGETS("ADMAIF9", t186_admaif9_tx),
1353 WIDGETS("ADMAIF10", t186_admaif10_tx),
1354 WIDGETS("ADMAIF11", t186_admaif11_tx),
1355 WIDGETS("ADMAIF12", t186_admaif12_tx),
1356 WIDGETS("ADMAIF13", t186_admaif13_tx),
1357 WIDGETS("ADMAIF14", t186_admaif14_tx),
1358 WIDGETS("ADMAIF15", t186_admaif15_tx),
1359 WIDGETS("ADMAIF16", t186_admaif16_tx),
1360 WIDGETS("ADMAIF17", t234_admaif17_tx),
1361 WIDGETS("ADMAIF18", t234_admaif18_tx),
1362 WIDGETS("ADMAIF19", t234_admaif19_tx),
1363 WIDGETS("ADMAIF20", t234_admaif20_tx),
1364 WIDGETS("I2S1", t186_i2s1_tx),
1365 WIDGETS("I2S2", t186_i2s2_tx),
1366 WIDGETS("I2S3", t186_i2s3_tx),
1367 WIDGETS("I2S4", t186_i2s4_tx),
1368 WIDGETS("I2S5", t186_i2s5_tx),
1369 WIDGETS("I2S6", t186_i2s6_tx),
1370 TX_WIDGETS("DMIC1"),
1371 TX_WIDGETS("DMIC2"),
1372 TX_WIDGETS("DMIC3"),
1373 TX_WIDGETS("DMIC4"),
1374 WIDGETS("DSPK1", t186_dspk1_tx),
1375 WIDGETS("DSPK2", t186_dspk2_tx),
1376 WIDGETS("SFC1", t186_sfc1_tx),
1377 WIDGETS("SFC2", t186_sfc2_tx),
1378 WIDGETS("SFC3", t186_sfc3_tx),
1379 WIDGETS("SFC4", t186_sfc4_tx),
1380 WIDGETS("MVC1", t234_mvc1_tx),
1381 WIDGETS("MVC2", t234_mvc2_tx),
1382 WIDGETS("AMX1 RX1", t234_amx11_tx),
1383 WIDGETS("AMX1 RX2", t234_amx12_tx),
1384 WIDGETS("AMX1 RX3", t234_amx13_tx),
1385 WIDGETS("AMX1 RX4", t234_amx14_tx),
1386 WIDGETS("AMX2 RX1", t234_amx21_tx),
1387 WIDGETS("AMX2 RX2", t234_amx22_tx),
1388 WIDGETS("AMX2 RX3", t234_amx23_tx),
1389 WIDGETS("AMX2 RX4", t234_amx24_tx),
1390 WIDGETS("AMX3 RX1", t234_amx31_tx),
1391 WIDGETS("AMX3 RX2", t234_amx32_tx),
1392 WIDGETS("AMX3 RX3", t234_amx33_tx),
1393 WIDGETS("AMX3 RX4", t234_amx34_tx),
1394 WIDGETS("AMX4 RX1", t234_amx41_tx),
1395 WIDGETS("AMX4 RX2", t234_amx42_tx),
1396 WIDGETS("AMX4 RX3", t234_amx43_tx),
1397 WIDGETS("AMX4 RX4", t234_amx44_tx),
1398 TX_WIDGETS("AMX1"),
1399 TX_WIDGETS("AMX2"),
1400 TX_WIDGETS("AMX3"),
1401 TX_WIDGETS("AMX4"),
1402 WIDGETS("ADX1", t234_adx1_tx),
1403 WIDGETS("ADX2", t234_adx2_tx),
1404 WIDGETS("ADX3", t234_adx3_tx),
1405 WIDGETS("ADX4", t234_adx4_tx),
1406 TX_WIDGETS("ADX1 TX1"),
1407 TX_WIDGETS("ADX1 TX2"),
1408 TX_WIDGETS("ADX1 TX3"),
1409 TX_WIDGETS("ADX1 TX4"),
1410 TX_WIDGETS("ADX2 TX1"),
1411 TX_WIDGETS("ADX2 TX2"),
1412 TX_WIDGETS("ADX2 TX3"),
1413 TX_WIDGETS("ADX2 TX4"),
1414 TX_WIDGETS("ADX3 TX1"),
1415 TX_WIDGETS("ADX3 TX2"),
1416 TX_WIDGETS("ADX3 TX3"),
1417 TX_WIDGETS("ADX3 TX4"),
1418 TX_WIDGETS("ADX4 TX1"),
1419 TX_WIDGETS("ADX4 TX2"),
1420 TX_WIDGETS("ADX4 TX3"),
1421 TX_WIDGETS("ADX4 TX4"),
1422 WIDGETS("MIXER1 RX1", t186_mixer11_tx),
1423 WIDGETS("MIXER1 RX2", t186_mixer12_tx),
1424 WIDGETS("MIXER1 RX3", t186_mixer13_tx),
1425 WIDGETS("MIXER1 RX4", t186_mixer14_tx),
1426 WIDGETS("MIXER1 RX5", t186_mixer15_tx),
1427 WIDGETS("MIXER1 RX6", t186_mixer16_tx),
1428 WIDGETS("MIXER1 RX7", t186_mixer17_tx),
1429 WIDGETS("MIXER1 RX8", t186_mixer18_tx),
1430 WIDGETS("MIXER1 RX9", t186_mixer19_tx),
1431 WIDGETS("MIXER1 RX10", t186_mixer110_tx),
1432 TX_WIDGETS("MIXER1 TX1"),
1433 TX_WIDGETS("MIXER1 TX2"),
1434 TX_WIDGETS("MIXER1 TX3"),
1435 TX_WIDGETS("MIXER1 TX4"),
1436 TX_WIDGETS("MIXER1 TX5"),
1437 WIDGETS("ASRC1 RX1", t234_asrc11_tx),
1438 WIDGETS("ASRC1 RX2", t234_asrc12_tx),
1439 WIDGETS("ASRC1 RX3", t234_asrc13_tx),
1440 WIDGETS("ASRC1 RX4", t234_asrc14_tx),
1441 WIDGETS("ASRC1 RX5", t234_asrc15_tx),
1442 WIDGETS("ASRC1 RX6", t234_asrc16_tx),
1443 WIDGETS("ASRC1 RX7", t234_asrc17_tx),
1444 TX_WIDGETS("ASRC1 TX1"),
1445 TX_WIDGETS("ASRC1 TX2"),
1446 TX_WIDGETS("ASRC1 TX3"),
1447 TX_WIDGETS("ASRC1 TX4"),
1448 TX_WIDGETS("ASRC1 TX5"),
1449 TX_WIDGETS("ASRC1 TX6"),
1450 WIDGETS("OPE1", t186_ope1_tx),
1451 };
1452
1453 static const struct snd_soc_dapm_widget tegra264_ahub_widgets[] = {
1454 WIDGETS("ADMAIF1", t264_admaif1_tx),
1455 WIDGETS("ADMAIF2", t264_admaif2_tx),
1456 WIDGETS("ADMAIF3", t264_admaif3_tx),
1457 WIDGETS("ADMAIF4", t264_admaif4_tx),
1458 WIDGETS("ADMAIF5", t264_admaif5_tx),
1459 WIDGETS("ADMAIF6", t264_admaif6_tx),
1460 WIDGETS("ADMAIF7", t264_admaif7_tx),
1461 WIDGETS("ADMAIF8", t264_admaif8_tx),
1462 WIDGETS("ADMAIF9", t264_admaif9_tx),
1463 WIDGETS("ADMAIF10", t264_admaif10_tx),
1464 WIDGETS("ADMAIF11", t264_admaif11_tx),
1465 WIDGETS("ADMAIF12", t264_admaif12_tx),
1466 WIDGETS("ADMAIF13", t264_admaif13_tx),
1467 WIDGETS("ADMAIF14", t264_admaif14_tx),
1468 WIDGETS("ADMAIF15", t264_admaif15_tx),
1469 WIDGETS("ADMAIF16", t264_admaif16_tx),
1470 WIDGETS("ADMAIF17", t264_admaif17_tx),
1471 WIDGETS("ADMAIF18", t264_admaif18_tx),
1472 WIDGETS("ADMAIF19", t264_admaif19_tx),
1473 WIDGETS("ADMAIF20", t264_admaif20_tx),
1474 WIDGETS("ADMAIF21", t264_admaif21_tx),
1475 WIDGETS("ADMAIF22", t264_admaif22_tx),
1476 WIDGETS("ADMAIF23", t264_admaif23_tx),
1477 WIDGETS("ADMAIF24", t264_admaif24_tx),
1478 WIDGETS("ADMAIF25", t264_admaif25_tx),
1479 WIDGETS("ADMAIF26", t264_admaif26_tx),
1480 WIDGETS("ADMAIF27", t264_admaif27_tx),
1481 WIDGETS("ADMAIF28", t264_admaif28_tx),
1482 WIDGETS("ADMAIF29", t264_admaif29_tx),
1483 WIDGETS("ADMAIF30", t264_admaif30_tx),
1484 WIDGETS("ADMAIF31", t264_admaif31_tx),
1485 WIDGETS("ADMAIF32", t264_admaif32_tx),
1486 WIDGETS("I2S1", t264_i2s1_tx),
1487 WIDGETS("I2S2", t264_i2s2_tx),
1488 WIDGETS("I2S3", t264_i2s3_tx),
1489 WIDGETS("I2S4", t264_i2s4_tx),
1490 WIDGETS("I2S5", t264_i2s5_tx),
1491 WIDGETS("I2S6", t264_i2s6_tx),
1492 WIDGETS("I2S7", t264_i2s7_tx),
1493 WIDGETS("I2S8", t264_i2s8_tx),
1494 TX_WIDGETS("DMIC1"),
1495 TX_WIDGETS("DMIC2"),
1496 WIDGETS("DSPK1", t264_dspk1_tx),
1497 WIDGETS("SFC1", t264_sfc1_tx),
1498 WIDGETS("SFC2", t264_sfc2_tx),
1499 WIDGETS("SFC3", t264_sfc3_tx),
1500 WIDGETS("SFC4", t264_sfc4_tx),
1501 WIDGETS("MVC1", t264_mvc1_tx),
1502 WIDGETS("MVC2", t264_mvc2_tx),
1503 WIDGETS("AMX1 RX1", t264_amx11_tx),
1504 WIDGETS("AMX1 RX2", t264_amx12_tx),
1505 WIDGETS("AMX1 RX3", t264_amx13_tx),
1506 WIDGETS("AMX1 RX4", t264_amx14_tx),
1507 WIDGETS("AMX2 RX1", t264_amx21_tx),
1508 WIDGETS("AMX2 RX2", t264_amx22_tx),
1509 WIDGETS("AMX2 RX3", t264_amx23_tx),
1510 WIDGETS("AMX2 RX4", t264_amx24_tx),
1511 WIDGETS("AMX3 RX1", t264_amx31_tx),
1512 WIDGETS("AMX3 RX2", t264_amx32_tx),
1513 WIDGETS("AMX3 RX3", t264_amx33_tx),
1514 WIDGETS("AMX3 RX4", t264_amx34_tx),
1515 WIDGETS("AMX4 RX1", t264_amx41_tx),
1516 WIDGETS("AMX4 RX2", t264_amx42_tx),
1517 WIDGETS("AMX4 RX3", t264_amx43_tx),
1518 WIDGETS("AMX4 RX4", t264_amx44_tx),
1519 WIDGETS("AMX5 RX1", t264_amx51_tx),
1520 WIDGETS("AMX5 RX2", t264_amx52_tx),
1521 WIDGETS("AMX5 RX3", t264_amx53_tx),
1522 WIDGETS("AMX5 RX4", t264_amx54_tx),
1523 WIDGETS("AMX6 RX1", t264_amx61_tx),
1524 WIDGETS("AMX6 RX2", t264_amx62_tx),
1525 WIDGETS("AMX6 RX3", t264_amx63_tx),
1526 WIDGETS("AMX6 RX4", t264_amx64_tx),
1527 TX_WIDGETS("AMX1"),
1528 TX_WIDGETS("AMX2"),
1529 TX_WIDGETS("AMX3"),
1530 TX_WIDGETS("AMX4"),
1531 TX_WIDGETS("AMX5"),
1532 TX_WIDGETS("AMX6"),
1533 WIDGETS("ADX1", t264_adx1_tx),
1534 WIDGETS("ADX2", t264_adx2_tx),
1535 WIDGETS("ADX3", t264_adx3_tx),
1536 WIDGETS("ADX4", t264_adx4_tx),
1537 WIDGETS("ADX5", t264_adx5_tx),
1538 WIDGETS("ADX6", t264_adx6_tx),
1539 TX_WIDGETS("ADX1 TX1"),
1540 TX_WIDGETS("ADX1 TX2"),
1541 TX_WIDGETS("ADX1 TX3"),
1542 TX_WIDGETS("ADX1 TX4"),
1543 TX_WIDGETS("ADX2 TX1"),
1544 TX_WIDGETS("ADX2 TX2"),
1545 TX_WIDGETS("ADX2 TX3"),
1546 TX_WIDGETS("ADX2 TX4"),
1547 TX_WIDGETS("ADX3 TX1"),
1548 TX_WIDGETS("ADX3 TX2"),
1549 TX_WIDGETS("ADX3 TX3"),
1550 TX_WIDGETS("ADX3 TX4"),
1551 TX_WIDGETS("ADX4 TX1"),
1552 TX_WIDGETS("ADX4 TX2"),
1553 TX_WIDGETS("ADX4 TX3"),
1554 TX_WIDGETS("ADX4 TX4"),
1555 TX_WIDGETS("ADX5 TX1"),
1556 TX_WIDGETS("ADX5 TX2"),
1557 TX_WIDGETS("ADX5 TX3"),
1558 TX_WIDGETS("ADX5 TX4"),
1559 TX_WIDGETS("ADX6 TX1"),
1560 TX_WIDGETS("ADX6 TX2"),
1561 TX_WIDGETS("ADX6 TX3"),
1562 TX_WIDGETS("ADX6 TX4"),
1563 WIDGETS("MIXER1 RX1", t264_mixer11_tx),
1564 WIDGETS("MIXER1 RX2", t264_mixer12_tx),
1565 WIDGETS("MIXER1 RX3", t264_mixer13_tx),
1566 WIDGETS("MIXER1 RX4", t264_mixer14_tx),
1567 WIDGETS("MIXER1 RX5", t264_mixer15_tx),
1568 WIDGETS("MIXER1 RX6", t264_mixer16_tx),
1569 WIDGETS("MIXER1 RX7", t264_mixer17_tx),
1570 WIDGETS("MIXER1 RX8", t264_mixer18_tx),
1571 WIDGETS("MIXER1 RX9", t264_mixer19_tx),
1572 WIDGETS("MIXER1 RX10", t264_mixer110_tx),
1573 TX_WIDGETS("MIXER1 TX1"),
1574 TX_WIDGETS("MIXER1 TX2"),
1575 TX_WIDGETS("MIXER1 TX3"),
1576 TX_WIDGETS("MIXER1 TX4"),
1577 TX_WIDGETS("MIXER1 TX5"),
1578 WIDGETS("ASRC1 RX1", t264_asrc11_tx),
1579 WIDGETS("ASRC1 RX2", t264_asrc12_tx),
1580 WIDGETS("ASRC1 RX3", t264_asrc13_tx),
1581 WIDGETS("ASRC1 RX4", t264_asrc14_tx),
1582 WIDGETS("ASRC1 RX5", t264_asrc15_tx),
1583 WIDGETS("ASRC1 RX6", t264_asrc16_tx),
1584 WIDGETS("ASRC1 RX7", t264_asrc17_tx),
1585 TX_WIDGETS("ASRC1 TX1"),
1586 TX_WIDGETS("ASRC1 TX2"),
1587 TX_WIDGETS("ASRC1 TX3"),
1588 TX_WIDGETS("ASRC1 TX4"),
1589 TX_WIDGETS("ASRC1 TX5"),
1590 TX_WIDGETS("ASRC1 TX6"),
1591 WIDGETS("OPE1", t264_ope1_tx),
1592 };
1593
1594 #define TEGRA_COMMON_MUX_ROUTES(name) \
1595 { name " XBAR-TX", NULL, name " Mux" }, \
1596 { name " Mux", "ADMAIF1", "ADMAIF1 XBAR-RX" }, \
1597 { name " Mux", "ADMAIF2", "ADMAIF2 XBAR-RX" }, \
1598 { name " Mux", "ADMAIF3", "ADMAIF3 XBAR-RX" }, \
1599 { name " Mux", "ADMAIF4", "ADMAIF4 XBAR-RX" }, \
1600 { name " Mux", "ADMAIF5", "ADMAIF5 XBAR-RX" }, \
1601 { name " Mux", "ADMAIF6", "ADMAIF6 XBAR-RX" }, \
1602 { name " Mux", "ADMAIF7", "ADMAIF7 XBAR-RX" }, \
1603 { name " Mux", "ADMAIF8", "ADMAIF8 XBAR-RX" }, \
1604 { name " Mux", "ADMAIF9", "ADMAIF9 XBAR-RX" }, \
1605 { name " Mux", "ADMAIF10", "ADMAIF10 XBAR-RX" }, \
1606 { name " Mux", "I2S1", "I2S1 XBAR-RX" }, \
1607 { name " Mux", "I2S2", "I2S2 XBAR-RX" }, \
1608 { name " Mux", "I2S3", "I2S3 XBAR-RX" }, \
1609 { name " Mux", "I2S4", "I2S4 XBAR-RX" }, \
1610 { name " Mux", "I2S5", "I2S5 XBAR-RX" }, \
1611 { name " Mux", "DMIC1", "DMIC1 XBAR-RX" }, \
1612 { name " Mux", "DMIC2", "DMIC2 XBAR-RX" }, \
1613 { name " Mux", "SFC1", "SFC1 XBAR-RX" }, \
1614 { name " Mux", "SFC2", "SFC2 XBAR-RX" }, \
1615 { name " Mux", "SFC3", "SFC3 XBAR-RX" }, \
1616 { name " Mux", "SFC4", "SFC4 XBAR-RX" }, \
1617 { name " Mux", "MVC1", "MVC1 XBAR-RX" }, \
1618 { name " Mux", "MVC2", "MVC2 XBAR-RX" }, \
1619 { name " Mux", "AMX1", "AMX1 XBAR-RX" }, \
1620 { name " Mux", "AMX2", "AMX2 XBAR-RX" }, \
1621 { name " Mux", "ADX1 TX1", "ADX1 TX1 XBAR-RX" }, \
1622 { name " Mux", "ADX1 TX2", "ADX1 TX2 XBAR-RX" }, \
1623 { name " Mux", "ADX1 TX3", "ADX1 TX3 XBAR-RX" }, \
1624 { name " Mux", "ADX1 TX4", "ADX1 TX4 XBAR-RX" }, \
1625 { name " Mux", "ADX2 TX1", "ADX2 TX1 XBAR-RX" }, \
1626 { name " Mux", "ADX2 TX2", "ADX2 TX2 XBAR-RX" }, \
1627 { name " Mux", "ADX2 TX3", "ADX2 TX3 XBAR-RX" }, \
1628 { name " Mux", "ADX2 TX4", "ADX2 TX4 XBAR-RX" }, \
1629 { name " Mux", "MIXER1 TX1", "MIXER1 TX1 XBAR-RX" }, \
1630 { name " Mux", "MIXER1 TX2", "MIXER1 TX2 XBAR-RX" }, \
1631 { name " Mux", "MIXER1 TX3", "MIXER1 TX3 XBAR-RX" }, \
1632 { name " Mux", "MIXER1 TX4", "MIXER1 TX4 XBAR-RX" }, \
1633 { name " Mux", "MIXER1 TX5", "MIXER1 TX5 XBAR-RX" }, \
1634 { name " Mux", "OPE1", "OPE1 XBAR-RX" },
1635
1636 #define TEGRA210_ONLY_MUX_ROUTES(name) \
1637 { name " Mux", "DMIC3", "DMIC3 XBAR-RX" }, \
1638 { name " Mux", "OPE2", "OPE2 XBAR-RX" },
1639
1640 #define TEGRA186_ONLY_MUX_ROUTES(name) \
1641 { name " Mux", "ADMAIF11", "ADMAIF11 XBAR-RX" }, \
1642 { name " Mux", "ADMAIF12", "ADMAIF12 XBAR-RX" }, \
1643 { name " Mux", "ADMAIF13", "ADMAIF13 XBAR-RX" }, \
1644 { name " Mux", "ADMAIF14", "ADMAIF14 XBAR-RX" }, \
1645 { name " Mux", "ADMAIF15", "ADMAIF15 XBAR-RX" }, \
1646 { name " Mux", "ADMAIF16", "ADMAIF16 XBAR-RX" }, \
1647 { name " Mux", "ADMAIF17", "ADMAIF17 XBAR-RX" }, \
1648 { name " Mux", "ADMAIF18", "ADMAIF18 XBAR-RX" }, \
1649 { name " Mux", "ADMAIF19", "ADMAIF19 XBAR-RX" }, \
1650 { name " Mux", "ADMAIF20", "ADMAIF20 XBAR-RX" }, \
1651 { name " Mux", "I2S6", "I2S6 XBAR-RX" }, \
1652 { name " Mux", "DMIC3", "DMIC3 XBAR-RX" }, \
1653 { name " Mux", "DMIC4", "DMIC4 XBAR-RX" }, \
1654 { name " Mux", "AMX3", "AMX3 XBAR-RX" }, \
1655 { name " Mux", "AMX4", "AMX4 XBAR-RX" }, \
1656 { name " Mux", "ADX3 TX1", "ADX3 TX1 XBAR-RX" }, \
1657 { name " Mux", "ADX3 TX2", "ADX3 TX2 XBAR-RX" }, \
1658 { name " Mux", "ADX3 TX3", "ADX3 TX3 XBAR-RX" }, \
1659 { name " Mux", "ADX3 TX4", "ADX3 TX4 XBAR-RX" }, \
1660 { name " Mux", "ADX4 TX1", "ADX4 TX1 XBAR-RX" }, \
1661 { name " Mux", "ADX4 TX2", "ADX4 TX2 XBAR-RX" }, \
1662 { name " Mux", "ADX4 TX3", "ADX4 TX3 XBAR-RX" }, \
1663 { name " Mux", "ADX4 TX4", "ADX4 TX4 XBAR-RX" }, \
1664 { name " Mux", "ASRC1 TX1", "ASRC1 TX1 XBAR-RX" }, \
1665 { name " Mux", "ASRC1 TX2", "ASRC1 TX2 XBAR-RX" }, \
1666 { name " Mux", "ASRC1 TX3", "ASRC1 TX3 XBAR-RX" }, \
1667 { name " Mux", "ASRC1 TX4", "ASRC1 TX4 XBAR-RX" }, \
1668 { name " Mux", "ASRC1 TX5", "ASRC1 TX5 XBAR-RX" }, \
1669 { name " Mux", "ASRC1 TX6", "ASRC1 TX6 XBAR-RX" },
1670
1671 #define TEGRA264_ONLY_MUX_ROUTES(name) \
1672 { name " Mux", "ADMAIF11", "ADMAIF11 XBAR-RX" }, \
1673 { name " Mux", "ADMAIF12", "ADMAIF12 XBAR-RX" }, \
1674 { name " Mux", "ADMAIF13", "ADMAIF13 XBAR-RX" }, \
1675 { name " Mux", "ADMAIF14", "ADMAIF14 XBAR-RX" }, \
1676 { name " Mux", "ADMAIF15", "ADMAIF15 XBAR-RX" }, \
1677 { name " Mux", "ADMAIF16", "ADMAIF16 XBAR-RX" }, \
1678 { name " Mux", "ADMAIF17", "ADMAIF17 XBAR-RX" }, \
1679 { name " Mux", "ADMAIF18", "ADMAIF18 XBAR-RX" }, \
1680 { name " Mux", "ADMAIF19", "ADMAIF19 XBAR-RX" }, \
1681 { name " Mux", "ADMAIF20", "ADMAIF20 XBAR-RX" }, \
1682 { name " Mux", "ADMAIF21", "ADMAIF21 XBAR-RX" }, \
1683 { name " Mux", "ADMAIF22", "ADMAIF22 XBAR-RX" }, \
1684 { name " Mux", "ADMAIF23", "ADMAIF23 XBAR-RX" }, \
1685 { name " Mux", "ADMAIF24", "ADMAIF24 XBAR-RX" }, \
1686 { name " Mux", "ADMAIF25", "ADMAIF25 XBAR-RX" }, \
1687 { name " Mux", "ADMAIF26", "ADMAIF26 XBAR-RX" }, \
1688 { name " Mux", "ADMAIF27", "ADMAIF27 XBAR-RX" }, \
1689 { name " Mux", "ADMAIF28", "ADMAIF28 XBAR-RX" }, \
1690 { name " Mux", "ADMAIF29", "ADMAIF29 XBAR-RX" }, \
1691 { name " Mux", "ADMAIF30", "ADMAIF30 XBAR-RX" }, \
1692 { name " Mux", "ADMAIF31", "ADMAIF31 XBAR-RX" }, \
1693 { name " Mux", "ADMAIF32", "ADMAIF32 XBAR-RX" }, \
1694 { name " Mux", "I2S6", "I2S6 XBAR-RX" }, \
1695 { name " Mux", "I2S7", "I2S7 XBAR-RX" }, \
1696 { name " Mux", "I2S8", "I2S8 XBAR-RX" }, \
1697 { name " Mux", "AMX3", "AMX3 XBAR-RX" }, \
1698 { name " Mux", "AMX4", "AMX4 XBAR-RX" }, \
1699 { name " Mux", "AMX5", "AMX5 XBAR-RX" }, \
1700 { name " Mux", "AMX6", "AMX6 XBAR-RX" }, \
1701 { name " Mux", "ADX3 TX1", "ADX3 TX1 XBAR-RX" }, \
1702 { name " Mux", "ADX3 TX2", "ADX3 TX2 XBAR-RX" }, \
1703 { name " Mux", "ADX3 TX3", "ADX3 TX3 XBAR-RX" }, \
1704 { name " Mux", "ADX3 TX4", "ADX3 TX4 XBAR-RX" }, \
1705 { name " Mux", "ADX4 TX1", "ADX4 TX1 XBAR-RX" }, \
1706 { name " Mux", "ADX4 TX2", "ADX4 TX2 XBAR-RX" }, \
1707 { name " Mux", "ADX4 TX3", "ADX4 TX3 XBAR-RX" }, \
1708 { name " Mux", "ADX4 TX4", "ADX4 TX4 XBAR-RX" }, \
1709 { name " Mux", "ADX5 TX1", "ADX5 TX1 XBAR-RX" }, \
1710 { name " Mux", "ADX5 TX2", "ADX5 TX2 XBAR-RX" }, \
1711 { name " Mux", "ADX5 TX3", "ADX5 TX3 XBAR-RX" }, \
1712 { name " Mux", "ADX5 TX4", "ADX5 TX4 XBAR-RX" }, \
1713 { name " Mux", "ADX6 TX1", "ADX6 TX1 XBAR-RX" }, \
1714 { name " Mux", "ADX6 TX2", "ADX6 TX2 XBAR-RX" }, \
1715 { name " Mux", "ADX6 TX3", "ADX6 TX3 XBAR-RX" }, \
1716 { name " Mux", "ADX6 TX4", "ADX6 TX4 XBAR-RX" }, \
1717 { name " Mux", "ASRC1 TX1", "ASRC1 TX1 XBAR-RX" }, \
1718 { name " Mux", "ASRC1 TX2", "ASRC1 TX2 XBAR-RX" }, \
1719 { name " Mux", "ASRC1 TX3", "ASRC1 TX3 XBAR-RX" }, \
1720 { name " Mux", "ASRC1 TX4", "ASRC1 TX4 XBAR-RX" }, \
1721 { name " Mux", "ASRC1 TX5", "ASRC1 TX5 XBAR-RX" }, \
1722 { name " Mux", "ASRC1 TX6", "ASRC1 TX6 XBAR-RX" },
1723
1724 #define TEGRA210_MUX_ROUTES(name) \
1725 TEGRA_COMMON_MUX_ROUTES(name) \
1726 TEGRA210_ONLY_MUX_ROUTES(name)
1727
1728 #define TEGRA186_MUX_ROUTES(name) \
1729 TEGRA_COMMON_MUX_ROUTES(name) \
1730 TEGRA186_ONLY_MUX_ROUTES(name)
1731
1732 #define TEGRA264_MUX_ROUTES(name) \
1733 TEGRA_COMMON_MUX_ROUTES(name) \
1734 TEGRA264_ONLY_MUX_ROUTES(name)
1735
1736 /* Connect FEs with XBAR */
1737 #define TEGRA_FE_ROUTES(name) \
1738 { name " XBAR-Playback", NULL, name " Playback" }, \
1739 { name " XBAR-RX", NULL, name " XBAR-Playback"}, \
1740 { name " XBAR-Capture", NULL, name " XBAR-TX" }, \
1741 { name " Capture", NULL, name " XBAR-Capture" },
1742
1743 static const struct snd_soc_dapm_route tegra210_ahub_routes[] = {
1744 TEGRA_FE_ROUTES("ADMAIF1")
1745 TEGRA_FE_ROUTES("ADMAIF2")
1746 TEGRA_FE_ROUTES("ADMAIF3")
1747 TEGRA_FE_ROUTES("ADMAIF4")
1748 TEGRA_FE_ROUTES("ADMAIF5")
1749 TEGRA_FE_ROUTES("ADMAIF6")
1750 TEGRA_FE_ROUTES("ADMAIF7")
1751 TEGRA_FE_ROUTES("ADMAIF8")
1752 TEGRA_FE_ROUTES("ADMAIF9")
1753 TEGRA_FE_ROUTES("ADMAIF10")
1754 TEGRA210_MUX_ROUTES("ADMAIF1")
1755 TEGRA210_MUX_ROUTES("ADMAIF2")
1756 TEGRA210_MUX_ROUTES("ADMAIF3")
1757 TEGRA210_MUX_ROUTES("ADMAIF4")
1758 TEGRA210_MUX_ROUTES("ADMAIF5")
1759 TEGRA210_MUX_ROUTES("ADMAIF6")
1760 TEGRA210_MUX_ROUTES("ADMAIF7")
1761 TEGRA210_MUX_ROUTES("ADMAIF8")
1762 TEGRA210_MUX_ROUTES("ADMAIF9")
1763 TEGRA210_MUX_ROUTES("ADMAIF10")
1764 TEGRA210_MUX_ROUTES("I2S1")
1765 TEGRA210_MUX_ROUTES("I2S2")
1766 TEGRA210_MUX_ROUTES("I2S3")
1767 TEGRA210_MUX_ROUTES("I2S4")
1768 TEGRA210_MUX_ROUTES("I2S5")
1769 TEGRA210_MUX_ROUTES("SFC1")
1770 TEGRA210_MUX_ROUTES("SFC2")
1771 TEGRA210_MUX_ROUTES("SFC3")
1772 TEGRA210_MUX_ROUTES("SFC4")
1773 TEGRA210_MUX_ROUTES("MVC1")
1774 TEGRA210_MUX_ROUTES("MVC2")
1775 TEGRA210_MUX_ROUTES("AMX1 RX1")
1776 TEGRA210_MUX_ROUTES("AMX1 RX2")
1777 TEGRA210_MUX_ROUTES("AMX1 RX3")
1778 TEGRA210_MUX_ROUTES("AMX1 RX4")
1779 TEGRA210_MUX_ROUTES("AMX2 RX1")
1780 TEGRA210_MUX_ROUTES("AMX2 RX2")
1781 TEGRA210_MUX_ROUTES("AMX2 RX3")
1782 TEGRA210_MUX_ROUTES("AMX2 RX4")
1783 TEGRA210_MUX_ROUTES("ADX1")
1784 TEGRA210_MUX_ROUTES("ADX2")
1785 TEGRA210_MUX_ROUTES("MIXER1 RX1")
1786 TEGRA210_MUX_ROUTES("MIXER1 RX2")
1787 TEGRA210_MUX_ROUTES("MIXER1 RX3")
1788 TEGRA210_MUX_ROUTES("MIXER1 RX4")
1789 TEGRA210_MUX_ROUTES("MIXER1 RX5")
1790 TEGRA210_MUX_ROUTES("MIXER1 RX6")
1791 TEGRA210_MUX_ROUTES("MIXER1 RX7")
1792 TEGRA210_MUX_ROUTES("MIXER1 RX8")
1793 TEGRA210_MUX_ROUTES("MIXER1 RX9")
1794 TEGRA210_MUX_ROUTES("MIXER1 RX10")
1795 TEGRA210_MUX_ROUTES("OPE1")
1796 TEGRA210_MUX_ROUTES("OPE2")
1797 };
1798
1799 static const struct snd_soc_dapm_route tegra186_ahub_routes[] = {
1800 TEGRA_FE_ROUTES("ADMAIF1")
1801 TEGRA_FE_ROUTES("ADMAIF2")
1802 TEGRA_FE_ROUTES("ADMAIF3")
1803 TEGRA_FE_ROUTES("ADMAIF4")
1804 TEGRA_FE_ROUTES("ADMAIF5")
1805 TEGRA_FE_ROUTES("ADMAIF6")
1806 TEGRA_FE_ROUTES("ADMAIF7")
1807 TEGRA_FE_ROUTES("ADMAIF8")
1808 TEGRA_FE_ROUTES("ADMAIF9")
1809 TEGRA_FE_ROUTES("ADMAIF10")
1810 TEGRA_FE_ROUTES("ADMAIF11")
1811 TEGRA_FE_ROUTES("ADMAIF12")
1812 TEGRA_FE_ROUTES("ADMAIF13")
1813 TEGRA_FE_ROUTES("ADMAIF14")
1814 TEGRA_FE_ROUTES("ADMAIF15")
1815 TEGRA_FE_ROUTES("ADMAIF16")
1816 TEGRA_FE_ROUTES("ADMAIF17")
1817 TEGRA_FE_ROUTES("ADMAIF18")
1818 TEGRA_FE_ROUTES("ADMAIF19")
1819 TEGRA_FE_ROUTES("ADMAIF20")
1820 TEGRA186_MUX_ROUTES("ADMAIF1")
1821 TEGRA186_MUX_ROUTES("ADMAIF2")
1822 TEGRA186_MUX_ROUTES("ADMAIF3")
1823 TEGRA186_MUX_ROUTES("ADMAIF4")
1824 TEGRA186_MUX_ROUTES("ADMAIF5")
1825 TEGRA186_MUX_ROUTES("ADMAIF6")
1826 TEGRA186_MUX_ROUTES("ADMAIF7")
1827 TEGRA186_MUX_ROUTES("ADMAIF8")
1828 TEGRA186_MUX_ROUTES("ADMAIF9")
1829 TEGRA186_MUX_ROUTES("ADMAIF10")
1830 TEGRA186_MUX_ROUTES("ADMAIF11")
1831 TEGRA186_MUX_ROUTES("ADMAIF12")
1832 TEGRA186_MUX_ROUTES("ADMAIF13")
1833 TEGRA186_MUX_ROUTES("ADMAIF14")
1834 TEGRA186_MUX_ROUTES("ADMAIF15")
1835 TEGRA186_MUX_ROUTES("ADMAIF16")
1836 TEGRA186_MUX_ROUTES("ADMAIF17")
1837 TEGRA186_MUX_ROUTES("ADMAIF18")
1838 TEGRA186_MUX_ROUTES("ADMAIF19")
1839 TEGRA186_MUX_ROUTES("ADMAIF20")
1840 TEGRA186_MUX_ROUTES("I2S1")
1841 TEGRA186_MUX_ROUTES("I2S2")
1842 TEGRA186_MUX_ROUTES("I2S3")
1843 TEGRA186_MUX_ROUTES("I2S4")
1844 TEGRA186_MUX_ROUTES("I2S5")
1845 TEGRA186_MUX_ROUTES("I2S6")
1846 TEGRA186_MUX_ROUTES("DSPK1")
1847 TEGRA186_MUX_ROUTES("DSPK2")
1848 TEGRA186_MUX_ROUTES("SFC1")
1849 TEGRA186_MUX_ROUTES("SFC2")
1850 TEGRA186_MUX_ROUTES("SFC3")
1851 TEGRA186_MUX_ROUTES("SFC4")
1852 TEGRA186_MUX_ROUTES("MVC1")
1853 TEGRA186_MUX_ROUTES("MVC2")
1854 TEGRA186_MUX_ROUTES("AMX1 RX1")
1855 TEGRA186_MUX_ROUTES("AMX1 RX2")
1856 TEGRA186_MUX_ROUTES("AMX1 RX3")
1857 TEGRA186_MUX_ROUTES("AMX1 RX4")
1858 TEGRA186_MUX_ROUTES("AMX2 RX1")
1859 TEGRA186_MUX_ROUTES("AMX2 RX2")
1860 TEGRA186_MUX_ROUTES("AMX2 RX3")
1861 TEGRA186_MUX_ROUTES("AMX2 RX4")
1862 TEGRA186_MUX_ROUTES("AMX3 RX1")
1863 TEGRA186_MUX_ROUTES("AMX3 RX2")
1864 TEGRA186_MUX_ROUTES("AMX3 RX3")
1865 TEGRA186_MUX_ROUTES("AMX3 RX4")
1866 TEGRA186_MUX_ROUTES("AMX4 RX1")
1867 TEGRA186_MUX_ROUTES("AMX4 RX2")
1868 TEGRA186_MUX_ROUTES("AMX4 RX3")
1869 TEGRA186_MUX_ROUTES("AMX4 RX4")
1870 TEGRA186_MUX_ROUTES("ADX1")
1871 TEGRA186_MUX_ROUTES("ADX2")
1872 TEGRA186_MUX_ROUTES("ADX3")
1873 TEGRA186_MUX_ROUTES("ADX4")
1874 TEGRA186_MUX_ROUTES("MIXER1 RX1")
1875 TEGRA186_MUX_ROUTES("MIXER1 RX2")
1876 TEGRA186_MUX_ROUTES("MIXER1 RX3")
1877 TEGRA186_MUX_ROUTES("MIXER1 RX4")
1878 TEGRA186_MUX_ROUTES("MIXER1 RX5")
1879 TEGRA186_MUX_ROUTES("MIXER1 RX6")
1880 TEGRA186_MUX_ROUTES("MIXER1 RX7")
1881 TEGRA186_MUX_ROUTES("MIXER1 RX8")
1882 TEGRA186_MUX_ROUTES("MIXER1 RX9")
1883 TEGRA186_MUX_ROUTES("MIXER1 RX10")
1884 TEGRA186_MUX_ROUTES("ASRC1 RX1")
1885 TEGRA186_MUX_ROUTES("ASRC1 RX2")
1886 TEGRA186_MUX_ROUTES("ASRC1 RX3")
1887 TEGRA186_MUX_ROUTES("ASRC1 RX4")
1888 TEGRA186_MUX_ROUTES("ASRC1 RX5")
1889 TEGRA186_MUX_ROUTES("ASRC1 RX6")
1890 TEGRA186_MUX_ROUTES("ASRC1 RX7")
1891 TEGRA186_MUX_ROUTES("OPE1")
1892 };
1893
1894 static const struct snd_soc_dapm_route tegra264_ahub_routes[] = {
1895 TEGRA_FE_ROUTES("ADMAIF1")
1896 TEGRA_FE_ROUTES("ADMAIF2")
1897 TEGRA_FE_ROUTES("ADMAIF3")
1898 TEGRA_FE_ROUTES("ADMAIF4")
1899 TEGRA_FE_ROUTES("ADMAIF5")
1900 TEGRA_FE_ROUTES("ADMAIF6")
1901 TEGRA_FE_ROUTES("ADMAIF7")
1902 TEGRA_FE_ROUTES("ADMAIF8")
1903 TEGRA_FE_ROUTES("ADMAIF9")
1904 TEGRA_FE_ROUTES("ADMAIF10")
1905 TEGRA_FE_ROUTES("ADMAIF11")
1906 TEGRA_FE_ROUTES("ADMAIF12")
1907 TEGRA_FE_ROUTES("ADMAIF13")
1908 TEGRA_FE_ROUTES("ADMAIF14")
1909 TEGRA_FE_ROUTES("ADMAIF15")
1910 TEGRA_FE_ROUTES("ADMAIF16")
1911 TEGRA_FE_ROUTES("ADMAIF17")
1912 TEGRA_FE_ROUTES("ADMAIF18")
1913 TEGRA_FE_ROUTES("ADMAIF19")
1914 TEGRA_FE_ROUTES("ADMAIF20")
1915 TEGRA_FE_ROUTES("ADMAIF21")
1916 TEGRA_FE_ROUTES("ADMAIF22")
1917 TEGRA_FE_ROUTES("ADMAIF23")
1918 TEGRA_FE_ROUTES("ADMAIF24")
1919 TEGRA_FE_ROUTES("ADMAIF25")
1920 TEGRA_FE_ROUTES("ADMAIF26")
1921 TEGRA_FE_ROUTES("ADMAIF27")
1922 TEGRA_FE_ROUTES("ADMAIF28")
1923 TEGRA_FE_ROUTES("ADMAIF29")
1924 TEGRA_FE_ROUTES("ADMAIF30")
1925 TEGRA_FE_ROUTES("ADMAIF31")
1926 TEGRA_FE_ROUTES("ADMAIF32")
1927 TEGRA264_MUX_ROUTES("ADMAIF1")
1928 TEGRA264_MUX_ROUTES("ADMAIF2")
1929 TEGRA264_MUX_ROUTES("ADMAIF3")
1930 TEGRA264_MUX_ROUTES("ADMAIF4")
1931 TEGRA264_MUX_ROUTES("ADMAIF5")
1932 TEGRA264_MUX_ROUTES("ADMAIF6")
1933 TEGRA264_MUX_ROUTES("ADMAIF7")
1934 TEGRA264_MUX_ROUTES("ADMAIF8")
1935 TEGRA264_MUX_ROUTES("ADMAIF9")
1936 TEGRA264_MUX_ROUTES("ADMAIF10")
1937 TEGRA264_MUX_ROUTES("ADMAIF11")
1938 TEGRA264_MUX_ROUTES("ADMAIF12")
1939 TEGRA264_MUX_ROUTES("ADMAIF13")
1940 TEGRA264_MUX_ROUTES("ADMAIF14")
1941 TEGRA264_MUX_ROUTES("ADMAIF15")
1942 TEGRA264_MUX_ROUTES("ADMAIF16")
1943 TEGRA264_MUX_ROUTES("ADMAIF17")
1944 TEGRA264_MUX_ROUTES("ADMAIF18")
1945 TEGRA264_MUX_ROUTES("ADMAIF19")
1946 TEGRA264_MUX_ROUTES("ADMAIF20")
1947 TEGRA264_MUX_ROUTES("ADMAIF21")
1948 TEGRA264_MUX_ROUTES("ADMAIF22")
1949 TEGRA264_MUX_ROUTES("ADMAIF23")
1950 TEGRA264_MUX_ROUTES("ADMAIF24")
1951 TEGRA264_MUX_ROUTES("ADMAIF25")
1952 TEGRA264_MUX_ROUTES("ADMAIF26")
1953 TEGRA264_MUX_ROUTES("ADMAIF27")
1954 TEGRA264_MUX_ROUTES("ADMAIF28")
1955 TEGRA264_MUX_ROUTES("ADMAIF29")
1956 TEGRA264_MUX_ROUTES("ADMAIF30")
1957 TEGRA264_MUX_ROUTES("ADMAIF31")
1958 TEGRA264_MUX_ROUTES("ADMAIF32")
1959 TEGRA264_MUX_ROUTES("I2S1")
1960 TEGRA264_MUX_ROUTES("I2S2")
1961 TEGRA264_MUX_ROUTES("I2S3")
1962 TEGRA264_MUX_ROUTES("I2S4")
1963 TEGRA264_MUX_ROUTES("I2S5")
1964 TEGRA264_MUX_ROUTES("I2S6")
1965 TEGRA264_MUX_ROUTES("I2S7")
1966 TEGRA264_MUX_ROUTES("I2S8")
1967 TEGRA264_MUX_ROUTES("DSPK1")
1968 TEGRA264_MUX_ROUTES("SFC1")
1969 TEGRA264_MUX_ROUTES("SFC2")
1970 TEGRA264_MUX_ROUTES("SFC3")
1971 TEGRA264_MUX_ROUTES("SFC4")
1972 TEGRA264_MUX_ROUTES("MVC1")
1973 TEGRA264_MUX_ROUTES("MVC2")
1974 TEGRA264_MUX_ROUTES("AMX1 RX1")
1975 TEGRA264_MUX_ROUTES("AMX1 RX2")
1976 TEGRA264_MUX_ROUTES("AMX1 RX3")
1977 TEGRA264_MUX_ROUTES("AMX1 RX4")
1978 TEGRA264_MUX_ROUTES("AMX2 RX1")
1979 TEGRA264_MUX_ROUTES("AMX2 RX2")
1980 TEGRA264_MUX_ROUTES("AMX2 RX3")
1981 TEGRA264_MUX_ROUTES("AMX2 RX4")
1982 TEGRA264_MUX_ROUTES("AMX3 RX1")
1983 TEGRA264_MUX_ROUTES("AMX3 RX2")
1984 TEGRA264_MUX_ROUTES("AMX3 RX3")
1985 TEGRA264_MUX_ROUTES("AMX3 RX4")
1986 TEGRA264_MUX_ROUTES("AMX4 RX1")
1987 TEGRA264_MUX_ROUTES("AMX4 RX2")
1988 TEGRA264_MUX_ROUTES("AMX4 RX3")
1989 TEGRA264_MUX_ROUTES("AMX4 RX4")
1990 TEGRA264_MUX_ROUTES("AMX5 RX1")
1991 TEGRA264_MUX_ROUTES("AMX5 RX2")
1992 TEGRA264_MUX_ROUTES("AMX5 RX3")
1993 TEGRA264_MUX_ROUTES("AMX5 RX4")
1994 TEGRA264_MUX_ROUTES("AMX6 RX1")
1995 TEGRA264_MUX_ROUTES("AMX6 RX2")
1996 TEGRA264_MUX_ROUTES("AMX6 RX3")
1997 TEGRA264_MUX_ROUTES("AMX6 RX4")
1998 TEGRA264_MUX_ROUTES("ADX1")
1999 TEGRA264_MUX_ROUTES("ADX2")
2000 TEGRA264_MUX_ROUTES("ADX3")
2001 TEGRA264_MUX_ROUTES("ADX4")
2002 TEGRA264_MUX_ROUTES("ADX5")
2003 TEGRA264_MUX_ROUTES("ADX6")
2004 TEGRA264_MUX_ROUTES("MIXER1 RX1")
2005 TEGRA264_MUX_ROUTES("MIXER1 RX2")
2006 TEGRA264_MUX_ROUTES("MIXER1 RX3")
2007 TEGRA264_MUX_ROUTES("MIXER1 RX4")
2008 TEGRA264_MUX_ROUTES("MIXER1 RX5")
2009 TEGRA264_MUX_ROUTES("MIXER1 RX6")
2010 TEGRA264_MUX_ROUTES("MIXER1 RX7")
2011 TEGRA264_MUX_ROUTES("MIXER1 RX8")
2012 TEGRA264_MUX_ROUTES("MIXER1 RX9")
2013 TEGRA264_MUX_ROUTES("MIXER1 RX10")
2014 TEGRA264_MUX_ROUTES("ASRC1 RX1")
2015 TEGRA264_MUX_ROUTES("ASRC1 RX2")
2016 TEGRA264_MUX_ROUTES("ASRC1 RX3")
2017 TEGRA264_MUX_ROUTES("ASRC1 RX4")
2018 TEGRA264_MUX_ROUTES("ASRC1 RX5")
2019 TEGRA264_MUX_ROUTES("ASRC1 RX6")
2020 TEGRA264_MUX_ROUTES("ASRC1 RX7")
2021 TEGRA264_MUX_ROUTES("OPE1")
2022 };
2023
2024 static const struct snd_soc_component_driver tegra210_ahub_component = {
2025 .dapm_widgets = tegra210_ahub_widgets,
2026 .num_dapm_widgets = ARRAY_SIZE(tegra210_ahub_widgets),
2027 .dapm_routes = tegra210_ahub_routes,
2028 .num_dapm_routes = ARRAY_SIZE(tegra210_ahub_routes),
2029 };
2030
2031 static const struct snd_soc_component_driver tegra186_ahub_component = {
2032 .dapm_widgets = tegra186_ahub_widgets,
2033 .num_dapm_widgets = ARRAY_SIZE(tegra186_ahub_widgets),
2034 .dapm_routes = tegra186_ahub_routes,
2035 .num_dapm_routes = ARRAY_SIZE(tegra186_ahub_routes),
2036 };
2037
2038 static const struct snd_soc_component_driver tegra234_ahub_component = {
2039 .dapm_widgets = tegra234_ahub_widgets,
2040 .num_dapm_widgets = ARRAY_SIZE(tegra234_ahub_widgets),
2041 .dapm_routes = tegra186_ahub_routes,
2042 .num_dapm_routes = ARRAY_SIZE(tegra186_ahub_routes),
2043 };
2044
2045 static const struct snd_soc_component_driver tegra264_ahub_component = {
2046 .dapm_widgets = tegra264_ahub_widgets,
2047 .num_dapm_widgets = ARRAY_SIZE(tegra264_ahub_widgets),
2048 .dapm_routes = tegra264_ahub_routes,
2049 .num_dapm_routes = ARRAY_SIZE(tegra264_ahub_routes),
2050 };
2051
tegra264_ahub_wr_reg(struct device * dev,unsigned int reg)2052 static bool tegra264_ahub_wr_reg(struct device *dev, unsigned int reg)
2053 {
2054 int part;
2055
2056 for (part = 0; part < TEGRA264_XBAR_UPDATE_MAX_REG; part++) {
2057 switch (reg & ~(part << 12)) {
2058 case TEGRA264_AXBAR_ADMAIF_RX1 ... TEGRA264_AXBAR_SFC4_RX1:
2059 case TEGRA264_AXBAR_MIXER1_RX1 ... TEGRA264_AXBAR_MIXER1_RX10:
2060 case TEGRA264_AXBAR_DSPK1_RX1:
2061 case TEGRA264_AXBAR_OPE1_RX1:
2062 case TEGRA264_AXBAR_MVC1_RX1 ... TEGRA264_AXBAR_MVC2_RX1:
2063 case TEGRA264_AXBAR_AMX1_RX1 ... TEGRA264_AXBAR_AMX3_RX4:
2064 case TEGRA264_AXBAR_ADX1_RX1 ... TEGRA264_AXBAR_ASRC1_RX7:
2065 case TEGRA264_AXBAR_ADMAIF_RX21 ... TEGRA264_AXBAR_ADX6_RX1:
2066 return true;
2067 default:
2068 break;
2069 };
2070 }
2071
2072 return false;
2073 }
2074
2075 static const struct regmap_config tegra210_ahub_regmap_config = {
2076 .reg_bits = 32,
2077 .val_bits = 32,
2078 .reg_stride = 4,
2079 .max_register = TEGRA210_MAX_REGISTER_ADDR,
2080 .cache_type = REGCACHE_FLAT,
2081 };
2082
2083 static const struct regmap_config tegra186_ahub_regmap_config = {
2084 .reg_bits = 32,
2085 .val_bits = 32,
2086 .reg_stride = 4,
2087 .max_register = TEGRA186_MAX_REGISTER_ADDR,
2088 .cache_type = REGCACHE_FLAT,
2089 };
2090
2091 static const struct regmap_config tegra264_ahub_regmap_config = {
2092 .reg_bits = 32,
2093 .val_bits = 32,
2094 .reg_stride = 4,
2095 .writeable_reg = tegra264_ahub_wr_reg,
2096 .max_register = TEGRA264_MAX_REGISTER_ADDR,
2097 .cache_type = REGCACHE_FLAT,
2098 };
2099
2100 static const struct tegra_ahub_soc_data soc_data_tegra210 = {
2101 .cmpnt_drv = &tegra210_ahub_component,
2102 .dai_drv = tegra210_ahub_dais,
2103 .num_dais = ARRAY_SIZE(tegra210_ahub_dais),
2104 .regmap_config = &tegra210_ahub_regmap_config,
2105 .mask[0] = TEGRA210_XBAR_REG_MASK_0,
2106 .mask[1] = TEGRA210_XBAR_REG_MASK_1,
2107 .mask[2] = TEGRA210_XBAR_REG_MASK_2,
2108 .mask[3] = TEGRA210_XBAR_REG_MASK_3,
2109 .reg_count = TEGRA210_XBAR_UPDATE_MAX_REG,
2110 .xbar_part_size = TEGRA210_XBAR_PART1_RX,
2111 };
2112
2113 static const struct tegra_ahub_soc_data soc_data_tegra186 = {
2114 .cmpnt_drv = &tegra186_ahub_component,
2115 .dai_drv = tegra186_ahub_dais,
2116 .num_dais = ARRAY_SIZE(tegra186_ahub_dais),
2117 .regmap_config = &tegra186_ahub_regmap_config,
2118 .mask[0] = TEGRA186_XBAR_REG_MASK_0,
2119 .mask[1] = TEGRA186_XBAR_REG_MASK_1,
2120 .mask[2] = TEGRA186_XBAR_REG_MASK_2,
2121 .mask[3] = TEGRA186_XBAR_REG_MASK_3,
2122 .reg_count = TEGRA186_XBAR_UPDATE_MAX_REG,
2123 .xbar_part_size = TEGRA210_XBAR_PART1_RX,
2124 };
2125
2126 static const struct tegra_ahub_soc_data soc_data_tegra234 = {
2127 .cmpnt_drv = &tegra234_ahub_component,
2128 .dai_drv = tegra186_ahub_dais,
2129 .num_dais = ARRAY_SIZE(tegra186_ahub_dais),
2130 .regmap_config = &tegra186_ahub_regmap_config,
2131 .mask[0] = TEGRA186_XBAR_REG_MASK_0,
2132 .mask[1] = TEGRA186_XBAR_REG_MASK_1,
2133 .mask[2] = TEGRA186_XBAR_REG_MASK_2,
2134 .mask[3] = TEGRA186_XBAR_REG_MASK_3,
2135 .reg_count = TEGRA186_XBAR_UPDATE_MAX_REG,
2136 .xbar_part_size = TEGRA210_XBAR_PART1_RX,
2137 };
2138
2139 static const struct tegra_ahub_soc_data soc_data_tegra264 = {
2140 .cmpnt_drv = &tegra264_ahub_component,
2141 .dai_drv = tegra264_ahub_dais,
2142 .num_dais = ARRAY_SIZE(tegra264_ahub_dais),
2143 .regmap_config = &tegra264_ahub_regmap_config,
2144 .mask[0] = TEGRA264_XBAR_REG_MASK_0,
2145 .mask[1] = TEGRA264_XBAR_REG_MASK_1,
2146 .mask[2] = TEGRA264_XBAR_REG_MASK_2,
2147 .mask[3] = TEGRA264_XBAR_REG_MASK_3,
2148 .mask[4] = TEGRA264_XBAR_REG_MASK_4,
2149 .reg_count = TEGRA264_XBAR_UPDATE_MAX_REG,
2150 .xbar_part_size = TEGRA264_XBAR_PART1_RX,
2151 };
2152
2153 static const struct of_device_id tegra_ahub_of_match[] = {
2154 { .compatible = "nvidia,tegra210-ahub", .data = &soc_data_tegra210 },
2155 { .compatible = "nvidia,tegra186-ahub", .data = &soc_data_tegra186 },
2156 { .compatible = "nvidia,tegra234-ahub", .data = &soc_data_tegra234 },
2157 { .compatible = "nvidia,tegra264-ahub", .data = &soc_data_tegra264 },
2158 {},
2159 };
2160 MODULE_DEVICE_TABLE(of, tegra_ahub_of_match);
2161
tegra_ahub_runtime_suspend(struct device * dev)2162 static int tegra_ahub_runtime_suspend(struct device *dev)
2163 {
2164 struct tegra_ahub *ahub = dev_get_drvdata(dev);
2165
2166 regcache_cache_only(ahub->regmap, true);
2167 regcache_mark_dirty(ahub->regmap);
2168
2169 clk_disable_unprepare(ahub->clk);
2170
2171 return 0;
2172 }
2173
tegra_ahub_runtime_resume(struct device * dev)2174 static int tegra_ahub_runtime_resume(struct device *dev)
2175 {
2176 struct tegra_ahub *ahub = dev_get_drvdata(dev);
2177 int err;
2178
2179 err = clk_prepare_enable(ahub->clk);
2180 if (err) {
2181 dev_err(dev, "failed to enable AHUB clock, err: %d\n", err);
2182 return err;
2183 }
2184
2185 regcache_cache_only(ahub->regmap, false);
2186 regcache_sync(ahub->regmap);
2187
2188 return 0;
2189 }
2190
tegra_ahub_probe(struct platform_device * pdev)2191 static int tegra_ahub_probe(struct platform_device *pdev)
2192 {
2193 struct tegra_ahub *ahub;
2194 void __iomem *regs;
2195 int err;
2196
2197 ahub = devm_kzalloc(&pdev->dev, sizeof(*ahub), GFP_KERNEL);
2198 if (!ahub)
2199 return -ENOMEM;
2200
2201 ahub->soc_data = of_device_get_match_data(&pdev->dev);
2202 if (!ahub->soc_data)
2203 return -ENODEV;
2204
2205 platform_set_drvdata(pdev, ahub);
2206
2207 ahub->clk = devm_clk_get(&pdev->dev, "ahub");
2208 if (IS_ERR(ahub->clk)) {
2209 dev_err(&pdev->dev, "can't retrieve AHUB clock\n");
2210 return PTR_ERR(ahub->clk);
2211 }
2212
2213 regs = devm_platform_ioremap_resource(pdev, 0);
2214 if (IS_ERR(regs))
2215 return PTR_ERR(regs);
2216
2217 ahub->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
2218 ahub->soc_data->regmap_config);
2219 if (IS_ERR(ahub->regmap)) {
2220 dev_err(&pdev->dev, "regmap init failed\n");
2221 return PTR_ERR(ahub->regmap);
2222 }
2223
2224 regcache_cache_only(ahub->regmap, true);
2225
2226 err = devm_snd_soc_register_component(&pdev->dev,
2227 ahub->soc_data->cmpnt_drv,
2228 ahub->soc_data->dai_drv,
2229 ahub->soc_data->num_dais);
2230 if (err) {
2231 dev_err(&pdev->dev, "can't register AHUB component, err: %d\n",
2232 err);
2233 return err;
2234 }
2235
2236 pm_runtime_enable(&pdev->dev);
2237
2238 err = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
2239 if (err) {
2240 pm_runtime_disable(&pdev->dev);
2241 return err;
2242 }
2243
2244 return 0;
2245 }
2246
tegra_ahub_remove(struct platform_device * pdev)2247 static void tegra_ahub_remove(struct platform_device *pdev)
2248 {
2249 pm_runtime_disable(&pdev->dev);
2250 }
2251
2252 static const struct dev_pm_ops tegra_ahub_pm_ops = {
2253 RUNTIME_PM_OPS(tegra_ahub_runtime_suspend,
2254 tegra_ahub_runtime_resume, NULL)
2255 SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
2256 };
2257
2258 static struct platform_driver tegra_ahub_driver = {
2259 .probe = tegra_ahub_probe,
2260 .remove = tegra_ahub_remove,
2261 .driver = {
2262 .name = "tegra210-ahub",
2263 .of_match_table = tegra_ahub_of_match,
2264 .pm = pm_ptr(&tegra_ahub_pm_ops),
2265 },
2266 };
2267 module_platform_driver(tegra_ahub_driver);
2268
2269 MODULE_AUTHOR("Stephen Warren <swarren@nvidia.com>");
2270 MODULE_AUTHOR("Mohan Kumar <mkumard@nvidia.com>");
2271 MODULE_DESCRIPTION("Tegra210 ASoC AHUB driver");
2272 MODULE_LICENSE("GPL v2");
2273