1 // SPDX-License-Identifier: GPL-2.0-only
3 * soc-apci-intel-rpl-match.c - tables and support for RPL ACPI enumeration.
5 * Copyright (c) 2022 Intel Corporation.
8 #include <sound/soc-acpi.h>
9 #include <sound/soc-acpi-intel-match.h>
11 static const struct snd_soc_acpi_endpoint single_endpoint = {
18 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
25 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
32 static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
34 .adr = 0x000020025D071100ull,
36 .endpoints = &single_endpoint,
37 .name_prefix = "rt711"
41 static const struct snd_soc_acpi_link_adr rpl_rvp[] = {
44 .num_adr = ARRAY_SIZE(rt711_0_adr),
50 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
52 .adr = 0x000030025D071101ull,
54 .endpoints = &single_endpoint,
55 .name_prefix = "rt711"
59 static const struct snd_soc_acpi_adr_device rt711_sdca_2_adr[] = {
61 .adr = 0x000230025D071101ull,
63 .endpoints = &single_endpoint,
64 .name_prefix = "rt711"
68 static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {
70 .adr = 0x000131025D131601ull, /* unique ID is set for some reason */
72 .endpoints = &spk_l_endpoint,
73 .name_prefix = "rt1316-1"
77 static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
79 .adr = 0x000230025D131601ull,
81 .endpoints = &spk_r_endpoint,
82 .name_prefix = "rt1316-2"
86 static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
88 .adr = 0x000330025D131601ull,
90 .endpoints = &spk_r_endpoint,
91 .name_prefix = "rt1316-2"
95 static const struct snd_soc_acpi_adr_device rt1316_0_group2_adr[] = {
97 .adr = 0x000030025D131601ull,
99 .endpoints = &spk_l_endpoint,
100 .name_prefix = "rt1316-1"
104 static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = {
106 .adr = 0x000131025D131601ull,
108 .endpoints = &spk_r_endpoint,
109 .name_prefix = "rt1316-2"
113 static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {
115 .adr = 0x000132025D131801ull,
117 .endpoints = &spk_l_endpoint,
118 .name_prefix = "rt1318-1"
122 static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {
124 .adr = 0x000230025D131801ull,
126 .endpoints = &spk_r_endpoint,
127 .name_prefix = "rt1318-2"
131 static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {
133 .adr = 0x000030025D071401ull,
135 .endpoints = &single_endpoint,
136 .name_prefix = "rt714"
140 static const struct snd_soc_acpi_adr_device rt714_2_adr[] = {
142 .adr = 0x000230025D071401ull,
144 .endpoints = &single_endpoint,
145 .name_prefix = "rt714"
149 static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {
151 .adr = 0x000330025D071401ull,
153 .endpoints = &single_endpoint,
154 .name_prefix = "rt714"
158 static const struct snd_soc_acpi_link_adr rpl_sdca_3_in_1[] = {
161 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
162 .adr_d = rt711_sdca_0_adr,
166 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
167 .adr_d = rt1316_1_group1_adr,
171 .num_adr = ARRAY_SIZE(rt714_2_adr),
172 .adr_d = rt714_2_adr,
176 .num_adr = ARRAY_SIZE(rt1316_3_group1_adr),
177 .adr_d = rt1316_3_group1_adr,
182 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1316_link12_rt714_link3[] = {
185 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
186 .adr_d = rt711_sdca_0_adr,
190 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
191 .adr_d = rt1316_1_group1_adr,
195 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
196 .adr_d = rt1316_2_group1_adr,
200 .num_adr = ARRAY_SIZE(rt714_3_adr),
201 .adr_d = rt714_3_adr,
206 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01_rt714_link3[] = {
209 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
210 .adr_d = rt711_sdca_2_adr,
214 .num_adr = ARRAY_SIZE(rt1316_0_group2_adr),
215 .adr_d = rt1316_0_group2_adr,
219 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
220 .adr_d = rt1316_1_group2_adr,
224 .num_adr = ARRAY_SIZE(rt714_3_adr),
225 .adr_d = rt714_3_adr,
230 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01[] = {
233 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
234 .adr_d = rt711_sdca_2_adr,
238 .num_adr = ARRAY_SIZE(rt1316_0_group2_adr),
239 .adr_d = rt1316_0_group2_adr,
243 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
244 .adr_d = rt1316_1_group2_adr,
249 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1316_link12[] = {
252 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
253 .adr_d = rt711_sdca_0_adr,
257 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
258 .adr_d = rt1316_1_group1_adr,
262 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
263 .adr_d = rt1316_2_group1_adr,
268 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12_rt714_link3[] = {
271 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
272 .adr_d = rt711_sdca_0_adr,
276 .num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
277 .adr_d = rt1318_1_group1_adr,
281 .num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
282 .adr_d = rt1318_2_group1_adr,
286 .num_adr = ARRAY_SIZE(rt714_3_adr),
287 .adr_d = rt714_3_adr,
292 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12[] = {
295 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
296 .adr_d = rt711_sdca_0_adr,
300 .num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
301 .adr_d = rt1318_1_group1_adr,
305 .num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
306 .adr_d = rt1318_2_group1_adr,
311 static const struct snd_soc_acpi_link_adr rpl_sdw_rt1316_link12_rt714_link0[] = {
314 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
315 .adr_d = rt1316_1_group1_adr,
319 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
320 .adr_d = rt1316_2_group1_adr,
324 .num_adr = ARRAY_SIZE(rt714_0_adr),
325 .adr_d = rt714_0_adr,
330 static const struct snd_soc_acpi_link_adr rpl_sdca_rvp[] = {
333 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
334 .adr_d = rt711_sdca_0_adr,
339 static const struct snd_soc_acpi_link_adr rplp_crb[] = {
342 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
343 .adr_d = rt711_sdca_2_adr,
348 static const struct snd_soc_acpi_codecs rpl_rt5682_hp = {
350 .codecs = {"10EC5682", "RTL5682"},
353 static const struct snd_soc_acpi_codecs rpl_essx_83x6 = {
355 .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
358 static const struct snd_soc_acpi_codecs rpl_max98357a_amp = {
360 .codecs = {"MX98357A"}
363 static const struct snd_soc_acpi_codecs rpl_max98360a_amp = {
365 .codecs = {"MX98360A"},
368 static const struct snd_soc_acpi_codecs rpl_max98373_amp = {
370 .codecs = {"MX98373"}
373 static const struct snd_soc_acpi_codecs rpl_lt6911_hdmi = {
375 .codecs = {"INTC10B0"}
378 static const struct snd_soc_acpi_codecs rpl_nau8318_amp = {
380 .codecs = {"NVTN2012"}
383 static const struct snd_soc_acpi_codecs rpl_rt1019p_amp = {
385 .codecs = {"RTL1019"}
388 struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = {
390 .comp_ids = &rpl_rt5682_hp,
391 .drv_name = "rpl_mx98357_rt5682",
392 .machine_quirk = snd_soc_acpi_codec_list,
393 .quirk_data = &rpl_max98357a_amp,
394 .sof_tplg_filename = "sof-rpl-max98357a-rt5682.tplg",
397 .comp_ids = &rpl_rt5682_hp,
398 .drv_name = "rpl_mx98360_rt5682",
399 .machine_quirk = snd_soc_acpi_codec_list,
400 .quirk_data = &rpl_max98360a_amp,
401 .sof_tplg_filename = "sof-rpl-max98360a-rt5682.tplg",
405 .drv_name = "rpl_max98373_8825",
406 .machine_quirk = snd_soc_acpi_codec_list,
407 .quirk_data = &rpl_max98373_amp,
408 .sof_tplg_filename = "sof-rpl-max98373-nau8825.tplg",
412 .drv_name = "rpl_mx98360a_8825",
413 .machine_quirk = snd_soc_acpi_codec_list,
414 .quirk_data = &rpl_max98360a_amp,
415 .sof_tplg_filename = "sof-rpl-max98360a-nau8825.tplg",
419 .drv_name = "rpl_nau8318_8825",
420 .machine_quirk = snd_soc_acpi_codec_list,
421 .quirk_data = &rpl_nau8318_amp,
422 .sof_tplg_filename = "sof-rpl-nau8318-nau8825.tplg",
425 .comp_ids = &rpl_rt5682_hp,
426 .drv_name = "rpl_rt1019_rt5682",
427 .machine_quirk = snd_soc_acpi_codec_list,
428 .quirk_data = &rpl_rt1019p_amp,
429 .sof_tplg_filename = "sof-rpl-rt1019-rt5682.tplg",
432 .comp_ids = &rpl_rt5682_hp,
433 .drv_name = "rpl_rt5682_c1_h02",
434 .machine_quirk = snd_soc_acpi_codec_list,
435 .quirk_data = &rpl_lt6911_hdmi,
436 .sof_tplg_filename = "sof-rpl-rt5682-ssp1-hdmi-ssp02.tplg",
439 .comp_ids = &rpl_essx_83x6,
440 .drv_name = "rpl_es83x6_c1_h02",
441 .machine_quirk = snd_soc_acpi_codec_list,
442 .quirk_data = &rpl_lt6911_hdmi,
443 .sof_tplg_filename = "sof-rpl-es83x6-ssp1-hdmi-ssp02.tplg",
446 .comp_ids = &rpl_essx_83x6,
447 .drv_name = "sof-essx8336",
448 .sof_tplg_filename = "sof-rpl-es83x6", /* 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 = "rpl_lt6911_hdmi_ssp",
456 .sof_tplg_filename = "sof-rpl-nocodec-hdmi-ssp02.tplg"
460 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_machines);
462 /* this table is used when there is no I2S codec present */
463 struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_sdw_machines[] = {
465 .link_mask = 0xF, /* 4 active links required */
466 .links = rpl_sdca_3_in_1,
467 .drv_name = "sof_sdw",
468 .sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l13-rt714-l2.tplg",
471 .link_mask = 0xF, /* 4 active links required */
472 .links = rpl_sdw_rt711_link2_rt1316_link01_rt714_link3,
473 .drv_name = "sof_sdw",
474 .sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01-rt714-l3.tplg",
477 .link_mask = 0xF, /* 4 active links required */
478 .links = rpl_sdw_rt711_link0_rt1316_link12_rt714_link3,
479 .drv_name = "sof_sdw",
480 .sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l12-rt714-l3.tplg",
483 .link_mask = 0xF, /* 4 active links required */
484 .links = rpl_sdw_rt711_link0_rt1318_link12_rt714_link3,
485 .drv_name = "sof_sdw",
486 .sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12-rt714-l3.tplg",
489 .link_mask = 0x7, /* rt711 on link0 & two rt1316s on link1 and link2 */
490 .links = rpl_sdw_rt711_link0_rt1316_link12,
491 .drv_name = "sof_sdw",
492 .sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l12.tplg",
495 .link_mask = 0x7, /* rt711 on link0 & two rt1318s on link1 and link2 */
496 .links = rpl_sdw_rt711_link0_rt1318_link12,
497 .drv_name = "sof_sdw",
498 .sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12.tplg",
501 .link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */
502 .links = rpl_sdw_rt1316_link12_rt714_link0,
503 .drv_name = "sof_sdw",
504 .sof_tplg_filename = "sof-rpl-rt1316-l12-rt714-l0.tplg",
507 .link_mask = 0x7, /* rt711 on link2 & two rt1316s on link0 and link1 */
508 .links = rpl_sdw_rt711_link2_rt1316_link01,
509 .drv_name = "sof_sdw",
510 .sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01.tplg",
513 .link_mask = 0x1, /* link0 required */
515 .drv_name = "sof_sdw",
516 .sof_tplg_filename = "sof-rpl-rt711-l0.tplg",
519 .link_mask = 0x1, /* link0 required */
520 .links = rpl_sdca_rvp,
521 .drv_name = "sof_sdw",
522 .sof_tplg_filename = "sof-rpl-rt711-l0.tplg",
525 .link_mask = 0x4, /* link2 required */
527 .drv_name = "sof_sdw",
528 .sof_tplg_filename = "sof-rpl-rt711-l2.tplg",
532 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_sdw_machines);