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