1 // SPDX-License-Identifier: GPL-2.0-only
3 * soc-acpi-intel-tgl-match.c - tables and support for TGL ACPI enumeration.
5 * Copyright (c) 2019, Intel Corporation.
9 #include <sound/soc-acpi.h>
10 #include <sound/soc-acpi-intel-match.h>
11 #include "soc-acpi-intel-sdw-mockup-match.h"
13 static const struct snd_soc_acpi_codecs essx_83x6 = {
15 .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
18 static const struct snd_soc_acpi_codecs tgl_codecs = {
20 .codecs = {"MX98357A"}
23 static const struct snd_soc_acpi_endpoint single_endpoint = {
30 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
37 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
44 static const struct snd_soc_acpi_endpoint rt712_endpoints[] = {
59 static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
61 .adr = 0x000020025D071100ull,
63 .endpoints = &single_endpoint,
64 .name_prefix = "rt711"
68 static const struct snd_soc_acpi_adr_device rt711_1_adr[] = {
70 .adr = 0x000120025D071100ull,
72 .endpoints = &single_endpoint,
73 .name_prefix = "rt711"
77 static const struct snd_soc_acpi_adr_device rt1308_1_dual_adr[] = {
79 .adr = 0x000120025D130800ull,
81 .endpoints = &spk_l_endpoint,
82 .name_prefix = "rt1308-1"
85 .adr = 0x000122025D130800ull,
87 .endpoints = &spk_r_endpoint,
88 .name_prefix = "rt1308-2"
92 static const struct snd_soc_acpi_adr_device rt1308_1_single_adr[] = {
94 .adr = 0x000120025D130800ull,
96 .endpoints = &single_endpoint,
97 .name_prefix = "rt1308-1"
101 static const struct snd_soc_acpi_adr_device rt1308_2_single_adr[] = {
103 .adr = 0x000220025D130800ull,
105 .endpoints = &single_endpoint,
106 .name_prefix = "rt1308-1"
110 static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
112 .adr = 0x000120025D130800ull,
114 .endpoints = &spk_l_endpoint,
115 .name_prefix = "rt1308-1"
119 static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
121 .adr = 0x000220025D130800ull,
123 .endpoints = &spk_r_endpoint,
124 .name_prefix = "rt1308-2"
128 static const struct snd_soc_acpi_adr_device rt715_0_adr[] = {
130 .adr = 0x000021025D071500ull,
132 .endpoints = &single_endpoint,
133 .name_prefix = "rt715"
137 static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
139 .adr = 0x000320025D071500ull,
141 .endpoints = &single_endpoint,
142 .name_prefix = "rt715"
146 static const struct snd_soc_acpi_adr_device mx8373_1_adr[] = {
148 .adr = 0x000123019F837300ull,
150 .endpoints = &spk_r_endpoint,
151 .name_prefix = "Right"
154 .adr = 0x000127019F837300ull,
156 .endpoints = &spk_l_endpoint,
157 .name_prefix = "Left"
161 static const struct snd_soc_acpi_adr_device rt5682_0_adr[] = {
163 .adr = 0x000021025D568200ull,
165 .endpoints = &single_endpoint,
166 .name_prefix = "rt5682"
170 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
172 .adr = 0x000030025D071101ull,
174 .endpoints = &single_endpoint,
175 .name_prefix = "rt711"
179 static const struct snd_soc_acpi_adr_device rt1316_1_single_adr[] = {
181 .adr = 0x000131025D131601ull,
183 .endpoints = &single_endpoint,
184 .name_prefix = "rt1316-1"
188 static const struct snd_soc_acpi_adr_device rt712_0_single_adr[] = {
190 .adr = 0x000030025D071201ull,
191 .num_endpoints = ARRAY_SIZE(rt712_endpoints),
192 .endpoints = rt712_endpoints,
193 .name_prefix = "rt712"
197 static const struct snd_soc_acpi_adr_device rt1712_1_single_adr[] = {
199 .adr = 0x000130025D171201ull,
201 .endpoints = &single_endpoint,
202 .name_prefix = "rt712-dmic"
206 static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {
208 .adr = 0x000131025D131601ull, /* unique ID is set for some reason */
210 .endpoints = &spk_l_endpoint,
211 .name_prefix = "rt1316-1"
215 static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
217 .adr = 0x000230025D131601ull,
219 .endpoints = &spk_r_endpoint,
220 .name_prefix = "rt1316-2"
224 static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {
226 .adr = 0x000330025D071401ull,
228 .endpoints = &single_endpoint,
229 .name_prefix = "rt714"
233 static const struct snd_soc_acpi_link_adr tgl_rvp[] = {
236 .num_adr = ARRAY_SIZE(rt711_0_adr),
237 .adr_d = rt711_0_adr,
241 .num_adr = ARRAY_SIZE(rt1308_1_dual_adr),
242 .adr_d = rt1308_1_dual_adr,
247 static const struct snd_soc_acpi_link_adr tgl_rvp_headset_only[] = {
250 .num_adr = ARRAY_SIZE(rt711_0_adr),
251 .adr_d = rt711_0_adr,
256 static const struct snd_soc_acpi_link_adr tgl_hp[] = {
259 .num_adr = ARRAY_SIZE(rt711_0_adr),
260 .adr_d = rt711_0_adr,
264 .num_adr = ARRAY_SIZE(rt1308_1_single_adr),
265 .adr_d = rt1308_1_single_adr,
270 static const struct snd_soc_acpi_link_adr tgl_chromebook_base[] = {
273 .num_adr = ARRAY_SIZE(rt5682_0_adr),
274 .adr_d = rt5682_0_adr,
278 .num_adr = ARRAY_SIZE(mx8373_1_adr),
279 .adr_d = mx8373_1_adr,
284 static const struct snd_soc_acpi_link_adr tgl_3_in_1_default[] = {
287 .num_adr = ARRAY_SIZE(rt711_0_adr),
288 .adr_d = rt711_0_adr,
292 .num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
293 .adr_d = rt1308_1_group1_adr,
297 .num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
298 .adr_d = rt1308_2_group1_adr,
302 .num_adr = ARRAY_SIZE(rt715_3_adr),
303 .adr_d = rt715_3_adr,
308 static const struct snd_soc_acpi_link_adr tgl_3_in_1_mono_amp[] = {
311 .num_adr = ARRAY_SIZE(rt711_0_adr),
312 .adr_d = rt711_0_adr,
316 .num_adr = ARRAY_SIZE(rt1308_1_single_adr),
317 .adr_d = rt1308_1_single_adr,
321 .num_adr = ARRAY_SIZE(rt715_3_adr),
322 .adr_d = rt715_3_adr,
327 static const struct snd_soc_acpi_link_adr tgl_sdw_rt711_link1_rt1308_link2_rt715_link0[] = {
330 .num_adr = ARRAY_SIZE(rt711_1_adr),
331 .adr_d = rt711_1_adr,
335 .num_adr = ARRAY_SIZE(rt1308_2_single_adr),
336 .adr_d = rt1308_2_single_adr,
340 .num_adr = ARRAY_SIZE(rt715_0_adr),
341 .adr_d = rt715_0_adr,
346 static const struct snd_soc_acpi_link_adr tgl_3_in_1_sdca[] = {
349 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
350 .adr_d = rt711_sdca_0_adr,
354 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
355 .adr_d = rt1316_1_group1_adr,
359 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
360 .adr_d = rt1316_2_group1_adr,
364 .num_adr = ARRAY_SIZE(rt714_3_adr),
365 .adr_d = rt714_3_adr,
370 static const struct snd_soc_acpi_link_adr tgl_3_in_1_sdca_mono[] = {
373 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
374 .adr_d = rt711_sdca_0_adr,
378 .num_adr = ARRAY_SIZE(rt1316_1_single_adr),
379 .adr_d = rt1316_1_single_adr,
383 .num_adr = ARRAY_SIZE(rt714_3_adr),
384 .adr_d = rt714_3_adr,
389 static const struct snd_soc_acpi_link_adr tgl_712_only[] = {
392 .num_adr = ARRAY_SIZE(rt712_0_single_adr),
393 .adr_d = rt712_0_single_adr,
397 .num_adr = ARRAY_SIZE(rt1712_1_single_adr),
398 .adr_d = rt1712_1_single_adr,
403 static const struct snd_soc_acpi_codecs tgl_max98373_amp = {
405 .codecs = {"MX98373"}
408 static const struct snd_soc_acpi_codecs tgl_rt1011_amp = {
410 .codecs = {"10EC1011"}
413 static const struct snd_soc_acpi_codecs tgl_rt5682_rt5682s_hp = {
415 .codecs = {"10EC5682", "RTL5682"},
418 static const struct snd_soc_acpi_codecs tgl_lt6911_hdmi = {
420 .codecs = {"INTC10B0"}
423 struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_machines[] = {
425 .comp_ids = &tgl_rt5682_rt5682s_hp,
426 .drv_name = "tgl_mx98357_rt5682",
427 .machine_quirk = snd_soc_acpi_codec_list,
428 .quirk_data = &tgl_codecs,
429 .sof_tplg_filename = "sof-tgl-max98357a-rt5682.tplg",
432 .comp_ids = &tgl_rt5682_rt5682s_hp,
433 .drv_name = "tgl_mx98373_rt5682",
434 .machine_quirk = snd_soc_acpi_codec_list,
435 .quirk_data = &tgl_max98373_amp,
436 .sof_tplg_filename = "sof-tgl-max98373-rt5682.tplg",
439 .comp_ids = &tgl_rt5682_rt5682s_hp,
440 .drv_name = "tgl_rt1011_rt5682",
441 .machine_quirk = snd_soc_acpi_codec_list,
442 .quirk_data = &tgl_rt1011_amp,
443 .sof_tplg_filename = "sof-tgl-rt1011-rt5682.tplg",
446 .comp_ids = &essx_83x6,
447 .drv_name = "sof-essx8336",
448 .sof_tplg_filename = "sof-tgl-es8336", /* the tplg suffix is added at run time */
449 .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
450 SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
451 SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
455 .drv_name = "tgl_rt1308_hdmi_ssp",
456 .machine_quirk = snd_soc_acpi_codec_list,
457 .quirk_data = &tgl_lt6911_hdmi,
458 .sof_tplg_filename = "sof-tgl-rt1308-ssp2-hdmi-ssp15.tplg"
462 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_tgl_machines);
464 /* this table is used when there is no I2S codec present */
465 struct snd_soc_acpi_mach snd_soc_acpi_intel_tgl_sdw_machines[] = {
466 /* mockup tests need to be first */
468 .link_mask = GENMASK(3, 0),
469 .links = sdw_mockup_headset_2amps_mic,
470 .drv_name = "sof_sdw",
471 .sof_tplg_filename = "sof-tgl-rt711-rt1308-rt715.tplg",
474 .link_mask = BIT(0) | BIT(1) | BIT(3),
475 .links = sdw_mockup_headset_1amp_mic,
476 .drv_name = "sof_sdw",
477 .sof_tplg_filename = "sof-tgl-rt711-rt1308-mono-rt715.tplg",
480 .link_mask = BIT(0) | BIT(1) | BIT(2),
481 .links = sdw_mockup_mic_headset_1amp,
482 .drv_name = "sof_sdw",
483 .sof_tplg_filename = "sof-tgl-rt715-rt711-rt1308-mono.tplg",
486 .link_mask = 0xF, /* 4 active links required */
487 .links = tgl_712_only,
488 .drv_name = "sof_sdw",
489 .sof_tplg_filename = "sof-tgl-rt712.tplg",
493 .links = tgl_sdw_rt711_link1_rt1308_link2_rt715_link0,
494 .drv_name = "sof_sdw",
495 .sof_tplg_filename = "sof-tgl-rt715-rt711-rt1308-mono.tplg",
498 .link_mask = 0xF, /* 4 active links required */
499 .links = tgl_3_in_1_default,
500 .drv_name = "sof_sdw",
501 .sof_tplg_filename = "sof-tgl-rt711-rt1308-rt715.tplg",
505 * link_mask should be 0xB, but all links are enabled by BIOS.
506 * This entry will be selected if there is no rt1308 exposed
507 * on link2 since it will fail to match the above entry.
510 .links = tgl_3_in_1_mono_amp,
511 .drv_name = "sof_sdw",
512 .sof_tplg_filename = "sof-tgl-rt711-rt1308-mono-rt715.tplg",
515 .link_mask = 0xF, /* 4 active links required */
516 .links = tgl_3_in_1_sdca,
517 .drv_name = "sof_sdw",
518 .sof_tplg_filename = "sof-tgl-rt711-rt1316-rt714.tplg",
522 * link_mask should be 0xB, but all links are enabled by BIOS.
523 * This entry will be selected if there is no rt1316 amplifier exposed
524 * on link2 since it will fail to match the above entry.
527 .link_mask = 0xF, /* 4 active links required */
528 .links = tgl_3_in_1_sdca_mono,
529 .drv_name = "sof_sdw",
530 .sof_tplg_filename = "sof-tgl-rt711-l0-rt1316-l1-mono-rt714-l3.tplg",
534 .link_mask = 0x3, /* rt711 on link 0 and 1 rt1308 on link 1 */
536 .drv_name = "sof_sdw",
537 .sof_tplg_filename = "sof-tgl-rt711-rt1308.tplg",
540 .link_mask = 0x3, /* rt711 on link 0 and 2 rt1308s on link 1 */
542 .drv_name = "sof_sdw",
543 .sof_tplg_filename = "sof-tgl-rt711-rt1308.tplg",
546 .link_mask = 0x3, /* rt5682 on link0 & 2xmax98373 on link 1 */
547 .links = tgl_chromebook_base,
548 .drv_name = "sof_sdw",
549 .sof_tplg_filename = "sof-tgl-sdw-max98373-rt5682.tplg",
552 .link_mask = 0x1, /* rt711 on link 0 */
553 .links = tgl_rvp_headset_only,
554 .drv_name = "sof_sdw",
555 .sof_tplg_filename = "sof-tgl-rt711.tplg",
559 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_tgl_sdw_machines);