111fe58c4SBard Liao // SPDX-License-Identifier: GPL-2.0-only 211fe58c4SBard Liao /* 311fe58c4SBard Liao * soc-acpi-intel-mtl-match.c - tables and support for MTL ACPI enumeration. 411fe58c4SBard Liao * 511fe58c4SBard Liao * Copyright (c) 2022, Intel Corporation. 611fe58c4SBard Liao * 711fe58c4SBard Liao */ 811fe58c4SBard Liao 911fe58c4SBard Liao #include <sound/soc-acpi.h> 1011fe58c4SBard Liao #include <sound/soc-acpi-intel-match.h> 1111fe58c4SBard Liao #include "soc-acpi-intel-sdw-mockup-match.h" 1211fe58c4SBard Liao 131f6645b1SYong Zhi static const struct snd_soc_acpi_codecs mtl_max98357a_amp = { 141f6645b1SYong Zhi .num_codecs = 1, 151f6645b1SYong Zhi .codecs = {"MX98357A"} 161f6645b1SYong Zhi }; 171f6645b1SYong Zhi 187e43b75dSDharageswari.R static const struct snd_soc_acpi_codecs mtl_max98360a_amp = { 197e43b75dSDharageswari.R .num_codecs = 1, 207e43b75dSDharageswari.R .codecs = {"MX98360A"} 217e43b75dSDharageswari.R }; 227e43b75dSDharageswari.R 23b20c8137SMac Chiang static const struct snd_soc_acpi_codecs mtl_rt1019p_amp = { 24b20c8137SMac Chiang .num_codecs = 1, 25b20c8137SMac Chiang .codecs = {"RTL1019"} 26b20c8137SMac Chiang }; 27b20c8137SMac Chiang 281f6645b1SYong Zhi static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = { 291f6645b1SYong Zhi .num_codecs = 2, 301f6645b1SYong Zhi .codecs = {"10EC5682", "RTL5682"}, 311f6645b1SYong Zhi }; 321f6645b1SYong Zhi 33*381ddcd5SBalamurugan C static const struct snd_soc_acpi_codecs mtl_essx_83x6 = { 34*381ddcd5SBalamurugan C .num_codecs = 3, 35*381ddcd5SBalamurugan C .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"}, 36*381ddcd5SBalamurugan C }; 37*381ddcd5SBalamurugan C 3811fe58c4SBard Liao struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = { 391f6645b1SYong Zhi { 401f6645b1SYong Zhi .comp_ids = &mtl_rt5682_rt5682s_hp, 411f6645b1SYong Zhi .drv_name = "mtl_mx98357_rt5682", 421f6645b1SYong Zhi .machine_quirk = snd_soc_acpi_codec_list, 431f6645b1SYong Zhi .quirk_data = &mtl_max98357a_amp, 441f6645b1SYong Zhi .sof_tplg_filename = "sof-mtl-max98357a-rt5682.tplg", 451f6645b1SYong Zhi }, 467e43b75dSDharageswari.R { 477e43b75dSDharageswari.R .comp_ids = &mtl_rt5682_rt5682s_hp, 487e43b75dSDharageswari.R .drv_name = "mtl_mx98360_rt5682", 497e43b75dSDharageswari.R .machine_quirk = snd_soc_acpi_codec_list, 507e43b75dSDharageswari.R .quirk_data = &mtl_max98360a_amp, 517e43b75dSDharageswari.R .sof_tplg_filename = "sof-mtl-max98360a-rt5682.tplg", 527e43b75dSDharageswari.R }, 53b20c8137SMac Chiang { 54b20c8137SMac Chiang .comp_ids = &mtl_rt5682_rt5682s_hp, 55b20c8137SMac Chiang .drv_name = "mtl_rt1019_rt5682", 56b20c8137SMac Chiang .machine_quirk = snd_soc_acpi_codec_list, 57b20c8137SMac Chiang .quirk_data = &mtl_rt1019p_amp, 58b20c8137SMac Chiang .sof_tplg_filename = "sof-mtl-rt1019-rt5682.tplg", 59b20c8137SMac Chiang }, 60*381ddcd5SBalamurugan C { 61*381ddcd5SBalamurugan C .comp_ids = &mtl_essx_83x6, 62*381ddcd5SBalamurugan C .drv_name = "sof-essx8336", 63*381ddcd5SBalamurugan C .sof_tplg_filename = "sof-mtl-es8336", /* the tplg suffix is added at run time */ 64*381ddcd5SBalamurugan C .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER | 65*381ddcd5SBalamurugan C SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | 66*381ddcd5SBalamurugan C SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, 67*381ddcd5SBalamurugan C }, 6811fe58c4SBard Liao {}, 6911fe58c4SBard Liao }; 7011fe58c4SBard Liao EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines); 7111fe58c4SBard Liao 7218489174SYong Zhi static const struct snd_soc_acpi_endpoint single_endpoint = { 7318489174SYong Zhi .num = 0, 7418489174SYong Zhi .aggregated = 0, 7518489174SYong Zhi .group_position = 0, 7618489174SYong Zhi .group_id = 0, 7718489174SYong Zhi }; 7818489174SYong Zhi 798dcc2059SYong Zhi static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 808dcc2059SYong Zhi .num = 0, 818dcc2059SYong Zhi .aggregated = 1, 828dcc2059SYong Zhi .group_position = 0, 838dcc2059SYong Zhi .group_id = 1, 848dcc2059SYong Zhi }; 858dcc2059SYong Zhi 868dcc2059SYong Zhi static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 878dcc2059SYong Zhi .num = 0, 888dcc2059SYong Zhi .aggregated = 1, 898dcc2059SYong Zhi .group_position = 1, 908dcc2059SYong Zhi .group_id = 1, 918dcc2059SYong Zhi }; 928dcc2059SYong Zhi 939efa6f46SBard Liao static const struct snd_soc_acpi_endpoint rt712_endpoints[] = { 949efa6f46SBard Liao { 959efa6f46SBard Liao .num = 0, 969efa6f46SBard Liao .aggregated = 0, 979efa6f46SBard Liao .group_position = 0, 989efa6f46SBard Liao .group_id = 0, 999efa6f46SBard Liao }, 1009efa6f46SBard Liao { 1019efa6f46SBard Liao .num = 1, 1029efa6f46SBard Liao .aggregated = 0, 1039efa6f46SBard Liao .group_position = 0, 1049efa6f46SBard Liao .group_id = 0, 1059efa6f46SBard Liao }, 1069efa6f46SBard Liao }; 1079efa6f46SBard Liao 10818489174SYong Zhi static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { 10918489174SYong Zhi { 11018489174SYong Zhi .adr = 0x000030025D071101ull, 11118489174SYong Zhi .num_endpoints = 1, 11218489174SYong Zhi .endpoints = &single_endpoint, 11318489174SYong Zhi .name_prefix = "rt711" 11418489174SYong Zhi } 11518489174SYong Zhi }; 11618489174SYong Zhi 1179efa6f46SBard Liao static const struct snd_soc_acpi_adr_device rt712_0_single_adr[] = { 1189efa6f46SBard Liao { 1199efa6f46SBard Liao .adr = 0x000030025D071201ull, 1209efa6f46SBard Liao .num_endpoints = ARRAY_SIZE(rt712_endpoints), 1219efa6f46SBard Liao .endpoints = rt712_endpoints, 1229efa6f46SBard Liao .name_prefix = "rt712" 1239efa6f46SBard Liao } 1249efa6f46SBard Liao }; 1259efa6f46SBard Liao 1269efa6f46SBard Liao static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = { 1279efa6f46SBard Liao { 1289efa6f46SBard Liao .adr = 0x000330025D171201ull, 1299efa6f46SBard Liao .num_endpoints = 1, 1309efa6f46SBard Liao .endpoints = &single_endpoint, 1319efa6f46SBard Liao .name_prefix = "rt712-dmic" 1329efa6f46SBard Liao } 1339efa6f46SBard Liao }; 1349efa6f46SBard Liao 1358dcc2059SYong Zhi static const struct snd_soc_acpi_adr_device mx8373_0_adr[] = { 1368dcc2059SYong Zhi { 1378dcc2059SYong Zhi .adr = 0x000023019F837300ull, 1388dcc2059SYong Zhi .num_endpoints = 1, 1398dcc2059SYong Zhi .endpoints = &spk_l_endpoint, 1408dcc2059SYong Zhi .name_prefix = "Left" 1418dcc2059SYong Zhi }, 1428dcc2059SYong Zhi { 1438dcc2059SYong Zhi .adr = 0x000027019F837300ull, 1448dcc2059SYong Zhi .num_endpoints = 1, 1458dcc2059SYong Zhi .endpoints = &spk_r_endpoint, 1468dcc2059SYong Zhi .name_prefix = "Right" 1478dcc2059SYong Zhi } 1488dcc2059SYong Zhi }; 1498dcc2059SYong Zhi 1508dcc2059SYong Zhi static const struct snd_soc_acpi_adr_device rt5682_2_adr[] = { 1518dcc2059SYong Zhi { 1528dcc2059SYong Zhi .adr = 0x000221025D568200ull, 1538dcc2059SYong Zhi .num_endpoints = 1, 1548dcc2059SYong Zhi .endpoints = &single_endpoint, 1558dcc2059SYong Zhi .name_prefix = "rt5682" 1568dcc2059SYong Zhi } 1578dcc2059SYong Zhi }; 1588dcc2059SYong Zhi 159b06e33aaSChao Song static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = { 160b06e33aaSChao Song { 161b06e33aaSChao Song .adr = 0x000230025D131601ull, 162b06e33aaSChao Song .num_endpoints = 1, 163b06e33aaSChao Song .endpoints = &spk_l_endpoint, 164b06e33aaSChao Song .name_prefix = "rt1316-1" 165b06e33aaSChao Song } 166b06e33aaSChao Song }; 167b06e33aaSChao Song 168b06e33aaSChao Song static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = { 169b06e33aaSChao Song { 170b06e33aaSChao Song .adr = 0x000331025D131601ull, 171b06e33aaSChao Song .num_endpoints = 1, 172b06e33aaSChao Song .endpoints = &spk_r_endpoint, 173b06e33aaSChao Song .name_prefix = "rt1316-2" 174b06e33aaSChao Song } 175b06e33aaSChao Song }; 176b06e33aaSChao Song 177fec75606SChao Song static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = { 178fec75606SChao Song { 179fec75606SChao Song .adr = 0x000130025D131801ull, 180fec75606SChao Song .num_endpoints = 1, 181fec75606SChao Song .endpoints = &spk_l_endpoint, 182fec75606SChao Song .name_prefix = "rt1318-1" 183fec75606SChao Song } 184fec75606SChao Song }; 185fec75606SChao Song 186fec75606SChao Song static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = { 187fec75606SChao Song { 188fec75606SChao Song .adr = 0x000232025D131801ull, 189fec75606SChao Song .num_endpoints = 1, 190fec75606SChao Song .endpoints = &spk_r_endpoint, 191fec75606SChao Song .name_prefix = "rt1318-2" 192fec75606SChao Song } 193fec75606SChao Song }; 194fec75606SChao Song 195fec75606SChao Song static const struct snd_soc_acpi_adr_device rt714_0_adr[] = { 196fec75606SChao Song { 197fec75606SChao Song .adr = 0x000030025D071401ull, 198fec75606SChao Song .num_endpoints = 1, 199fec75606SChao Song .endpoints = &single_endpoint, 200fec75606SChao Song .name_prefix = "rt714" 201fec75606SChao Song } 202fec75606SChao Song }; 203fec75606SChao Song 204b06e33aaSChao Song static const struct snd_soc_acpi_adr_device rt714_1_adr[] = { 205b06e33aaSChao Song { 206b06e33aaSChao Song .adr = 0x000130025D071401ull, 207b06e33aaSChao Song .num_endpoints = 1, 208b06e33aaSChao Song .endpoints = &single_endpoint, 209b06e33aaSChao Song .name_prefix = "rt714" 210b06e33aaSChao Song } 211b06e33aaSChao Song }; 212b06e33aaSChao Song 2139efa6f46SBard Liao static const struct snd_soc_acpi_link_adr mtl_712_only[] = { 2149efa6f46SBard Liao { 2159efa6f46SBard Liao .mask = BIT(0), 2169efa6f46SBard Liao .num_adr = ARRAY_SIZE(rt712_0_single_adr), 2179efa6f46SBard Liao .adr_d = rt712_0_single_adr, 2189efa6f46SBard Liao }, 2199efa6f46SBard Liao { 2209efa6f46SBard Liao .mask = BIT(3), 2219efa6f46SBard Liao .num_adr = ARRAY_SIZE(rt1712_3_single_adr), 2229efa6f46SBard Liao .adr_d = rt1712_3_single_adr, 2239efa6f46SBard Liao }, 2249efa6f46SBard Liao {} 2259efa6f46SBard Liao }; 2269efa6f46SBard Liao 2278dcc2059SYong Zhi static const struct snd_soc_acpi_link_adr rt5682_link2_max98373_link0[] = { 2288dcc2059SYong Zhi /* Expected order: jack -> amp */ 2298dcc2059SYong Zhi { 2308dcc2059SYong Zhi .mask = BIT(2), 2318dcc2059SYong Zhi .num_adr = ARRAY_SIZE(rt5682_2_adr), 2328dcc2059SYong Zhi .adr_d = rt5682_2_adr, 2338dcc2059SYong Zhi }, 2348dcc2059SYong Zhi { 2358dcc2059SYong Zhi .mask = BIT(0), 2368dcc2059SYong Zhi .num_adr = ARRAY_SIZE(mx8373_0_adr), 2378dcc2059SYong Zhi .adr_d = mx8373_0_adr, 2388dcc2059SYong Zhi }, 2398dcc2059SYong Zhi {} 2408dcc2059SYong Zhi }; 2418dcc2059SYong Zhi 24218489174SYong Zhi static const struct snd_soc_acpi_link_adr mtl_rvp[] = { 24318489174SYong Zhi { 24418489174SYong Zhi .mask = BIT(0), 24518489174SYong Zhi .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 24618489174SYong Zhi .adr_d = rt711_sdca_0_adr, 24718489174SYong Zhi }, 24818489174SYong Zhi {} 24918489174SYong Zhi }; 25018489174SYong Zhi 251b06e33aaSChao Song static const struct snd_soc_acpi_link_adr mtl_3_in_1_sdca[] = { 252b06e33aaSChao Song { 253b06e33aaSChao Song .mask = BIT(0), 254b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 255b06e33aaSChao Song .adr_d = rt711_sdca_0_adr, 256b06e33aaSChao Song }, 257b06e33aaSChao Song { 258b06e33aaSChao Song .mask = BIT(2), 259b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 260b06e33aaSChao Song .adr_d = rt1316_2_group1_adr, 261b06e33aaSChao Song }, 262b06e33aaSChao Song { 263b06e33aaSChao Song .mask = BIT(3), 264b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt1316_3_group1_adr), 265b06e33aaSChao Song .adr_d = rt1316_3_group1_adr, 266b06e33aaSChao Song }, 267b06e33aaSChao Song { 268b06e33aaSChao Song .mask = BIT(1), 269b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt714_1_adr), 270b06e33aaSChao Song .adr_d = rt714_1_adr, 271b06e33aaSChao Song }, 272b06e33aaSChao Song {} 273b06e33aaSChao Song }; 274b06e33aaSChao Song 275fec75606SChao Song static const struct snd_soc_acpi_link_adr mtl_sdw_rt1318_l12_rt714_l0[] = { 276fec75606SChao Song { 277fec75606SChao Song .mask = BIT(1), 278fec75606SChao Song .num_adr = ARRAY_SIZE(rt1318_1_group1_adr), 279fec75606SChao Song .adr_d = rt1318_1_group1_adr, 280fec75606SChao Song }, 281fec75606SChao Song { 282fec75606SChao Song .mask = BIT(2), 283fec75606SChao Song .num_adr = ARRAY_SIZE(rt1318_2_group1_adr), 284fec75606SChao Song .adr_d = rt1318_2_group1_adr, 285fec75606SChao Song }, 286fec75606SChao Song { 287fec75606SChao Song .mask = BIT(0), 288fec75606SChao Song .num_adr = ARRAY_SIZE(rt714_0_adr), 289fec75606SChao Song .adr_d = rt714_0_adr, 290fec75606SChao Song }, 291fec75606SChao Song {} 292fec75606SChao Song }; 293fec75606SChao Song 294a0503817SUday M Bhat static const struct snd_soc_acpi_adr_device mx8363_2_adr[] = { 295a0503817SUday M Bhat { 296a0503817SUday M Bhat .adr = 0x000230019F836300ull, 297a0503817SUday M Bhat .num_endpoints = 1, 298a0503817SUday M Bhat .endpoints = &spk_l_endpoint, 299a0503817SUday M Bhat .name_prefix = "Left" 300a0503817SUday M Bhat }, 301a0503817SUday M Bhat { 302a0503817SUday M Bhat .adr = 0x000231019F836300ull, 303a0503817SUday M Bhat .num_endpoints = 1, 304a0503817SUday M Bhat .endpoints = &spk_r_endpoint, 305a0503817SUday M Bhat .name_prefix = "Right" 306a0503817SUday M Bhat } 307a0503817SUday M Bhat }; 308a0503817SUday M Bhat 309a0503817SUday M Bhat static const struct snd_soc_acpi_adr_device cs42l42_0_adr[] = { 310a0503817SUday M Bhat { 311a0503817SUday M Bhat .adr = 0x00001001FA424200ull, 312a0503817SUday M Bhat .num_endpoints = 1, 313a0503817SUday M Bhat .endpoints = &single_endpoint, 314a0503817SUday M Bhat .name_prefix = "cs42l42" 315a0503817SUday M Bhat } 316a0503817SUday M Bhat }; 317a0503817SUday M Bhat 318a0503817SUday M Bhat static const struct snd_soc_acpi_link_adr cs42l42_link0_max98363_link2[] = { 319a0503817SUday M Bhat /* Expected order: jack -> amp */ 320a0503817SUday M Bhat { 321a0503817SUday M Bhat .mask = BIT(0), 322a0503817SUday M Bhat .num_adr = ARRAY_SIZE(cs42l42_0_adr), 323a0503817SUday M Bhat .adr_d = cs42l42_0_adr, 324a0503817SUday M Bhat }, 325a0503817SUday M Bhat { 326a0503817SUday M Bhat .mask = BIT(2), 327a0503817SUday M Bhat .num_adr = ARRAY_SIZE(mx8363_2_adr), 328a0503817SUday M Bhat .adr_d = mx8363_2_adr, 329a0503817SUday M Bhat }, 330a0503817SUday M Bhat {} 331a0503817SUday M Bhat }; 332a0503817SUday M Bhat 33311fe58c4SBard Liao /* this table is used when there is no I2S codec present */ 33411fe58c4SBard Liao struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = { 33511fe58c4SBard Liao /* mockup tests need to be first */ 33611fe58c4SBard Liao { 33711fe58c4SBard Liao .link_mask = GENMASK(3, 0), 33811fe58c4SBard Liao .links = sdw_mockup_headset_2amps_mic, 33911fe58c4SBard Liao .drv_name = "sof_sdw", 34011fe58c4SBard Liao .sof_tplg_filename = "sof-mtl-rt711-rt1308-rt715.tplg", 34111fe58c4SBard Liao }, 34211fe58c4SBard Liao { 34311fe58c4SBard Liao .link_mask = BIT(0) | BIT(1) | BIT(3), 34411fe58c4SBard Liao .links = sdw_mockup_headset_1amp_mic, 34511fe58c4SBard Liao .drv_name = "sof_sdw", 34611fe58c4SBard Liao .sof_tplg_filename = "sof-mtl-rt711-rt1308-mono-rt715.tplg", 34711fe58c4SBard Liao }, 34811fe58c4SBard Liao { 34911fe58c4SBard Liao .link_mask = GENMASK(2, 0), 35011fe58c4SBard Liao .links = sdw_mockup_mic_headset_1amp, 35111fe58c4SBard Liao .drv_name = "sof_sdw", 35211fe58c4SBard Liao .sof_tplg_filename = "sof-mtl-rt715-rt711-rt1308-mono.tplg", 35311fe58c4SBard Liao }, 35418489174SYong Zhi { 3559efa6f46SBard Liao .link_mask = BIT(3) | BIT(0), 3569efa6f46SBard Liao .links = mtl_712_only, 3579efa6f46SBard Liao .drv_name = "sof_sdw", 3589efa6f46SBard Liao .sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg", 3599efa6f46SBard Liao }, 3609efa6f46SBard Liao { 361fec75606SChao Song .link_mask = GENMASK(2, 0), 362fec75606SChao Song .links = mtl_sdw_rt1318_l12_rt714_l0, 363fec75606SChao Song .drv_name = "sof_sdw", 364fec75606SChao Song .sof_tplg_filename = "sof-mtl-rt1318-l12-rt714-l0.tplg" 365fec75606SChao Song }, 366fec75606SChao Song { 367b06e33aaSChao Song .link_mask = GENMASK(3, 0), 368b06e33aaSChao Song .links = mtl_3_in_1_sdca, 369b06e33aaSChao Song .drv_name = "sof_sdw", 370b06e33aaSChao Song .sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg", 371b06e33aaSChao Song }, 372b06e33aaSChao Song { 37318489174SYong Zhi .link_mask = BIT(0), 37418489174SYong Zhi .links = mtl_rvp, 37518489174SYong Zhi .drv_name = "sof_sdw", 37618489174SYong Zhi .sof_tplg_filename = "sof-mtl-rt711.tplg", 37718489174SYong Zhi }, 3788dcc2059SYong Zhi { 3798dcc2059SYong Zhi .link_mask = BIT(0) | BIT(2), 3808dcc2059SYong Zhi .links = rt5682_link2_max98373_link0, 3818dcc2059SYong Zhi .drv_name = "sof_sdw", 3828dcc2059SYong Zhi .sof_tplg_filename = "sof-mtl-sdw-rt5682-l2-max98373-l0.tplg", 3838dcc2059SYong Zhi }, 384a0503817SUday M Bhat { 385a0503817SUday M Bhat .link_mask = BIT(0) | BIT(2), 386a0503817SUday M Bhat .links = cs42l42_link0_max98363_link2, 387a0503817SUday M Bhat .drv_name = "sof_sdw", 388a0503817SUday M Bhat .sof_tplg_filename = "sof-mtl-sdw-cs42l42-l0-max98363-l2.tplg", 389a0503817SUday M Bhat }, 39011fe58c4SBard Liao {}, 39111fe58c4SBard Liao }; 39211fe58c4SBard Liao EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines); 393