xref: /linux/sound/soc/intel/common/soc-acpi-intel-ptl-match.c (revision 746680ec6696585e30db3e18c93a63df9cbec39c)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * soc-acpi-intel-ptl-match.c - tables and support for PTL ACPI enumeration.
4  *
5  * Copyright (c) 2024, Intel Corporation.
6  *
7  * Order of entries in snd_soc_acpi_intel_ptl_sdw_machines[] matters.
8  * Check subset of link mask when matching the machine driver, rule is
9  * superset match should be ordered before subset matches.
10  */
11 
12 #include <sound/soc-acpi.h>
13 #include <sound/soc-acpi-intel-match.h>
14 #include "sof-function-topology-lib.h"
15 #include "soc-acpi-intel-sdca-quirks.h"
16 #include "soc-acpi-intel-sdw-mockup-match.h"
17 #include <sound/soc-acpi-intel-ssp-common.h>
18 
19 static const struct snd_soc_acpi_codecs ptl_rt5682_rt5682s_hp = {
20 	.num_codecs = 2,
21 	.codecs = {RT5682_ACPI_HID, RT5682S_ACPI_HID},
22 };
23 
24 static const struct snd_soc_acpi_codecs ptl_essx_83x6 = {
25 	.num_codecs = 3,
26 	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
27 };
28 
29 static const struct snd_soc_acpi_codecs ptl_lt6911_hdmi = {
30 	.num_codecs = 1,
31 	.codecs = {"INTC10B0"}
32 };
33 
34 struct snd_soc_acpi_mach snd_soc_acpi_intel_ptl_machines[] = {
35 	{
36 		.comp_ids = &ptl_rt5682_rt5682s_hp,
37 		.drv_name = "ptl_rt5682_c1_h02",
38 		.machine_quirk = snd_soc_acpi_codec_list,
39 		.quirk_data = &ptl_lt6911_hdmi,
40 		.sof_tplg_filename = "sof-ptl-rt5682-ssp1-hdmi-ssp02.tplg",
41 	},
42 	{
43 		.comp_ids = &ptl_rt5682_rt5682s_hp,
44 		.drv_name = "ptl_rt5682_def",
45 		.sof_tplg_filename = "sof-ptl", /* the tplg suffix is added at run time */
46 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_AMP_NAME |
47 					SND_SOC_ACPI_TPLG_INTEL_CODEC_NAME,
48 	},
49 	{
50 		.comp_ids = &ptl_essx_83x6,
51 		.drv_name = "ptl_es83x6_c1_h02",
52 		.machine_quirk = snd_soc_acpi_codec_list,
53 		.quirk_data = &ptl_lt6911_hdmi,
54 		.sof_tplg_filename = "sof-ptl-es83x6-ssp1-hdmi-ssp02.tplg",
55 	},
56 	{
57 		.comp_ids = &ptl_essx_83x6,
58 		.drv_name = "sof-essx8336",
59 		.sof_tplg_filename = "sof-ptl-es8336", /* the tplg suffix is added at run time */
60 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
61 					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
62 					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
63 	},
64 	{},
65 };
66 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_ptl_machines);
67 
68 static const struct snd_soc_acpi_endpoint single_endpoint = {
69 	.num = 0,
70 	.aggregated = 0,
71 	.group_position = 0,
72 	.group_id = 0,
73 };
74 
75 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
76 	.num = 0,
77 	.aggregated = 1,
78 	.group_position = 0,
79 	.group_id = 1,
80 };
81 
82 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
83 	.num = 0,
84 	.aggregated = 1,
85 	.group_position = 1,
86 	.group_id = 1,
87 };
88 
89 static const struct snd_soc_acpi_endpoint spk_1_endpoint = {
90 	.num = 0,
91 	.aggregated = 1,
92 	.group_position = 1,
93 	.group_id = 1,
94 };
95 
96 static const struct snd_soc_acpi_endpoint spk_2_endpoint = {
97 	.num = 0,
98 	.aggregated = 1,
99 	.group_position = 2,
100 	.group_id = 1,
101 };
102 
103 static const struct snd_soc_acpi_endpoint spk_3_endpoint = {
104 	.num = 0,
105 	.aggregated = 1,
106 	.group_position = 3,
107 	.group_id = 1,
108 };
109 
110 static const struct snd_soc_acpi_endpoint spk_4_endpoint = {
111 	.num = 0,
112 	.aggregated = 1,
113 	.group_position = 4,
114 	.group_id = 1,
115 };
116 
117 static const struct snd_soc_acpi_endpoint spk_5_endpoint = {
118 	.num = 0,
119 	.aggregated = 1,
120 	.group_position = 5,
121 	.group_id = 1,
122 };
123 
124 static const struct snd_soc_acpi_endpoint spk_6_endpoint = {
125 	.num = 0,
126 	.aggregated = 1,
127 	.group_position = 6,
128 	.group_id = 1,
129 };
130 
131 /*
132  * Multi-function codecs with three endpoints created for
133  * headset, amp and dmic functions.
134  */
135 static const struct snd_soc_acpi_endpoint rt_mf_endpoints[] = {
136 	{
137 		.num = 0,
138 		.aggregated = 0,
139 		.group_position = 0,
140 		.group_id = 0,
141 	},
142 	{
143 		.num = 1,
144 		.aggregated = 0,
145 		.group_position = 0,
146 		.group_id = 0,
147 	},
148 	{
149 		.num = 2,
150 		.aggregated = 0,
151 		.group_position = 0,
152 		.group_id = 0,
153 	},
154 };
155 
156 static const struct snd_soc_acpi_endpoint jack_dmic_endpoints[] = {
157 	/* Jack Endpoint */
158 	{
159 		.num = 0,
160 		.aggregated = 0,
161 		.group_position = 0,
162 		.group_id = 0,
163 	},
164 	/* DMIC Endpoint */
165 	{
166 		.num = 1,
167 		.aggregated = 0,
168 		.group_position = 0,
169 		.group_id = 0,
170 	},
171 };
172 
173 static const struct snd_soc_acpi_endpoint jack_amp_g1_dmic_endpoints[] = {
174 	/* Jack Endpoint */
175 	{
176 		.num = 0,
177 		.aggregated = 0,
178 		.group_position = 0,
179 		.group_id = 0,
180 	},
181 	/* Amp Endpoint, work as spk_l_endpoint */
182 	{
183 		.num = 1,
184 		.aggregated = 1,
185 		.group_position = 0,
186 		.group_id = 1,
187 	},
188 	/* DMIC Endpoint */
189 	{
190 		.num = 2,
191 		.aggregated = 0,
192 		.group_position = 0,
193 		.group_id = 0,
194 	},
195 };
196 
197 static const struct snd_soc_acpi_endpoint cs42l43_amp_spkagg_endpoints[] = {
198 	{ /* Jack Playback Endpoint */
199 		.num = 0,
200 		.aggregated = 0,
201 		.group_position = 0,
202 		.group_id = 0,
203 	},
204 	{ /* DMIC Capture Endpoint */
205 		.num = 1,
206 		.aggregated = 0,
207 		.group_position = 0,
208 		.group_id = 0,
209 	},
210 	{ /* Jack Capture Endpoint */
211 		.num = 2,
212 		.aggregated = 0,
213 		.group_position = 0,
214 		.group_id = 0,
215 	},
216 	{ /* Speaker Playback Endpoint */
217 		.num = 3,
218 		.aggregated = 1,
219 		.group_position = 0,
220 		.group_id = 1,
221 	},
222 };
223 
224 static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {
225 	{ /* Jack Playback Endpoint */
226 		.num = 0,
227 		.aggregated = 0,
228 		.group_position = 0,
229 		.group_id = 0,
230 	},
231 	{ /* DMIC Capture Endpoint */
232 		.num = 1,
233 		.aggregated = 0,
234 		.group_position = 0,
235 		.group_id = 0,
236 	},
237 	{ /* Jack Capture Endpoint */
238 		.num = 2,
239 		.aggregated = 0,
240 		.group_position = 0,
241 		.group_id = 0,
242 	},
243 	{ /* Speaker Playback Endpoint */
244 		.num = 3,
245 		.aggregated = 0,
246 		.group_position = 0,
247 		.group_id = 0,
248 	},
249 };
250 
251 static const struct snd_soc_acpi_adr_device cs42l43_2_adr[] = {
252 	{
253 		.adr = 0x00023001fa424301ull,
254 		.num_endpoints = ARRAY_SIZE(cs42l43_amp_spkagg_endpoints),
255 		.endpoints = cs42l43_amp_spkagg_endpoints,
256 		.name_prefix = "cs42l43"
257 	}
258 };
259 
260 static const struct snd_soc_acpi_adr_device cs35l56_1_3amp_adr[] = {
261 	{
262 		.adr = 0x00013001fa355601ull,
263 		.num_endpoints = 1,
264 		.endpoints = &spk_1_endpoint,
265 		.name_prefix = "AMP1"
266 	},
267 	{
268 		.adr = 0x00013101fa355601ull,
269 		.num_endpoints = 1,
270 		.endpoints = &spk_2_endpoint,
271 		.name_prefix = "AMP2"
272 	},
273 	{
274 		.adr = 0x00013201fa355601ull,
275 		.num_endpoints = 1,
276 		.endpoints = &spk_3_endpoint,
277 		.name_prefix = "AMP3"
278 	}
279 };
280 
281 static const struct snd_soc_acpi_adr_device cs35l56_3_3amp_adr[] = {
282 	{
283 		.adr = 0x00033301fa355601ull,
284 		.num_endpoints = 1,
285 		.endpoints = &spk_4_endpoint,
286 		.name_prefix = "AMP4"
287 	},
288 	{
289 		.adr = 0x00033401fa355601ull,
290 		.num_endpoints = 1,
291 		.endpoints = &spk_5_endpoint,
292 		.name_prefix = "AMP5"
293 	},
294 	{
295 		.adr = 0x00033501fa355601ull,
296 		.num_endpoints = 1,
297 		.endpoints = &spk_6_endpoint,
298 		.name_prefix = "AMP6"
299 	}
300 };
301 
302 static const struct snd_soc_acpi_adr_device cs42l43_3_adr[] = {
303 	{
304 		.adr = 0x00033001FA424301ull,
305 		.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
306 		.endpoints = cs42l43_endpoints,
307 		.name_prefix = "cs42l43"
308 	}
309 };
310 
311 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
312 	{
313 		.adr = 0x000030025D071101ull,
314 		.num_endpoints = 1,
315 		.endpoints = &single_endpoint,
316 		.name_prefix = "rt711"
317 	}
318 };
319 
320 static const struct snd_soc_acpi_adr_device rt712_vb_2_group1_adr[] = {
321 	{
322 		.adr = 0x000230025D071201ull,
323 		.num_endpoints = ARRAY_SIZE(jack_amp_g1_dmic_endpoints),
324 		.endpoints = jack_amp_g1_dmic_endpoints,
325 		.name_prefix = "rt712"
326 	}
327 };
328 
329 static const struct snd_soc_acpi_adr_device rt712_vb_3_group1_adr[] = {
330 	{
331 		.adr = 0x000330025D071201ull,
332 		.num_endpoints = ARRAY_SIZE(jack_amp_g1_dmic_endpoints),
333 		.endpoints = jack_amp_g1_dmic_endpoints,
334 		.name_prefix = "rt712"
335 	}
336 };
337 
338 static const struct snd_soc_acpi_adr_device rt713_vb_2_adr[] = {
339 	{
340 		.adr = 0x000230025d071301ull,
341 		.num_endpoints = ARRAY_SIZE(jack_dmic_endpoints),
342 		.endpoints = jack_dmic_endpoints,
343 		.name_prefix = "rt713"
344 	}
345 };
346 
347 static const struct snd_soc_acpi_adr_device rt713_vb_3_adr[] = {
348 	{
349 		.adr = 0x000330025D071301ull,
350 		.num_endpoints = ARRAY_SIZE(jack_dmic_endpoints),
351 		.endpoints = jack_dmic_endpoints,
352 		.name_prefix = "rt713"
353 	}
354 };
355 
356 static const struct snd_soc_acpi_adr_device rt1320_3_group1_adr[] = {
357 	{
358 		.adr = 0x000330025D132001ull,
359 		.num_endpoints = 1,
360 		.endpoints = &spk_r_endpoint,
361 		.name_prefix = "rt1320-1"
362 	}
363 };
364 
365 static const struct snd_soc_acpi_adr_device rt721_0_single_adr[] = {
366 	{
367 		.adr = 0x000030025d072101ull,
368 		.num_endpoints = ARRAY_SIZE(rt_mf_endpoints),
369 		.endpoints = rt_mf_endpoints,
370 		.name_prefix = "rt721"
371 	}
372 };
373 
374 static const struct snd_soc_acpi_adr_device rt721_3_single_adr[] = {
375 	{
376 		.adr = 0x000330025d072101ull,
377 		.num_endpoints = ARRAY_SIZE(rt_mf_endpoints),
378 		.endpoints = rt_mf_endpoints,
379 		.name_prefix = "rt721"
380 	}
381 };
382 
383 static const struct snd_soc_acpi_link_adr ptl_rt721_l3[] = {
384 	{
385 		.mask = BIT(3),
386 		.num_adr = ARRAY_SIZE(rt721_3_single_adr),
387 		.adr_d = rt721_3_single_adr,
388 	},
389 	{},
390 };
391 
392 static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = {
393 	{
394 		.adr = 0x000030025d072201ull,
395 		.num_endpoints = ARRAY_SIZE(rt_mf_endpoints),
396 		.endpoints = rt_mf_endpoints,
397 		.name_prefix = "rt722"
398 	}
399 };
400 
401 static const struct snd_soc_acpi_adr_device rt722_1_single_adr[] = {
402 	{
403 		.adr = 0x000130025d072201ull,
404 		.num_endpoints = ARRAY_SIZE(rt_mf_endpoints),
405 		.endpoints = rt_mf_endpoints,
406 		.name_prefix = "rt722"
407 	}
408 };
409 
410 static const struct snd_soc_acpi_adr_device rt722_3_single_adr[] = {
411 	{
412 		.adr = 0x000330025d072201ull,
413 		.num_endpoints = ARRAY_SIZE(rt_mf_endpoints),
414 		.endpoints = rt_mf_endpoints,
415 		.name_prefix = "rt722"
416 	}
417 };
418 
419 static const struct snd_soc_acpi_adr_device rt1320_1_group1_adr[] = {
420 	{
421 		.adr = 0x000130025D132001ull,
422 		.num_endpoints = 1,
423 		.endpoints = &spk_r_endpoint,
424 		.name_prefix = "rt1320-1"
425 	}
426 };
427 
428 static const struct snd_soc_acpi_adr_device rt1320_1_group2_adr[] = {
429 	{
430 		.adr = 0x000130025D132001ull,
431 		.num_endpoints = 1,
432 		.endpoints = &spk_l_endpoint,
433 		.name_prefix = "rt1320-1"
434 	}
435 };
436 
437 static const struct snd_soc_acpi_adr_device rt1320_2_group1_adr[] = {
438 	{
439 		.adr = 0x000230025D132001ull,
440 		.num_endpoints = 1,
441 		.endpoints = &spk_r_endpoint,
442 		.name_prefix = "rt1320-1"
443 	}
444 };
445 
446 static const struct snd_soc_acpi_adr_device rt1320_2_group2_adr[] = {
447 	{
448 		.adr = 0x000230025D132001ull,
449 		.num_endpoints = 1,
450 		.endpoints = &spk_r_endpoint,
451 		.name_prefix = "rt1320-1"
452 	}
453 };
454 
455 static const struct snd_soc_acpi_adr_device rt1320_3_group2_adr[] = {
456 	{
457 		.adr = 0x000330025D132001ull,
458 		.num_endpoints = 1,
459 		.endpoints = &spk_r_endpoint,
460 		.name_prefix = "rt1320-2"
461 	}
462 };
463 
464 static const struct snd_soc_acpi_link_adr ptl_cs42l43_l2_cs35l56x6_l13[] = {
465 	{
466 		.mask = BIT(2),
467 		.num_adr = ARRAY_SIZE(cs42l43_2_adr),
468 		.adr_d = cs42l43_2_adr,
469 	},
470 	{
471 		.mask = BIT(1),
472 		.num_adr = ARRAY_SIZE(cs35l56_1_3amp_adr),
473 		.adr_d = cs35l56_1_3amp_adr,
474 	},
475 	{
476 		.mask = BIT(3),
477 		.num_adr = ARRAY_SIZE(cs35l56_3_3amp_adr),
478 		.adr_d = cs35l56_3_3amp_adr,
479 	},
480 	{}
481 };
482 
483 static const struct snd_soc_acpi_link_adr ptl_cs42l43_l3[] = {
484 	{
485 		.mask = BIT(3),
486 		.num_adr = ARRAY_SIZE(cs42l43_3_adr),
487 		.adr_d = cs42l43_3_adr,
488 	},
489 	{}
490 };
491 
492 static const struct snd_soc_acpi_link_adr ptl_rt721_l0[] = {
493 	{
494 		.mask = BIT(0),
495 		.num_adr = ARRAY_SIZE(rt721_0_single_adr),
496 		.adr_d = rt721_0_single_adr,
497 	},
498 	{}
499 };
500 
501 static const struct snd_soc_acpi_link_adr ptl_rt722_only[] = {
502 	{
503 		.mask = BIT(0),
504 		.num_adr = ARRAY_SIZE(rt722_0_single_adr),
505 		.adr_d = rt722_0_single_adr,
506 	},
507 	{}
508 };
509 
510 static const struct snd_soc_acpi_link_adr ptl_rt722_l1[] = {
511 	{
512 		.mask = BIT(1),
513 		.num_adr = ARRAY_SIZE(rt722_1_single_adr),
514 		.adr_d = rt722_1_single_adr,
515 	},
516 	{}
517 };
518 
519 static const struct snd_soc_acpi_link_adr ptl_rt722_l3[] = {
520 	{
521 		.mask = BIT(3),
522 		.num_adr = ARRAY_SIZE(rt722_3_single_adr),
523 		.adr_d = rt722_3_single_adr,
524 	},
525 	{}
526 };
527 
528 static const struct snd_soc_acpi_link_adr ptl_rvp[] = {
529 	{
530 		.mask = BIT(0),
531 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
532 		.adr_d = rt711_sdca_0_adr,
533 	},
534 	{}
535 };
536 
537 static const struct snd_soc_acpi_link_adr ptl_sdw_rt713_vb_l2_rt1320_l13[] = {
538 	{
539 		.mask = BIT(2),
540 		.num_adr = ARRAY_SIZE(rt713_vb_2_adr),
541 		.adr_d = rt713_vb_2_adr,
542 	},
543 	{
544 		.mask = BIT(1),
545 		.num_adr = ARRAY_SIZE(rt1320_1_group2_adr),
546 		.adr_d = rt1320_1_group2_adr,
547 	},
548 	{
549 		.mask = BIT(3),
550 		.num_adr = ARRAY_SIZE(rt1320_3_group2_adr),
551 		.adr_d = rt1320_3_group2_adr,
552 	},
553 	{}
554 };
555 
556 static const struct snd_soc_acpi_link_adr ptl_sdw_rt713_vb_l3_rt1320_l12[] = {
557 	{
558 		.mask = BIT(3),
559 		.num_adr = ARRAY_SIZE(rt713_vb_3_adr),
560 		.adr_d = rt713_vb_3_adr,
561 	},
562 	{
563 		.mask = BIT(1),
564 		.num_adr = ARRAY_SIZE(rt1320_1_group2_adr),
565 		.adr_d = rt1320_1_group2_adr,
566 	},
567 	{
568 		.mask = BIT(2),
569 		.num_adr = ARRAY_SIZE(rt1320_2_group2_adr),
570 		.adr_d = rt1320_2_group2_adr,
571 	},
572 	{}
573 };
574 
575 static const struct snd_soc_acpi_link_adr ptl_sdw_rt712_vb_l2_rt1320_l1[] = {
576 	{
577 		.mask = BIT(2),
578 		.num_adr = ARRAY_SIZE(rt712_vb_2_group1_adr),
579 		.adr_d = rt712_vb_2_group1_adr,
580 	},
581 	{
582 		.mask = BIT(1),
583 		.num_adr = ARRAY_SIZE(rt1320_1_group1_adr),
584 		.adr_d = rt1320_1_group1_adr,
585 	},
586 	{}
587 };
588 
589 static const struct snd_soc_acpi_link_adr ptl_sdw_rt712_vb_l3_rt1320_l2[] = {
590 	{
591 		.mask = BIT(3),
592 		.num_adr = ARRAY_SIZE(rt712_vb_3_group1_adr),
593 		.adr_d = rt712_vb_3_group1_adr,
594 	},
595 	{
596 		.mask = BIT(2),
597 		.num_adr = ARRAY_SIZE(rt1320_2_group1_adr),
598 		.adr_d = rt1320_2_group1_adr,
599 	},
600 	{}
601 };
602 
603 static const struct snd_soc_acpi_link_adr ptl_sdw_rt712_vb_l3_rt1320_l3[] = {
604 	{
605 		.mask = BIT(3),
606 		.num_adr = ARRAY_SIZE(rt712_vb_3_group1_adr),
607 		.adr_d = rt712_vb_3_group1_adr,
608 	},
609 	{
610 		.mask = BIT(3),
611 		.num_adr = ARRAY_SIZE(rt1320_3_group1_adr),
612 		.adr_d = rt1320_3_group1_adr,
613 	},
614 	{}
615 };
616 
617 /* this table is used when there is no I2S codec present */
618 struct snd_soc_acpi_mach snd_soc_acpi_intel_ptl_sdw_machines[] = {
619 /* Order Priority: mockup > most links > most bit link-mask > alphabetical */
620 	{
621 		.link_mask = GENMASK(3, 0),
622 		.links = sdw_mockup_headset_2amps_mic,
623 		.drv_name = "sof_sdw",
624 		.sof_tplg_filename = "sof-ptl-rt711-rt1308-rt715.tplg",
625 	},
626 	{
627 		.link_mask = BIT(0) | BIT(1) | BIT(3),
628 		.links = sdw_mockup_headset_1amp_mic,
629 		.drv_name = "sof_sdw",
630 		.sof_tplg_filename = "sof-ptl-rt711-rt1308-mono-rt715.tplg",
631 	},
632 	{
633 		.link_mask = GENMASK(2, 0),
634 		.links = sdw_mockup_mic_headset_1amp,
635 		.drv_name = "sof_sdw",
636 		.sof_tplg_filename = "sof-ptl-rt715-rt711-rt1308-mono.tplg",
637 	},
638 	{
639 		.link_mask = BIT(0),
640 		.links = sdw_mockup_multi_func,
641 		.drv_name = "sof_sdw",
642 		.sof_tplg_filename = "sof-ptl-rt722.tplg", /* Reuse the existing tplg file */
643 	},
644 	{
645 		.link_mask = BIT(1) | BIT(2) | BIT(3),
646 		.links = ptl_sdw_rt713_vb_l2_rt1320_l13,
647 		.drv_name = "sof_sdw",
648 		.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,
649 		.sof_tplg_filename = "sof-ptl-rt713-l2-rt1320-l13.tplg",
650 		.get_function_tplg_files = sof_sdw_get_tplg_files,
651 	},
652 	{
653 		.link_mask = BIT(1) | BIT(2) | BIT(3),
654 		.links = ptl_sdw_rt713_vb_l3_rt1320_l12,
655 		.drv_name = "sof_sdw",
656 		.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,
657 		.sof_tplg_filename = "sof-ptl-rt713-l3-rt1320-l12.tplg",
658 		.get_function_tplg_files = sof_sdw_get_tplg_files,
659 	},
660 	{
661 		.link_mask = BIT(1) | BIT(2) | BIT(3),
662 		.links = ptl_cs42l43_l2_cs35l56x6_l13,
663 		.drv_name = "sof_sdw",
664 		.sof_tplg_filename = "sof-ptl-cs42l43-l2-cs35l56x6-l13.tplg",
665 	},
666 	{
667 		.link_mask = BIT(1) | BIT(2),
668 		.links = ptl_sdw_rt712_vb_l2_rt1320_l1,
669 		.drv_name = "sof_sdw",
670 		.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,
671 		.sof_tplg_filename = "sof-ptl-rt712-l2-rt1320-l1.tplg",
672 		.get_function_tplg_files = sof_sdw_get_tplg_files,
673 	},
674 	{
675 		.link_mask = BIT(2) | BIT(3),
676 		.links = ptl_sdw_rt712_vb_l3_rt1320_l2,
677 		.drv_name = "sof_sdw",
678 		.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,
679 		.sof_tplg_filename = "sof-ptl-rt712-l3-rt1320-l2.tplg",
680 		.get_function_tplg_files = sof_sdw_get_tplg_files,
681 	},
682 	{
683 		.link_mask = BIT(0),
684 		.links = ptl_rvp,
685 		.drv_name = "sof_sdw",
686 		.sof_tplg_filename = "sof-ptl-rt711.tplg",
687 	},
688 	{
689 		.link_mask = BIT(0),
690 		.links = ptl_rt721_l0,
691 		.drv_name = "sof_sdw",
692 		.sof_tplg_filename = "sof-ptl-rt721.tplg",
693 		.get_function_tplg_files = sof_sdw_get_tplg_files,
694 	},
695 	{
696 		.link_mask = BIT(0),
697 		.links = ptl_rt722_only,
698 		.drv_name = "sof_sdw",
699 		.sof_tplg_filename = "sof-ptl-rt722.tplg",
700 		.get_function_tplg_files = sof_sdw_get_tplg_files,
701 	},
702 	{
703 		.link_mask = BIT(1),
704 		.links = ptl_rt722_l1,
705 		.drv_name = "sof_sdw",
706 		.sof_tplg_filename = "sof-ptl-rt722.tplg",
707 		.get_function_tplg_files = sof_sdw_get_tplg_files,
708 	},
709 	{
710 		.link_mask = BIT(3),
711 		.links = ptl_cs42l43_l3,
712 		.drv_name = "sof_sdw",
713 		.sof_tplg_filename = "sof-ptl-cs42l43-l3.tplg",
714 		.get_function_tplg_files = sof_sdw_get_tplg_files,
715 	},
716 	{
717 		.link_mask = BIT(3),
718 		.links = ptl_sdw_rt712_vb_l3_rt1320_l3,
719 		.drv_name = "sof_sdw",
720 		.machine_check = snd_soc_acpi_intel_sdca_is_device_rt712_vb,
721 		.sof_tplg_filename = "sof-ptl-rt712-l3-rt1320-l3.tplg",
722 		.get_function_tplg_files = sof_sdw_get_tplg_files,
723 	},
724 	{
725 		.link_mask = BIT(3),
726 		.links = ptl_rt721_l3,
727 		.drv_name = "sof_sdw",
728 		.sof_tplg_filename = "sof-ptl-rt721.tplg",
729 		.get_function_tplg_files = sof_sdw_get_tplg_files,
730 	},
731 	{
732 		.link_mask = BIT(3),
733 		.links = ptl_rt722_l3,
734 		.drv_name = "sof_sdw",
735 		.sof_tplg_filename = "sof-ptl-rt722.tplg",
736 		.get_function_tplg_files = sof_sdw_get_tplg_files,
737 	},
738 	{},
739 };
740 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_ptl_sdw_machines);
741