1 // SPDX-License-Identifier: GPL-2.0-only
3 * soc-apci-intel-adl-match.c - tables and support for ADL ACPI enumeration.
5 * Copyright (c) 2020, Intel Corporation.
8 #include <sound/soc-acpi.h>
9 #include <sound/soc-acpi-intel-match.h>
11 static const struct snd_soc_acpi_codecs essx_83x6 = {
13 .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
16 static const struct snd_soc_acpi_endpoint single_endpoint = {
23 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
30 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
37 static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
39 .adr = 0x000020025D071100ull,
41 .endpoints = &single_endpoint,
42 .name_prefix = "rt711"
46 static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
48 .adr = 0x000120025D130800ull,
50 .endpoints = &spk_l_endpoint,
51 .name_prefix = "rt1308-1"
55 static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
57 .adr = 0x000220025D130800ull,
59 .endpoints = &spk_r_endpoint,
60 .name_prefix = "rt1308-2"
64 static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
66 .adr = 0x000320025D071500ull,
68 .endpoints = &single_endpoint,
69 .name_prefix = "rt715"
73 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
75 .adr = 0x000030025D071101ull,
77 .endpoints = &single_endpoint,
78 .name_prefix = "rt711"
82 static const struct snd_soc_acpi_adr_device rt711_sdca_2_adr[] = {
84 .adr = 0x000230025D071101ull,
86 .endpoints = &single_endpoint,
87 .name_prefix = "rt711"
91 static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {
93 .adr = 0x000131025D131601ull, /* unique ID is set for some reason */
95 .endpoints = &spk_l_endpoint,
96 .name_prefix = "rt1316-1"
100 static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
102 .adr = 0x000230025D131601ull,
104 .endpoints = &spk_r_endpoint,
105 .name_prefix = "rt1316-2"
109 static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
111 .adr = 0x000330025D131601ull,
113 .endpoints = &spk_r_endpoint,
114 .name_prefix = "rt1316-2"
118 static const struct snd_soc_acpi_adr_device rt1316_0_group2_adr[] = {
120 .adr = 0x000031025D131601ull,
122 .endpoints = &spk_l_endpoint,
123 .name_prefix = "rt1316-1"
127 static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = {
129 .adr = 0x000130025D131601ull,
131 .endpoints = &spk_r_endpoint,
132 .name_prefix = "rt1316-2"
136 static const struct snd_soc_acpi_adr_device rt1316_2_single_adr[] = {
138 .adr = 0x000230025D131601ull,
140 .endpoints = &single_endpoint,
141 .name_prefix = "rt1316-1"
145 static const struct snd_soc_acpi_adr_device rt1316_3_single_adr[] = {
147 .adr = 0x000330025D131601ull,
149 .endpoints = &single_endpoint,
150 .name_prefix = "rt1316-1"
154 static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {
156 .adr = 0x000030025D071401ull,
158 .endpoints = &single_endpoint,
159 .name_prefix = "rt714"
163 static const struct snd_soc_acpi_adr_device rt714_2_adr[] = {
165 .adr = 0x000230025D071401ull,
167 .endpoints = &single_endpoint,
168 .name_prefix = "rt714"
172 static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {
174 .adr = 0x000330025D071401ull,
176 .endpoints = &single_endpoint,
177 .name_prefix = "rt714"
181 static const struct snd_soc_acpi_link_adr adl_default[] = {
184 .num_adr = ARRAY_SIZE(rt711_0_adr),
185 .adr_d = rt711_0_adr,
189 .num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
190 .adr_d = rt1308_1_group1_adr,
194 .num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
195 .adr_d = rt1308_2_group1_adr,
199 .num_adr = ARRAY_SIZE(rt715_3_adr),
200 .adr_d = rt715_3_adr,
205 static const struct snd_soc_acpi_link_adr adl_sdca_default[] = {
208 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
209 .adr_d = rt711_sdca_0_adr,
213 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
214 .adr_d = rt1316_1_group1_adr,
218 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
219 .adr_d = rt1316_2_group1_adr,
223 .num_adr = ARRAY_SIZE(rt714_3_adr),
224 .adr_d = rt714_3_adr,
229 static const struct snd_soc_acpi_link_adr adl_sdca_3_in_1[] = {
232 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
233 .adr_d = rt711_sdca_0_adr,
237 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
238 .adr_d = rt1316_1_group1_adr,
242 .num_adr = ARRAY_SIZE(rt714_2_adr),
243 .adr_d = rt714_2_adr,
247 .num_adr = ARRAY_SIZE(rt1316_3_group1_adr),
248 .adr_d = rt1316_3_group1_adr,
253 static const struct snd_soc_acpi_link_adr adl_sdw_rt711_link2_rt1316_link01_rt714_link3[] = {
256 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
257 .adr_d = rt711_sdca_2_adr,
261 .num_adr = ARRAY_SIZE(rt1316_0_group2_adr),
262 .adr_d = rt1316_0_group2_adr,
266 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
267 .adr_d = rt1316_1_group2_adr,
271 .num_adr = ARRAY_SIZE(rt714_3_adr),
272 .adr_d = rt714_3_adr,
277 static const struct snd_soc_acpi_link_adr adl_sdw_rt711_link2_rt1316_link01[] = {
280 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
281 .adr_d = rt711_sdca_2_adr,
285 .num_adr = ARRAY_SIZE(rt1316_0_group2_adr),
286 .adr_d = rt1316_0_group2_adr,
290 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
291 .adr_d = rt1316_1_group2_adr,
296 static const struct snd_soc_acpi_link_adr adl_sdw_rt1316_link12_rt714_link0[] = {
299 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
300 .adr_d = rt1316_1_group1_adr,
304 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
305 .adr_d = rt1316_2_group1_adr,
309 .num_adr = ARRAY_SIZE(rt714_0_adr),
310 .adr_d = rt714_0_adr,
315 static const struct snd_soc_acpi_link_adr adl_sdw_rt1316_link2_rt714_link3[] = {
318 .num_adr = ARRAY_SIZE(rt1316_2_single_adr),
319 .adr_d = rt1316_2_single_adr,
323 .num_adr = ARRAY_SIZE(rt714_3_adr),
324 .adr_d = rt714_3_adr,
329 static const struct snd_soc_acpi_link_adr adl_sdw_rt1316_link2_rt714_link0[] = {
332 .num_adr = ARRAY_SIZE(rt1316_2_single_adr),
333 .adr_d = rt1316_2_single_adr,
337 .num_adr = ARRAY_SIZE(rt714_0_adr),
338 .adr_d = rt714_0_adr,
343 static const struct snd_soc_acpi_link_adr adl_sdw_rt711_link0_rt1316_link3[] = {
346 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
347 .adr_d = rt711_sdca_0_adr,
351 .num_adr = ARRAY_SIZE(rt1316_3_single_adr),
352 .adr_d = rt1316_3_single_adr,
357 static const struct snd_soc_acpi_link_adr adl_sdw_rt711_link0_rt1316_link2[] = {
360 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
361 .adr_d = rt711_sdca_0_adr,
365 .num_adr = ARRAY_SIZE(rt1316_2_single_adr),
366 .adr_d = rt1316_2_single_adr,
371 static const struct snd_soc_acpi_adr_device mx8373_2_adr[] = {
373 .adr = 0x000223019F837300ull,
375 .endpoints = &spk_l_endpoint,
376 .name_prefix = "Left"
379 .adr = 0x000227019F837300ull,
381 .endpoints = &spk_r_endpoint,
382 .name_prefix = "Right"
386 static const struct snd_soc_acpi_adr_device rt5682_0_adr[] = {
388 .adr = 0x000021025D568200ull,
390 .endpoints = &single_endpoint,
391 .name_prefix = "rt5682"
395 static const struct snd_soc_acpi_link_adr adl_rvp[] = {
398 .num_adr = ARRAY_SIZE(rt711_0_adr),
399 .adr_d = rt711_0_adr,
404 static const struct snd_soc_acpi_link_adr adlps_rvp[] = {
407 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
408 .adr_d = rt711_sdca_0_adr,
413 static const struct snd_soc_acpi_link_adr adl_chromebook_base[] = {
416 .num_adr = ARRAY_SIZE(rt5682_0_adr),
417 .adr_d = rt5682_0_adr,
421 .num_adr = ARRAY_SIZE(mx8373_2_adr),
422 .adr_d = mx8373_2_adr,
427 static const struct snd_soc_acpi_codecs adl_max98373_amp = {
429 .codecs = {"MX98373"}
432 static const struct snd_soc_acpi_codecs adl_max98357a_amp = {
434 .codecs = {"MX98357A"}
437 static const struct snd_soc_acpi_codecs adl_max98360a_amp = {
439 .codecs = {"MX98360A"}
442 static const struct snd_soc_acpi_codecs adl_rt5682_rt5682s_hp = {
444 .codecs = {"10EC5682", "RTL5682"},
447 static const struct snd_soc_acpi_codecs adl_rt1015p_amp = {
449 .codecs = {"RTL1015"}
452 static const struct snd_soc_acpi_codecs adl_rt1019p_amp = {
454 .codecs = {"RTL1019"}
457 static const struct snd_soc_acpi_codecs adl_max98390_amp = {
459 .codecs = {"MX98390"}
462 static const struct snd_soc_acpi_codecs adl_lt6911_hdmi = {
464 .codecs = {"INTC10B0"}
467 static const struct snd_soc_acpi_codecs adl_nau8318_amp = {
469 .codecs = {"NVTN2012"}
472 struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
474 .comp_ids = &adl_rt5682_rt5682s_hp,
475 .drv_name = "adl_mx98373_rt5682",
476 .machine_quirk = snd_soc_acpi_codec_list,
477 .quirk_data = &adl_max98373_amp,
478 .sof_tplg_filename = "sof-adl-max98373-rt5682.tplg",
481 .comp_ids = &adl_rt5682_rt5682s_hp,
482 .drv_name = "adl_mx98357_rt5682",
483 .machine_quirk = snd_soc_acpi_codec_list,
484 .quirk_data = &adl_max98357a_amp,
485 .sof_tplg_filename = "sof-adl-max98357a-rt5682.tplg",
488 .comp_ids = &adl_rt5682_rt5682s_hp,
489 .drv_name = "adl_mx98360_rt5682",
490 .machine_quirk = snd_soc_acpi_codec_list,
491 .quirk_data = &adl_max98360a_amp,
492 .sof_tplg_filename = "sof-adl-max98360a-rt5682.tplg",
496 .drv_name = "adl_rt1019p_8825",
497 .machine_quirk = snd_soc_acpi_codec_list,
498 .quirk_data = &adl_rt1019p_amp,
499 .sof_tplg_filename = "sof-adl-rt1019-nau8825.tplg",
503 .drv_name = "adl_max98373_8825",
504 .machine_quirk = snd_soc_acpi_codec_list,
505 .quirk_data = &adl_max98373_amp,
506 .sof_tplg_filename = "sof-adl-max98373-nau8825.tplg",
510 .drv_name = "adl_mx98360a_8825",
511 .machine_quirk = snd_soc_acpi_codec_list,
512 .quirk_data = &adl_max98360a_amp,
513 .sof_tplg_filename = "sof-adl-max98360a-nau8825.tplg",
516 .comp_ids = &adl_rt5682_rt5682s_hp,
517 .drv_name = "adl_rt1019_rt5682",
518 .machine_quirk = snd_soc_acpi_codec_list,
519 .quirk_data = &adl_rt1019p_amp,
520 .sof_tplg_filename = "sof-adl-rt1019-rt5682.tplg",
524 .drv_name = "adl_rt1015p_8825",
525 .machine_quirk = snd_soc_acpi_codec_list,
526 .quirk_data = &adl_rt1015p_amp,
527 .sof_tplg_filename = "sof-adl-rt1015-nau8825.tplg",
531 .drv_name = "adl_nau8318_8825",
532 .machine_quirk = snd_soc_acpi_codec_list,
533 .quirk_data = &adl_nau8318_amp,
534 .sof_tplg_filename = "sof-adl-nau8318-nau8825.tplg",
538 .drv_name = "sof_nau8825",
539 .sof_tplg_filename = "sof-adl-nau8825.tplg",
542 .comp_ids = &adl_rt5682_rt5682s_hp,
543 .drv_name = "adl_max98390_rt5682",
544 .machine_quirk = snd_soc_acpi_codec_list,
545 .quirk_data = &adl_max98390_amp,
546 .sof_tplg_filename = "sof-adl-max98390-rt5682.tplg",
549 .comp_ids = &adl_rt5682_rt5682s_hp,
550 .drv_name = "adl_rt5682",
551 .sof_tplg_filename = "sof-adl-rt5682.tplg",
555 .drv_name = "adl_mx98360a_cs4242",
556 .machine_quirk = snd_soc_acpi_codec_list,
557 .quirk_data = &adl_max98360a_amp,
558 .sof_tplg_filename = "sof-adl-max98360a-cs42l42.tplg",
560 /* place amp-only boards in the end of table */
563 .drv_name = "adl_cs35l41",
564 .sof_tplg_filename = "sof-adl-cs35l41.tplg",
567 .comp_ids = &essx_83x6,
568 .drv_name = "adl_es83x6_c1_h02",
569 .machine_quirk = snd_soc_acpi_codec_list,
570 .quirk_data = &adl_lt6911_hdmi,
571 .sof_tplg_filename = "sof-adl-es83x6-ssp1-hdmi-ssp02.tplg",
574 .comp_ids = &essx_83x6,
575 .drv_name = "sof-essx8336",
576 .sof_tplg_filename = "sof-adl-es8336", /* the tplg suffix is added at run time */
577 .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
578 SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
579 SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
583 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machines);
585 /* this table is used when there is no I2S codec present */
586 struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_sdw_machines[] = {
588 .link_mask = 0xF, /* 4 active links required */
589 .links = adl_default,
590 .drv_name = "sof_sdw",
591 .sof_tplg_filename = "sof-adl-rt711-l0-rt1308-l12-rt715-l3.tplg",
594 .link_mask = 0xF, /* 4 active links required */
595 .links = adl_sdca_default,
596 .drv_name = "sof_sdw",
597 .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l12-rt714-l3.tplg",
600 .link_mask = 0xF, /* 4 active links required */
601 .links = adl_sdca_3_in_1,
602 .drv_name = "sof_sdw",
603 .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l13-rt714-l2.tplg",
606 .link_mask = 0xF, /* 4 active links required */
607 .links = adl_sdw_rt711_link2_rt1316_link01_rt714_link3,
608 .drv_name = "sof_sdw",
609 .sof_tplg_filename = "sof-adl-rt711-l2-rt1316-l01-rt714-l3.tplg",
612 .link_mask = 0x7, /* rt1316 on link0 and link1 & rt711 on link2*/
613 .links = adl_sdw_rt711_link2_rt1316_link01,
614 .drv_name = "sof_sdw",
615 .sof_tplg_filename = "sof-adl-rt711-l2-rt1316-l01.tplg",
618 .link_mask = 0xC, /* rt1316 on link2 & rt714 on link3 */
619 .links = adl_sdw_rt1316_link2_rt714_link3,
620 .drv_name = "sof_sdw",
621 .sof_tplg_filename = "sof-adl-rt1316-l2-mono-rt714-l3.tplg",
624 .link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */
625 .links = adl_sdw_rt1316_link12_rt714_link0,
626 .drv_name = "sof_sdw",
627 .sof_tplg_filename = "sof-adl-rt1316-l12-rt714-l0.tplg",
630 .link_mask = 0x5, /* 2 active links required */
631 .links = adl_sdw_rt1316_link2_rt714_link0,
632 .drv_name = "sof_sdw",
633 .sof_tplg_filename = "sof-adl-rt1316-l2-mono-rt714-l0.tplg",
636 .link_mask = 0x9, /* 2 active links required */
637 .links = adl_sdw_rt711_link0_rt1316_link3,
638 .drv_name = "sof_sdw",
639 .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l3.tplg",
642 .link_mask = 0x5, /* 2 active links required */
643 .links = adl_sdw_rt711_link0_rt1316_link2,
644 .drv_name = "sof_sdw",
645 .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l2.tplg",
648 .link_mask = 0x1, /* link0 required */
650 .drv_name = "sof_sdw",
651 .sof_tplg_filename = "sof-adl-rt711.tplg",
654 .link_mask = 0x1, /* link0 required */
656 .drv_name = "sof_sdw",
657 .sof_tplg_filename = "sof-adl-rt711.tplg",
660 .link_mask = 0x5, /* rt5682 on link0 & 2xmax98373 on link 2 */
661 .links = adl_chromebook_base,
662 .drv_name = "sof_sdw",
663 .sof_tplg_filename = "sof-adl-sdw-max98373-rt5682.tplg",
667 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_sdw_machines);