1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * soc-acpi-intel-mtl-match.c - tables and support for MTL ACPI enumeration.
4  *
5  * Copyright (c) 2022, Intel Corporation.
6  *
7  */
8 
9 #include <sound/soc-acpi.h>
10 #include <sound/soc-acpi-intel-match.h>
11 #include <sound/soc-acpi-intel-ssp-common.h>
12 #include "soc-acpi-intel-sdw-mockup-match.h"
13 
14 static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = {
15 	.num_codecs = 2,
16 	.codecs = {RT5682_ACPI_HID, RT5682S_ACPI_HID},
17 };
18 
19 static const struct snd_soc_acpi_codecs mtl_essx_83x6 = {
20 	.num_codecs = 3,
21 	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
22 };
23 
24 static const struct snd_soc_acpi_codecs mtl_lt6911_hdmi = {
25 	.num_codecs = 1,
26 	.codecs = {"INTC10B0"}
27 };
28 
29 struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {
30 	{
31 		.comp_ids = &mtl_essx_83x6,
32 		.drv_name = "mtl_es83x6_c1_h02",
33 		.machine_quirk = snd_soc_acpi_codec_list,
34 		.quirk_data = &mtl_lt6911_hdmi,
35 		.sof_tplg_filename = "sof-mtl-es83x6-ssp1-hdmi-ssp02.tplg",
36 	},
37 	{
38 		.comp_ids = &mtl_essx_83x6,
39 		.drv_name = "sof-essx8336",
40 		.sof_tplg_filename = "sof-mtl-es8336", /* the tplg suffix is added at run time */
41 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
42 					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
43 					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
44 	},
45 	/* place boards for each headphone codec: sof driver will complete the
46 	 * tplg name and machine driver will detect the amp type
47 	 */
48 	{
49 		.id = CS42L42_ACPI_HID,
50 		.drv_name = "mtl_cs42l42_def",
51 		.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */
52 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
53 					SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
54 	},
55 	{
56 		.id = DA7219_ACPI_HID,
57 		.drv_name = "mtl_da7219_def",
58 		.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */
59 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
60 					SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
61 	},
62 	{
63 		.id = NAU8825_ACPI_HID,
64 		.drv_name = "mtl_nau8825_def",
65 		.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */
66 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
67 					SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
68 	},
69 	{
70 		.id = RT5650_ACPI_HID,
71 		.drv_name = "mtl_rt5682_def",
72 		.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */
73 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
74 					SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
75 	},
76 	{
77 		.comp_ids = &mtl_rt5682_rt5682s_hp,
78 		.drv_name = "mtl_rt5682_def",
79 		.sof_tplg_filename = "sof-mtl", /* the tplg suffix is added at run time */
80 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
81 					SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
82 	},
83 	/* place amp-only boards in the end of table */
84 	{
85 		.id = "INTC10B0",
86 		.drv_name = "mtl_lt6911_hdmi_ssp",
87 		.sof_tplg_filename = "sof-mtl-hdmi-ssp02.tplg",
88 	},
89 	{},
90 };
91 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines);
92 
93 static const struct snd_soc_acpi_endpoint single_endpoint = {
94 	.num = 0,
95 	.aggregated = 0,
96 	.group_position = 0,
97 	.group_id = 0,
98 };
99 
100 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
101 	.num = 0,
102 	.aggregated = 1,
103 	.group_position = 0,
104 	.group_id = 1,
105 };
106 
107 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
108 	.num = 0,
109 	.aggregated = 1,
110 	.group_position = 1,
111 	.group_id = 1,
112 };
113 
114 static const struct snd_soc_acpi_endpoint rt712_endpoints[] = {
115 	{
116 		.num = 0,
117 		.aggregated = 0,
118 		.group_position = 0,
119 		.group_id = 0,
120 	},
121 	{
122 		.num = 1,
123 		.aggregated = 0,
124 		.group_position = 0,
125 		.group_id = 0,
126 	},
127 };
128 
129 /*
130  * RT722 is a multi-function codec, three endpoints are created for
131  * its headset, amp and dmic functions.
132  */
133 static const struct snd_soc_acpi_endpoint rt722_endpoints[] = {
134 	{
135 		.num = 0,
136 		.aggregated = 0,
137 		.group_position = 0,
138 		.group_id = 0,
139 	},
140 	{
141 		.num = 1,
142 		.aggregated = 0,
143 		.group_position = 0,
144 		.group_id = 0,
145 	},
146 	{
147 		.num = 2,
148 		.aggregated = 0,
149 		.group_position = 0,
150 		.group_id = 0,
151 	},
152 };
153 
154 static const struct snd_soc_acpi_endpoint spk_2_endpoint = {
155 	.num = 0,
156 	.aggregated = 1,
157 	.group_position = 2,
158 	.group_id = 1,
159 };
160 
161 static const struct snd_soc_acpi_endpoint spk_3_endpoint = {
162 	.num = 0,
163 	.aggregated = 1,
164 	.group_position = 3,
165 	.group_id = 1,
166 };
167 
168 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
169 	{
170 		.adr = 0x000030025D071101ull,
171 		.num_endpoints = 1,
172 		.endpoints = &single_endpoint,
173 		.name_prefix = "rt711"
174 	}
175 };
176 
177 static const struct snd_soc_acpi_adr_device rt712_0_single_adr[] = {
178 	{
179 		.adr = 0x000030025D071201ull,
180 		.num_endpoints = ARRAY_SIZE(rt712_endpoints),
181 		.endpoints = rt712_endpoints,
182 		.name_prefix = "rt712"
183 	}
184 };
185 
186 static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = {
187 	{
188 		.adr = 0x000330025D171201ull,
189 		.num_endpoints = 1,
190 		.endpoints = &single_endpoint,
191 		.name_prefix = "rt712-dmic"
192 	}
193 };
194 
195 static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = {
196 	{
197 		.adr = 0x000030025d072201ull,
198 		.num_endpoints = ARRAY_SIZE(rt722_endpoints),
199 		.endpoints = rt722_endpoints,
200 		.name_prefix = "rt722"
201 	}
202 };
203 
204 static const struct snd_soc_acpi_adr_device rt713_0_single_adr[] = {
205 	{
206 		.adr = 0x000031025D071301ull,
207 		.num_endpoints = 1,
208 		.endpoints = &single_endpoint,
209 		.name_prefix = "rt713"
210 	}
211 };
212 
213 static const struct snd_soc_acpi_adr_device rt1713_3_single_adr[] = {
214 	{
215 		.adr = 0x000331025D171301ull,
216 		.num_endpoints = 1,
217 		.endpoints = &single_endpoint,
218 		.name_prefix = "rt713-dmic"
219 	}
220 };
221 
222 static const struct snd_soc_acpi_adr_device mx8373_0_adr[] = {
223 	{
224 		.adr = 0x000023019F837300ull,
225 		.num_endpoints = 1,
226 		.endpoints = &spk_l_endpoint,
227 		.name_prefix = "Left"
228 	},
229 	{
230 		.adr = 0x000027019F837300ull,
231 		.num_endpoints = 1,
232 		.endpoints = &spk_r_endpoint,
233 		.name_prefix = "Right"
234 	}
235 };
236 
237 static const struct snd_soc_acpi_adr_device rt5682_2_adr[] = {
238 	{
239 		.adr = 0x000221025D568200ull,
240 		.num_endpoints = 1,
241 		.endpoints = &single_endpoint,
242 		.name_prefix = "rt5682"
243 	}
244 };
245 
246 static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
247 	{
248 		.adr = 0x000230025D131601ull,
249 		.num_endpoints = 1,
250 		.endpoints = &spk_l_endpoint,
251 		.name_prefix = "rt1316-1"
252 	}
253 };
254 
255 static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
256 	{
257 		.adr = 0x000331025D131601ull,
258 		.num_endpoints = 1,
259 		.endpoints = &spk_r_endpoint,
260 		.name_prefix = "rt1316-2"
261 	}
262 };
263 
264 static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = {
265 	{
266 		.adr = 0x000131025D131601ull,
267 		.num_endpoints = 1,
268 		.endpoints = &spk_l_endpoint,
269 		.name_prefix = "rt1316-1"
270 	}
271 };
272 
273 static const struct snd_soc_acpi_adr_device rt1316_2_group2_adr[] = {
274 	{
275 		.adr = 0x000230025D131601ull,
276 		.num_endpoints = 1,
277 		.endpoints = &spk_r_endpoint,
278 		.name_prefix = "rt1316-2"
279 	}
280 };
281 
282 static const struct snd_soc_acpi_adr_device rt1316_3_single_adr[] = {
283 	{
284 		.adr = 0x000330025D131601ull,
285 		.num_endpoints = 1,
286 		.endpoints = &single_endpoint,
287 		.name_prefix = "rt1316-1"
288 	}
289 };
290 
291 static const struct snd_soc_acpi_adr_device rt1318_1_single_adr[] = {
292 	{
293 		.adr = 0x000130025D131801,
294 		.num_endpoints = 1,
295 		.endpoints = &single_endpoint,
296 		.name_prefix = "rt1318-1"
297 	}
298 };
299 
300 static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {
301 	{
302 		.adr = 0x000130025D131801ull,
303 		.num_endpoints = 1,
304 		.endpoints = &spk_l_endpoint,
305 		.name_prefix = "rt1318-1"
306 	}
307 };
308 
309 static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {
310 	{
311 		.adr = 0x000232025D131801ull,
312 		.num_endpoints = 1,
313 		.endpoints = &spk_r_endpoint,
314 		.name_prefix = "rt1318-2"
315 	}
316 };
317 
318 static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {
319 	{
320 		.adr = 0x000030025D071401ull,
321 		.num_endpoints = 1,
322 		.endpoints = &single_endpoint,
323 		.name_prefix = "rt714"
324 	}
325 };
326 
327 static const struct snd_soc_acpi_adr_device rt714_1_adr[] = {
328 	{
329 		.adr = 0x000130025D071401ull,
330 		.num_endpoints = 1,
331 		.endpoints = &single_endpoint,
332 		.name_prefix = "rt714"
333 	}
334 };
335 
336 static const struct snd_soc_acpi_link_adr mtl_712_l0_1712_l3[] = {
337 	{
338 		.mask = BIT(0),
339 		.num_adr = ARRAY_SIZE(rt712_0_single_adr),
340 		.adr_d = rt712_0_single_adr,
341 	},
342 	{
343 		.mask = BIT(3),
344 		.num_adr = ARRAY_SIZE(rt1712_3_single_adr),
345 		.adr_d = rt1712_3_single_adr,
346 	},
347 	{}
348 };
349 
350 static const struct snd_soc_acpi_link_adr mtl_712_l0[] = {
351 	{
352 		.mask = BIT(0),
353 		.num_adr = ARRAY_SIZE(rt712_0_single_adr),
354 		.adr_d = rt712_0_single_adr,
355 	},
356 	{}
357 };
358 
359 static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {
360 	{ /* Jack Playback Endpoint */
361 		.num = 0,
362 		.aggregated = 0,
363 		.group_position = 0,
364 		.group_id = 0,
365 	},
366 	{ /* DMIC Capture Endpoint */
367 		.num = 1,
368 		.aggregated = 0,
369 		.group_position = 0,
370 		.group_id = 0,
371 	},
372 	{ /* Jack Capture Endpoint */
373 		.num = 2,
374 		.aggregated = 0,
375 		.group_position = 0,
376 		.group_id = 0,
377 	},
378 	{ /* Speaker Playback Endpoint */
379 		.num = 3,
380 		.aggregated = 0,
381 		.group_position = 0,
382 		.group_id = 0,
383 	},
384 };
385 
386 static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {
387 	{
388 		.adr = 0x00003001FA424301ull,
389 		.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
390 		.endpoints = cs42l43_endpoints,
391 		.name_prefix = "cs42l43"
392 	}
393 };
394 
395 static const struct snd_soc_acpi_adr_device cs35l56_1_adr[] = {
396 	{
397 		.adr = 0x00013701FA355601ull,
398 		.num_endpoints = 1,
399 		.endpoints = &spk_r_endpoint,
400 		.name_prefix = "AMP3"
401 	},
402 	{
403 		.adr = 0x00013601FA355601ull,
404 		.num_endpoints = 1,
405 		.endpoints = &spk_3_endpoint,
406 		.name_prefix = "AMP4"
407 	}
408 };
409 
410 static const struct snd_soc_acpi_adr_device cs35l56_2_adr[] = {
411 	{
412 		.adr = 0x00023301FA355601ull,
413 		.num_endpoints = 1,
414 		.endpoints = &spk_l_endpoint,
415 		.name_prefix = "AMP1"
416 	},
417 	{
418 		.adr = 0x00023201FA355601ull,
419 		.num_endpoints = 1,
420 		.endpoints = &spk_2_endpoint,
421 		.name_prefix = "AMP2"
422 	}
423 };
424 
425 static const struct snd_soc_acpi_adr_device cs35l56_2_r_adr[] = {
426 	{
427 		.adr = 0x00023201FA355601ull,
428 		.num_endpoints = 1,
429 		.endpoints = &spk_r_endpoint,
430 		.name_prefix = "AMP3"
431 	},
432 	{
433 		.adr = 0x00023301FA355601ull,
434 		.num_endpoints = 1,
435 		.endpoints = &spk_3_endpoint,
436 		.name_prefix = "AMP4"
437 	}
438 
439 };
440 
441 static const struct snd_soc_acpi_adr_device cs35l56_3_l_adr[] = {
442 	{
443 		.adr = 0x00033001fa355601ull,
444 		.num_endpoints = 1,
445 		.endpoints = &spk_l_endpoint,
446 		.name_prefix = "AMP1"
447 	},
448 	{
449 		.adr = 0x00033101fa355601ull,
450 		.num_endpoints = 1,
451 		.endpoints = &spk_2_endpoint,
452 		.name_prefix = "AMP2"
453 	}
454 };
455 
456 static const struct snd_soc_acpi_link_adr rt5682_link2_max98373_link0[] = {
457 	/* Expected order: jack -> amp */
458 	{
459 		.mask = BIT(2),
460 		.num_adr = ARRAY_SIZE(rt5682_2_adr),
461 		.adr_d = rt5682_2_adr,
462 	},
463 	{
464 		.mask = BIT(0),
465 		.num_adr = ARRAY_SIZE(mx8373_0_adr),
466 		.adr_d = mx8373_0_adr,
467 	},
468 	{}
469 };
470 
471 static const struct snd_soc_acpi_link_adr mtl_rvp[] = {
472 	{
473 		.mask = BIT(0),
474 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
475 		.adr_d = rt711_sdca_0_adr,
476 	},
477 	{}
478 };
479 
480 static const struct snd_soc_acpi_link_adr mtl_rt722_only[] = {
481 	{
482 		.mask = BIT(0),
483 		.num_adr = ARRAY_SIZE(rt722_0_single_adr),
484 		.adr_d = rt722_0_single_adr,
485 	},
486 	{}
487 };
488 
489 static const struct snd_soc_acpi_link_adr mtl_3_in_1_sdca[] = {
490 	{
491 		.mask = BIT(0),
492 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
493 		.adr_d = rt711_sdca_0_adr,
494 	},
495 	{
496 		.mask = BIT(2),
497 		.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
498 		.adr_d = rt1316_2_group1_adr,
499 	},
500 	{
501 		.mask = BIT(3),
502 		.num_adr = ARRAY_SIZE(rt1316_3_group1_adr),
503 		.adr_d = rt1316_3_group1_adr,
504 	},
505 	{
506 		.mask = BIT(1),
507 		.num_adr = ARRAY_SIZE(rt714_1_adr),
508 		.adr_d = rt714_1_adr,
509 	},
510 	{}
511 };
512 
513 static const struct snd_soc_acpi_link_adr mtl_sdw_rt1318_l12_rt714_l0[] = {
514 	{
515 		.mask = BIT(1),
516 		.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
517 		.adr_d = rt1318_1_group1_adr,
518 	},
519 	{
520 		.mask = BIT(2),
521 		.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
522 		.adr_d = rt1318_2_group1_adr,
523 	},
524 	{
525 		.mask = BIT(0),
526 		.num_adr = ARRAY_SIZE(rt714_0_adr),
527 		.adr_d = rt714_0_adr,
528 	},
529 	{}
530 };
531 
532 static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12_rt1713_l3[] = {
533 	{
534 		.mask = BIT(0),
535 		.num_adr = ARRAY_SIZE(rt713_0_single_adr),
536 		.adr_d = rt713_0_single_adr,
537 	},
538 	{
539 		.mask = BIT(1),
540 		.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
541 		.adr_d = rt1316_1_group2_adr,
542 	},
543 	{
544 		.mask = BIT(2),
545 		.num_adr = ARRAY_SIZE(rt1316_2_group2_adr),
546 		.adr_d = rt1316_2_group2_adr,
547 	},
548 	{
549 		.mask = BIT(3),
550 		.num_adr = ARRAY_SIZE(rt1713_3_single_adr),
551 		.adr_d = rt1713_3_single_adr,
552 	},
553 	{}
554 };
555 
556 static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1318_l1_rt1713_l3[] = {
557 	{
558 		.mask = BIT(0),
559 		.num_adr = ARRAY_SIZE(rt713_0_single_adr),
560 		.adr_d = rt713_0_single_adr,
561 	},
562 	{
563 		.mask = BIT(1),
564 		.num_adr = ARRAY_SIZE(rt1318_1_single_adr),
565 		.adr_d = rt1318_1_single_adr,
566 	},
567 	{
568 		.mask = BIT(3),
569 		.num_adr = ARRAY_SIZE(rt1713_3_single_adr),
570 		.adr_d = rt1713_3_single_adr,
571 	},
572 	{}
573 };
574 
575 static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1318_l12_rt1713_l3[] = {
576 	{
577 		.mask = BIT(0),
578 		.num_adr = ARRAY_SIZE(rt713_0_single_adr),
579 		.adr_d = rt713_0_single_adr,
580 	},
581 	{
582 		.mask = BIT(1),
583 		.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
584 		.adr_d = rt1318_1_group1_adr,
585 	},
586 	{
587 		.mask = BIT(2),
588 		.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
589 		.adr_d = rt1318_2_group1_adr,
590 	},
591 	{
592 		.mask = BIT(3),
593 		.num_adr = ARRAY_SIZE(rt1713_3_single_adr),
594 		.adr_d = rt1713_3_single_adr,
595 	},
596 	{}
597 };
598 
599 static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12[] = {
600 	{
601 		.mask = BIT(0),
602 		.num_adr = ARRAY_SIZE(rt713_0_single_adr),
603 		.adr_d = rt713_0_single_adr,
604 	},
605 	{
606 		.mask = BIT(1),
607 		.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
608 		.adr_d = rt1316_1_group2_adr,
609 	},
610 	{
611 		.mask = BIT(2),
612 		.num_adr = ARRAY_SIZE(rt1316_2_group2_adr),
613 		.adr_d = rt1316_2_group2_adr,
614 	},
615 	{}
616 };
617 
618 static const struct snd_soc_acpi_link_adr mtl_rt711_l0_rt1316_l3[] = {
619 	{
620 		.mask = BIT(0),
621 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
622 		.adr_d = rt711_sdca_0_adr,
623 	},
624 	{
625 		.mask = BIT(3),
626 		.num_adr = ARRAY_SIZE(rt1316_3_single_adr),
627 		.adr_d = rt1316_3_single_adr,
628 	},
629 	{}
630 };
631 
632 static const struct snd_soc_acpi_adr_device mx8363_2_adr[] = {
633 	{
634 		.adr = 0x000230019F836300ull,
635 		.num_endpoints = 1,
636 		.endpoints = &spk_l_endpoint,
637 		.name_prefix = "Left"
638 	},
639 	{
640 		.adr = 0x000231019F836300ull,
641 		.num_endpoints = 1,
642 		.endpoints = &spk_r_endpoint,
643 		.name_prefix = "Right"
644 	}
645 };
646 
647 static const struct snd_soc_acpi_adr_device cs42l42_0_adr[] = {
648 	{
649 		.adr = 0x00001001FA424200ull,
650 		.num_endpoints = 1,
651 		.endpoints = &single_endpoint,
652 		.name_prefix = "cs42l42"
653 	}
654 };
655 
656 static const struct snd_soc_acpi_link_adr cs42l42_link0_max98363_link2[] = {
657 	/* Expected order: jack -> amp */
658 	{
659 		.mask = BIT(0),
660 		.num_adr = ARRAY_SIZE(cs42l42_0_adr),
661 		.adr_d = cs42l42_0_adr,
662 	},
663 	{
664 		.mask = BIT(2),
665 		.num_adr = ARRAY_SIZE(mx8363_2_adr),
666 		.adr_d = mx8363_2_adr,
667 	},
668 	{}
669 };
670 
671 static const struct snd_soc_acpi_link_adr mtl_cs42l43_l0[] = {
672 	{
673 		.mask = BIT(0),
674 		.num_adr = ARRAY_SIZE(cs42l43_0_adr),
675 		.adr_d = cs42l43_0_adr,
676 	},
677 	{}
678 };
679 
680 static const struct snd_soc_acpi_link_adr mtl_cs42l43_cs35l56[] = {
681 	{
682 		.mask = BIT(0),
683 		.num_adr = ARRAY_SIZE(cs42l43_0_adr),
684 		.adr_d = cs42l43_0_adr,
685 	},
686 	{
687 		.mask = BIT(1),
688 		.num_adr = ARRAY_SIZE(cs35l56_1_adr),
689 		.adr_d = cs35l56_1_adr,
690 	},
691 	{
692 		.mask = BIT(2),
693 		.num_adr = ARRAY_SIZE(cs35l56_2_adr),
694 		.adr_d = cs35l56_2_adr,
695 	},
696 	{}
697 };
698 
699 static const struct snd_soc_acpi_link_adr cs42l43_link0_cs35l56_link2_link3[] = {
700 	/* Expected order: jack -> amp */
701 	{
702 		.mask = BIT(0),
703 		.num_adr = ARRAY_SIZE(cs42l43_0_adr),
704 		.adr_d = cs42l43_0_adr,
705 	},
706 	{
707 		.mask = BIT(2),
708 		.num_adr = ARRAY_SIZE(cs35l56_2_r_adr),
709 		.adr_d = cs35l56_2_r_adr,
710 	},
711 	{
712 		.mask = BIT(3),
713 		.num_adr = ARRAY_SIZE(cs35l56_3_l_adr),
714 		.adr_d = cs35l56_3_l_adr,
715 	},
716 	{}
717 };
718 
719 /* this table is used when there is no I2S codec present */
720 struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = {
721 	/* mockup tests need to be first */
722 	{
723 		.link_mask = GENMASK(3, 0),
724 		.links = sdw_mockup_headset_2amps_mic,
725 		.drv_name = "sof_sdw",
726 		.sof_tplg_filename = "sof-mtl-rt711-rt1308-rt715.tplg",
727 	},
728 	{
729 		.link_mask = BIT(0) | BIT(1) | BIT(3),
730 		.links = sdw_mockup_headset_1amp_mic,
731 		.drv_name = "sof_sdw",
732 		.sof_tplg_filename = "sof-mtl-rt711-rt1308-mono-rt715.tplg",
733 	},
734 	{
735 		.link_mask = GENMASK(2, 0),
736 		.links = sdw_mockup_mic_headset_1amp,
737 		.drv_name = "sof_sdw",
738 		.sof_tplg_filename = "sof-mtl-rt715-rt711-rt1308-mono.tplg",
739 	},
740 	{
741 		.link_mask = GENMASK(3, 0),
742 		.links = mtl_rt713_l0_rt1316_l12_rt1713_l3,
743 		.drv_name = "sof_sdw",
744 		.sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12-rt1713-l3.tplg",
745 	},
746 	{
747 		.link_mask = GENMASK(3, 0),
748 		.links = mtl_rt713_l0_rt1318_l12_rt1713_l3,
749 		.drv_name = "sof_sdw",
750 		.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l12-rt1713-l3.tplg",
751 	},
752 	{
753 		.link_mask = BIT(0) | BIT(1) | BIT(3),
754 		.links = mtl_rt713_l0_rt1318_l1_rt1713_l3,
755 		.drv_name = "sof_sdw",
756 		.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l1-rt1713-l3.tplg",
757 	},
758 	{
759 		.link_mask = GENMASK(2, 0),
760 		.links = mtl_rt713_l0_rt1316_l12,
761 		.drv_name = "sof_sdw",
762 		.sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12.tplg",
763 	},
764 	{
765 		.link_mask = BIT(3) | BIT(0),
766 		.links = mtl_712_l0_1712_l3,
767 		.drv_name = "sof_sdw",
768 		.sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg",
769 	},
770 	{
771 		.link_mask = BIT(0),
772 		.links = mtl_712_l0,
773 		.drv_name = "sof_sdw",
774 		.sof_tplg_filename = "sof-mtl-rt712-l0.tplg",
775 	},
776 	{
777 		.link_mask = GENMASK(2, 0),
778 		.links = mtl_sdw_rt1318_l12_rt714_l0,
779 		.drv_name = "sof_sdw",
780 		.sof_tplg_filename = "sof-mtl-rt1318-l12-rt714-l0.tplg"
781 	},
782 	{
783 		.link_mask = BIT(0) | BIT(2) | BIT(3),
784 		.links = cs42l43_link0_cs35l56_link2_link3,
785 		.drv_name = "sof_sdw",
786 		.sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l23.tplg",
787 	},
788 	{
789 		.link_mask = GENMASK(2, 0),
790 		.links = mtl_cs42l43_cs35l56,
791 		.drv_name = "sof_sdw",
792 		.sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l12.tplg",
793 	},
794 	{
795 		.link_mask = BIT(0),
796 		.links = mtl_cs42l43_l0,
797 		.drv_name = "sof_sdw",
798 		.sof_tplg_filename = "sof-mtl-cs42l43-l0.tplg",
799 	},
800 	{
801 		.link_mask = GENMASK(3, 0),
802 		.links = mtl_3_in_1_sdca,
803 		.drv_name = "sof_sdw",
804 		.sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg",
805 	},
806 	{
807 		.link_mask = 0x9, /* 2 active links required */
808 		.links = mtl_rt711_l0_rt1316_l3,
809 		.drv_name = "sof_sdw",
810 		.sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l3.tplg",
811 	},
812 	{
813 		.link_mask = BIT(0),
814 		.links = mtl_rt722_only,
815 		.drv_name = "sof_sdw",
816 		.sof_tplg_filename = "sof-mtl-rt722-l0.tplg",
817 	},
818 	{
819 		.link_mask = BIT(0),
820 		.links = mtl_rvp,
821 		.drv_name = "sof_sdw",
822 		.sof_tplg_filename = "sof-mtl-rt711.tplg",
823 	},
824 	{
825 		.link_mask = BIT(0) | BIT(2),
826 		.links = rt5682_link2_max98373_link0,
827 		.drv_name = "sof_sdw",
828 		.sof_tplg_filename = "sof-mtl-sdw-rt5682-l2-max98373-l0.tplg",
829 	},
830 	{
831 		.link_mask = BIT(0) | BIT(2),
832 		.links = cs42l42_link0_max98363_link2,
833 		.drv_name = "sof_sdw",
834 		.sof_tplg_filename = "sof-mtl-sdw-cs42l42-l0-max98363-l2.tplg",
835 	},
836 	{},
837 };
838 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines);
839