1 // SPDX-License-Identifier: GPL-2.0-only
3 * soc-acpi-intel-mtl-match.c - tables and support for MTL ACPI enumeration.
5 * Copyright (c) 2022, 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 mtl_max98357a_amp = {
15 .codecs = {"MX98357A"}
18 static const struct snd_soc_acpi_codecs mtl_max98360a_amp = {
20 .codecs = {"MX98360A"}
23 static const struct snd_soc_acpi_codecs mtl_rt1019p_amp = {
28 static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = {
30 .codecs = {"10EC5682", "RTL5682"},
33 static const struct snd_soc_acpi_codecs mtl_essx_83x6 = {
35 .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
38 static const struct snd_soc_acpi_codecs mtl_lt6911_hdmi = {
40 .codecs = {"INTC10B0"}
43 struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {
45 .comp_ids = &mtl_rt5682_rt5682s_hp,
46 .drv_name = "mtl_mx98357_rt5682",
47 .machine_quirk = snd_soc_acpi_codec_list,
48 .quirk_data = &mtl_max98357a_amp,
49 .sof_tplg_filename = "sof-mtl-max98357a-rt5682.tplg",
52 .comp_ids = &mtl_rt5682_rt5682s_hp,
53 .drv_name = "mtl_mx98360_rt5682",
54 .machine_quirk = snd_soc_acpi_codec_list,
55 .quirk_data = &mtl_max98360a_amp,
56 .sof_tplg_filename = "sof-mtl-max98360a-rt5682.tplg",
59 .comp_ids = &mtl_rt5682_rt5682s_hp,
60 .drv_name = "mtl_rt1019_rt5682",
61 .machine_quirk = snd_soc_acpi_codec_list,
62 .quirk_data = &mtl_rt1019p_amp,
63 .sof_tplg_filename = "sof-mtl-rt1019-rt5682.tplg",
66 .comp_ids = &mtl_essx_83x6,
67 .drv_name = "mtl_es83x6_c1_h02",
68 .machine_quirk = snd_soc_acpi_codec_list,
69 .quirk_data = &mtl_lt6911_hdmi,
70 .sof_tplg_filename = "sof-mtl-es83x6-ssp1-hdmi-ssp02.tplg",
73 .comp_ids = &mtl_essx_83x6,
74 .drv_name = "sof-essx8336",
75 .sof_tplg_filename = "sof-mtl-es8336", /* the tplg suffix is added at run time */
76 .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
77 SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
78 SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
80 /* place amp-only boards in the end of table */
83 .drv_name = "mtl_lt6911_hdmi_ssp",
84 .sof_tplg_filename = "sof-mtl-hdmi-ssp02.tplg",
88 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines);
90 static const struct snd_soc_acpi_endpoint single_endpoint = {
97 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
104 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
111 static const struct snd_soc_acpi_endpoint rt712_endpoints[] = {
126 static const struct snd_soc_acpi_endpoint spk_2_endpoint = {
133 static const struct snd_soc_acpi_endpoint spk_3_endpoint = {
140 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
142 .adr = 0x000030025D071101ull,
144 .endpoints = &single_endpoint,
145 .name_prefix = "rt711"
149 static const struct snd_soc_acpi_adr_device rt712_0_single_adr[] = {
151 .adr = 0x000030025D071201ull,
152 .num_endpoints = ARRAY_SIZE(rt712_endpoints),
153 .endpoints = rt712_endpoints,
154 .name_prefix = "rt712"
158 static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = {
160 .adr = 0x000330025D171201ull,
162 .endpoints = &single_endpoint,
163 .name_prefix = "rt712-dmic"
167 static const struct snd_soc_acpi_adr_device rt713_0_single_adr[] = {
169 .adr = 0x000031025D071301ull,
171 .endpoints = &single_endpoint,
172 .name_prefix = "rt713"
176 static const struct snd_soc_acpi_adr_device rt1713_3_single_adr[] = {
178 .adr = 0x000331025D171301ull,
180 .endpoints = &single_endpoint,
181 .name_prefix = "rt713-dmic"
185 static const struct snd_soc_acpi_adr_device mx8373_0_adr[] = {
187 .adr = 0x000023019F837300ull,
189 .endpoints = &spk_l_endpoint,
190 .name_prefix = "Left"
193 .adr = 0x000027019F837300ull,
195 .endpoints = &spk_r_endpoint,
196 .name_prefix = "Right"
200 static const struct snd_soc_acpi_adr_device rt5682_2_adr[] = {
202 .adr = 0x000221025D568200ull,
204 .endpoints = &single_endpoint,
205 .name_prefix = "rt5682"
209 static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
211 .adr = 0x000230025D131601ull,
213 .endpoints = &spk_l_endpoint,
214 .name_prefix = "rt1316-1"
218 static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
220 .adr = 0x000331025D131601ull,
222 .endpoints = &spk_r_endpoint,
223 .name_prefix = "rt1316-2"
227 static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = {
229 .adr = 0x000131025D131601ull,
231 .endpoints = &spk_l_endpoint,
232 .name_prefix = "rt1316-1"
236 static const struct snd_soc_acpi_adr_device rt1316_2_group2_adr[] = {
238 .adr = 0x000230025D131601ull,
240 .endpoints = &spk_r_endpoint,
241 .name_prefix = "rt1316-2"
245 static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {
247 .adr = 0x000130025D131801ull,
249 .endpoints = &spk_l_endpoint,
250 .name_prefix = "rt1318-1"
254 static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {
256 .adr = 0x000232025D131801ull,
258 .endpoints = &spk_r_endpoint,
259 .name_prefix = "rt1318-2"
263 static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {
265 .adr = 0x000030025D071401ull,
267 .endpoints = &single_endpoint,
268 .name_prefix = "rt714"
272 static const struct snd_soc_acpi_adr_device rt714_1_adr[] = {
274 .adr = 0x000130025D071401ull,
276 .endpoints = &single_endpoint,
277 .name_prefix = "rt714"
281 static const struct snd_soc_acpi_link_adr mtl_712_only[] = {
284 .num_adr = ARRAY_SIZE(rt712_0_single_adr),
285 .adr_d = rt712_0_single_adr,
289 .num_adr = ARRAY_SIZE(rt1712_3_single_adr),
290 .adr_d = rt1712_3_single_adr,
295 static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {
297 .adr = 0x00003001FA424301ull,
299 .endpoints = &single_endpoint,
300 .name_prefix = "cs42l43"
304 static const struct snd_soc_acpi_adr_device cs35l56_1_adr[] = {
306 .adr = 0x00013701FA355601ull,
308 .endpoints = &spk_r_endpoint,
309 .name_prefix = "AMP8"
312 .adr = 0x00013601FA355601ull,
314 .endpoints = &spk_3_endpoint,
315 .name_prefix = "AMP7"
319 static const struct snd_soc_acpi_adr_device cs35l56_2_adr[] = {
321 .adr = 0x00023301FA355601ull,
323 .endpoints = &spk_l_endpoint,
324 .name_prefix = "AMP1"
327 .adr = 0x00023201FA355601ull,
329 .endpoints = &spk_2_endpoint,
330 .name_prefix = "AMP2"
334 static const struct snd_soc_acpi_link_adr rt5682_link2_max98373_link0[] = {
335 /* Expected order: jack -> amp */
338 .num_adr = ARRAY_SIZE(rt5682_2_adr),
339 .adr_d = rt5682_2_adr,
343 .num_adr = ARRAY_SIZE(mx8373_0_adr),
344 .adr_d = mx8373_0_adr,
349 static const struct snd_soc_acpi_link_adr mtl_rvp[] = {
352 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
353 .adr_d = rt711_sdca_0_adr,
358 static const struct snd_soc_acpi_link_adr mtl_3_in_1_sdca[] = {
361 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
362 .adr_d = rt711_sdca_0_adr,
366 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
367 .adr_d = rt1316_2_group1_adr,
371 .num_adr = ARRAY_SIZE(rt1316_3_group1_adr),
372 .adr_d = rt1316_3_group1_adr,
376 .num_adr = ARRAY_SIZE(rt714_1_adr),
377 .adr_d = rt714_1_adr,
382 static const struct snd_soc_acpi_link_adr mtl_sdw_rt1318_l12_rt714_l0[] = {
385 .num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
386 .adr_d = rt1318_1_group1_adr,
390 .num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
391 .adr_d = rt1318_2_group1_adr,
395 .num_adr = ARRAY_SIZE(rt714_0_adr),
396 .adr_d = rt714_0_adr,
401 static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12_rt1713_l3[] = {
404 .num_adr = ARRAY_SIZE(rt713_0_single_adr),
405 .adr_d = rt713_0_single_adr,
409 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
410 .adr_d = rt1316_1_group2_adr,
414 .num_adr = ARRAY_SIZE(rt1316_2_group2_adr),
415 .adr_d = rt1316_2_group2_adr,
419 .num_adr = ARRAY_SIZE(rt1713_3_single_adr),
420 .adr_d = rt1713_3_single_adr,
425 static const struct snd_soc_acpi_adr_device mx8363_2_adr[] = {
427 .adr = 0x000230019F836300ull,
429 .endpoints = &spk_l_endpoint,
430 .name_prefix = "Left"
433 .adr = 0x000231019F836300ull,
435 .endpoints = &spk_r_endpoint,
436 .name_prefix = "Right"
440 static const struct snd_soc_acpi_adr_device cs42l42_0_adr[] = {
442 .adr = 0x00001001FA424200ull,
444 .endpoints = &single_endpoint,
445 .name_prefix = "cs42l42"
449 static const struct snd_soc_acpi_link_adr cs42l42_link0_max98363_link2[] = {
450 /* Expected order: jack -> amp */
453 .num_adr = ARRAY_SIZE(cs42l42_0_adr),
454 .adr_d = cs42l42_0_adr,
458 .num_adr = ARRAY_SIZE(mx8363_2_adr),
459 .adr_d = mx8363_2_adr,
464 static const struct snd_soc_acpi_link_adr mtl_cs42l43_cs35l56[] = {
467 .num_adr = ARRAY_SIZE(cs42l43_0_adr),
468 .adr_d = cs42l43_0_adr,
472 .num_adr = ARRAY_SIZE(cs35l56_1_adr),
473 .adr_d = cs35l56_1_adr,
477 .num_adr = ARRAY_SIZE(cs35l56_2_adr),
478 .adr_d = cs35l56_2_adr,
483 /* this table is used when there is no I2S codec present */
484 struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = {
485 /* mockup tests need to be first */
487 .link_mask = GENMASK(3, 0),
488 .links = sdw_mockup_headset_2amps_mic,
489 .drv_name = "sof_sdw",
490 .sof_tplg_filename = "sof-mtl-rt711-rt1308-rt715.tplg",
493 .link_mask = BIT(0) | BIT(1) | BIT(3),
494 .links = sdw_mockup_headset_1amp_mic,
495 .drv_name = "sof_sdw",
496 .sof_tplg_filename = "sof-mtl-rt711-rt1308-mono-rt715.tplg",
499 .link_mask = GENMASK(2, 0),
500 .links = sdw_mockup_mic_headset_1amp,
501 .drv_name = "sof_sdw",
502 .sof_tplg_filename = "sof-mtl-rt715-rt711-rt1308-mono.tplg",
505 .link_mask = GENMASK(3, 0),
506 .links = mtl_rt713_l0_rt1316_l12_rt1713_l3,
507 .drv_name = "sof_sdw",
508 .sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12-rt1713-l3.tplg",
511 .link_mask = BIT(3) | BIT(0),
512 .links = mtl_712_only,
513 .drv_name = "sof_sdw",
514 .sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg",
517 .link_mask = GENMASK(2, 0),
518 .links = mtl_sdw_rt1318_l12_rt714_l0,
519 .drv_name = "sof_sdw",
520 .sof_tplg_filename = "sof-mtl-rt1318-l12-rt714-l0.tplg"
523 .link_mask = GENMASK(2, 0),
524 .links = mtl_cs42l43_cs35l56,
525 .drv_name = "sof_sdw",
526 .sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l12.tplg",
529 .link_mask = GENMASK(3, 0),
530 .links = mtl_3_in_1_sdca,
531 .drv_name = "sof_sdw",
532 .sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg",
537 .drv_name = "sof_sdw",
538 .sof_tplg_filename = "sof-mtl-rt711.tplg",
541 .link_mask = BIT(0) | BIT(2),
542 .links = rt5682_link2_max98373_link0,
543 .drv_name = "sof_sdw",
544 .sof_tplg_filename = "sof-mtl-sdw-rt5682-l2-max98373-l0.tplg",
547 .link_mask = BIT(0) | BIT(2),
548 .links = cs42l42_link0_max98363_link2,
549 .drv_name = "sof_sdw",
550 .sof_tplg_filename = "sof-mtl-sdw-cs42l42-l0-max98363-l2.tplg",
554 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines);