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