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 3311fe58c4SBard Liao struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = { 341f6645b1SYong Zhi { 351f6645b1SYong Zhi .comp_ids = &mtl_rt5682_rt5682s_hp, 361f6645b1SYong Zhi .drv_name = "mtl_mx98357_rt5682", 371f6645b1SYong Zhi .machine_quirk = snd_soc_acpi_codec_list, 381f6645b1SYong Zhi .quirk_data = &mtl_max98357a_amp, 391f6645b1SYong Zhi .sof_tplg_filename = "sof-mtl-max98357a-rt5682.tplg", 401f6645b1SYong Zhi }, 417e43b75dSDharageswari.R { 427e43b75dSDharageswari.R .comp_ids = &mtl_rt5682_rt5682s_hp, 437e43b75dSDharageswari.R .drv_name = "mtl_mx98360_rt5682", 447e43b75dSDharageswari.R .machine_quirk = snd_soc_acpi_codec_list, 457e43b75dSDharageswari.R .quirk_data = &mtl_max98360a_amp, 467e43b75dSDharageswari.R .sof_tplg_filename = "sof-mtl-max98360a-rt5682.tplg", 477e43b75dSDharageswari.R }, 48b20c8137SMac Chiang { 49b20c8137SMac Chiang .comp_ids = &mtl_rt5682_rt5682s_hp, 50b20c8137SMac Chiang .drv_name = "mtl_rt1019_rt5682", 51b20c8137SMac Chiang .machine_quirk = snd_soc_acpi_codec_list, 52b20c8137SMac Chiang .quirk_data = &mtl_rt1019p_amp, 53b20c8137SMac Chiang .sof_tplg_filename = "sof-mtl-rt1019-rt5682.tplg", 54b20c8137SMac Chiang }, 5511fe58c4SBard Liao {}, 5611fe58c4SBard Liao }; 5711fe58c4SBard Liao EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines); 5811fe58c4SBard Liao 5918489174SYong Zhi static const struct snd_soc_acpi_endpoint single_endpoint = { 6018489174SYong Zhi .num = 0, 6118489174SYong Zhi .aggregated = 0, 6218489174SYong Zhi .group_position = 0, 6318489174SYong Zhi .group_id = 0, 6418489174SYong Zhi }; 6518489174SYong Zhi 668dcc2059SYong Zhi static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 678dcc2059SYong Zhi .num = 0, 688dcc2059SYong Zhi .aggregated = 1, 698dcc2059SYong Zhi .group_position = 0, 708dcc2059SYong Zhi .group_id = 1, 718dcc2059SYong Zhi }; 728dcc2059SYong Zhi 738dcc2059SYong Zhi static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 748dcc2059SYong Zhi .num = 0, 758dcc2059SYong Zhi .aggregated = 1, 768dcc2059SYong Zhi .group_position = 1, 778dcc2059SYong Zhi .group_id = 1, 788dcc2059SYong Zhi }; 798dcc2059SYong Zhi 809efa6f46SBard Liao static const struct snd_soc_acpi_endpoint rt712_endpoints[] = { 819efa6f46SBard Liao { 829efa6f46SBard Liao .num = 0, 839efa6f46SBard Liao .aggregated = 0, 849efa6f46SBard Liao .group_position = 0, 859efa6f46SBard Liao .group_id = 0, 869efa6f46SBard Liao }, 879efa6f46SBard Liao { 889efa6f46SBard Liao .num = 1, 899efa6f46SBard Liao .aggregated = 0, 909efa6f46SBard Liao .group_position = 0, 919efa6f46SBard Liao .group_id = 0, 929efa6f46SBard Liao }, 939efa6f46SBard Liao }; 949efa6f46SBard Liao 9518489174SYong Zhi static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { 9618489174SYong Zhi { 9718489174SYong Zhi .adr = 0x000030025D071101ull, 9818489174SYong Zhi .num_endpoints = 1, 9918489174SYong Zhi .endpoints = &single_endpoint, 10018489174SYong Zhi .name_prefix = "rt711" 10118489174SYong Zhi } 10218489174SYong Zhi }; 10318489174SYong Zhi 1049efa6f46SBard Liao static const struct snd_soc_acpi_adr_device rt712_0_single_adr[] = { 1059efa6f46SBard Liao { 1069efa6f46SBard Liao .adr = 0x000030025D071201ull, 1079efa6f46SBard Liao .num_endpoints = ARRAY_SIZE(rt712_endpoints), 1089efa6f46SBard Liao .endpoints = rt712_endpoints, 1099efa6f46SBard Liao .name_prefix = "rt712" 1109efa6f46SBard Liao } 1119efa6f46SBard Liao }; 1129efa6f46SBard Liao 1139efa6f46SBard Liao static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = { 1149efa6f46SBard Liao { 1159efa6f46SBard Liao .adr = 0x000330025D171201ull, 1169efa6f46SBard Liao .num_endpoints = 1, 1179efa6f46SBard Liao .endpoints = &single_endpoint, 1189efa6f46SBard Liao .name_prefix = "rt712-dmic" 1199efa6f46SBard Liao } 1209efa6f46SBard Liao }; 1219efa6f46SBard Liao 1228dcc2059SYong Zhi static const struct snd_soc_acpi_adr_device mx8373_0_adr[] = { 1238dcc2059SYong Zhi { 1248dcc2059SYong Zhi .adr = 0x000023019F837300ull, 1258dcc2059SYong Zhi .num_endpoints = 1, 1268dcc2059SYong Zhi .endpoints = &spk_l_endpoint, 1278dcc2059SYong Zhi .name_prefix = "Left" 1288dcc2059SYong Zhi }, 1298dcc2059SYong Zhi { 1308dcc2059SYong Zhi .adr = 0x000027019F837300ull, 1318dcc2059SYong Zhi .num_endpoints = 1, 1328dcc2059SYong Zhi .endpoints = &spk_r_endpoint, 1338dcc2059SYong Zhi .name_prefix = "Right" 1348dcc2059SYong Zhi } 1358dcc2059SYong Zhi }; 1368dcc2059SYong Zhi 1378dcc2059SYong Zhi static const struct snd_soc_acpi_adr_device rt5682_2_adr[] = { 1388dcc2059SYong Zhi { 1398dcc2059SYong Zhi .adr = 0x000221025D568200ull, 1408dcc2059SYong Zhi .num_endpoints = 1, 1418dcc2059SYong Zhi .endpoints = &single_endpoint, 1428dcc2059SYong Zhi .name_prefix = "rt5682" 1438dcc2059SYong Zhi } 1448dcc2059SYong Zhi }; 1458dcc2059SYong Zhi 146b06e33aaSChao Song static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = { 147b06e33aaSChao Song { 148b06e33aaSChao Song .adr = 0x000230025D131601ull, 149b06e33aaSChao Song .num_endpoints = 1, 150b06e33aaSChao Song .endpoints = &spk_l_endpoint, 151b06e33aaSChao Song .name_prefix = "rt1316-1" 152b06e33aaSChao Song } 153b06e33aaSChao Song }; 154b06e33aaSChao Song 155b06e33aaSChao Song static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = { 156b06e33aaSChao Song { 157b06e33aaSChao Song .adr = 0x000331025D131601ull, 158b06e33aaSChao Song .num_endpoints = 1, 159b06e33aaSChao Song .endpoints = &spk_r_endpoint, 160b06e33aaSChao Song .name_prefix = "rt1316-2" 161b06e33aaSChao Song } 162b06e33aaSChao Song }; 163b06e33aaSChao Song 164*fec75606SChao Song static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = { 165*fec75606SChao Song { 166*fec75606SChao Song .adr = 0x000130025D131801ull, 167*fec75606SChao Song .num_endpoints = 1, 168*fec75606SChao Song .endpoints = &spk_l_endpoint, 169*fec75606SChao Song .name_prefix = "rt1318-1" 170*fec75606SChao Song } 171*fec75606SChao Song }; 172*fec75606SChao Song 173*fec75606SChao Song static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = { 174*fec75606SChao Song { 175*fec75606SChao Song .adr = 0x000232025D131801ull, 176*fec75606SChao Song .num_endpoints = 1, 177*fec75606SChao Song .endpoints = &spk_r_endpoint, 178*fec75606SChao Song .name_prefix = "rt1318-2" 179*fec75606SChao Song } 180*fec75606SChao Song }; 181*fec75606SChao Song 182*fec75606SChao Song static const struct snd_soc_acpi_adr_device rt714_0_adr[] = { 183*fec75606SChao Song { 184*fec75606SChao Song .adr = 0x000030025D071401ull, 185*fec75606SChao Song .num_endpoints = 1, 186*fec75606SChao Song .endpoints = &single_endpoint, 187*fec75606SChao Song .name_prefix = "rt714" 188*fec75606SChao Song } 189*fec75606SChao Song }; 190*fec75606SChao Song 191b06e33aaSChao Song static const struct snd_soc_acpi_adr_device rt714_1_adr[] = { 192b06e33aaSChao Song { 193b06e33aaSChao Song .adr = 0x000130025D071401ull, 194b06e33aaSChao Song .num_endpoints = 1, 195b06e33aaSChao Song .endpoints = &single_endpoint, 196b06e33aaSChao Song .name_prefix = "rt714" 197b06e33aaSChao Song } 198b06e33aaSChao Song }; 199b06e33aaSChao Song 2009efa6f46SBard Liao static const struct snd_soc_acpi_link_adr mtl_712_only[] = { 2019efa6f46SBard Liao { 2029efa6f46SBard Liao .mask = BIT(0), 2039efa6f46SBard Liao .num_adr = ARRAY_SIZE(rt712_0_single_adr), 2049efa6f46SBard Liao .adr_d = rt712_0_single_adr, 2059efa6f46SBard Liao }, 2069efa6f46SBard Liao { 2079efa6f46SBard Liao .mask = BIT(3), 2089efa6f46SBard Liao .num_adr = ARRAY_SIZE(rt1712_3_single_adr), 2099efa6f46SBard Liao .adr_d = rt1712_3_single_adr, 2109efa6f46SBard Liao }, 2119efa6f46SBard Liao {} 2129efa6f46SBard Liao }; 2139efa6f46SBard Liao 2148dcc2059SYong Zhi static const struct snd_soc_acpi_link_adr rt5682_link2_max98373_link0[] = { 2158dcc2059SYong Zhi /* Expected order: jack -> amp */ 2168dcc2059SYong Zhi { 2178dcc2059SYong Zhi .mask = BIT(2), 2188dcc2059SYong Zhi .num_adr = ARRAY_SIZE(rt5682_2_adr), 2198dcc2059SYong Zhi .adr_d = rt5682_2_adr, 2208dcc2059SYong Zhi }, 2218dcc2059SYong Zhi { 2228dcc2059SYong Zhi .mask = BIT(0), 2238dcc2059SYong Zhi .num_adr = ARRAY_SIZE(mx8373_0_adr), 2248dcc2059SYong Zhi .adr_d = mx8373_0_adr, 2258dcc2059SYong Zhi }, 2268dcc2059SYong Zhi {} 2278dcc2059SYong Zhi }; 2288dcc2059SYong Zhi 22918489174SYong Zhi static const struct snd_soc_acpi_link_adr mtl_rvp[] = { 23018489174SYong Zhi { 23118489174SYong Zhi .mask = BIT(0), 23218489174SYong Zhi .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 23318489174SYong Zhi .adr_d = rt711_sdca_0_adr, 23418489174SYong Zhi }, 23518489174SYong Zhi {} 23618489174SYong Zhi }; 23718489174SYong Zhi 238b06e33aaSChao Song static const struct snd_soc_acpi_link_adr mtl_3_in_1_sdca[] = { 239b06e33aaSChao Song { 240b06e33aaSChao Song .mask = BIT(0), 241b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 242b06e33aaSChao Song .adr_d = rt711_sdca_0_adr, 243b06e33aaSChao Song }, 244b06e33aaSChao Song { 245b06e33aaSChao Song .mask = BIT(2), 246b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 247b06e33aaSChao Song .adr_d = rt1316_2_group1_adr, 248b06e33aaSChao Song }, 249b06e33aaSChao Song { 250b06e33aaSChao Song .mask = BIT(3), 251b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt1316_3_group1_adr), 252b06e33aaSChao Song .adr_d = rt1316_3_group1_adr, 253b06e33aaSChao Song }, 254b06e33aaSChao Song { 255b06e33aaSChao Song .mask = BIT(1), 256b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt714_1_adr), 257b06e33aaSChao Song .adr_d = rt714_1_adr, 258b06e33aaSChao Song }, 259b06e33aaSChao Song {} 260b06e33aaSChao Song }; 261b06e33aaSChao Song 262*fec75606SChao Song static const struct snd_soc_acpi_link_adr mtl_sdw_rt1318_l12_rt714_l0[] = { 263*fec75606SChao Song { 264*fec75606SChao Song .mask = BIT(1), 265*fec75606SChao Song .num_adr = ARRAY_SIZE(rt1318_1_group1_adr), 266*fec75606SChao Song .adr_d = rt1318_1_group1_adr, 267*fec75606SChao Song }, 268*fec75606SChao Song { 269*fec75606SChao Song .mask = BIT(2), 270*fec75606SChao Song .num_adr = ARRAY_SIZE(rt1318_2_group1_adr), 271*fec75606SChao Song .adr_d = rt1318_2_group1_adr, 272*fec75606SChao Song }, 273*fec75606SChao Song { 274*fec75606SChao Song .mask = BIT(0), 275*fec75606SChao Song .num_adr = ARRAY_SIZE(rt714_0_adr), 276*fec75606SChao Song .adr_d = rt714_0_adr, 277*fec75606SChao Song }, 278*fec75606SChao Song {} 279*fec75606SChao Song }; 280*fec75606SChao Song 281a0503817SUday M Bhat static const struct snd_soc_acpi_adr_device mx8363_2_adr[] = { 282a0503817SUday M Bhat { 283a0503817SUday M Bhat .adr = 0x000230019F836300ull, 284a0503817SUday M Bhat .num_endpoints = 1, 285a0503817SUday M Bhat .endpoints = &spk_l_endpoint, 286a0503817SUday M Bhat .name_prefix = "Left" 287a0503817SUday M Bhat }, 288a0503817SUday M Bhat { 289a0503817SUday M Bhat .adr = 0x000231019F836300ull, 290a0503817SUday M Bhat .num_endpoints = 1, 291a0503817SUday M Bhat .endpoints = &spk_r_endpoint, 292a0503817SUday M Bhat .name_prefix = "Right" 293a0503817SUday M Bhat } 294a0503817SUday M Bhat }; 295a0503817SUday M Bhat 296a0503817SUday M Bhat static const struct snd_soc_acpi_adr_device cs42l42_0_adr[] = { 297a0503817SUday M Bhat { 298a0503817SUday M Bhat .adr = 0x00001001FA424200ull, 299a0503817SUday M Bhat .num_endpoints = 1, 300a0503817SUday M Bhat .endpoints = &single_endpoint, 301a0503817SUday M Bhat .name_prefix = "cs42l42" 302a0503817SUday M Bhat } 303a0503817SUday M Bhat }; 304a0503817SUday M Bhat 305a0503817SUday M Bhat static const struct snd_soc_acpi_link_adr cs42l42_link0_max98363_link2[] = { 306a0503817SUday M Bhat /* Expected order: jack -> amp */ 307a0503817SUday M Bhat { 308a0503817SUday M Bhat .mask = BIT(0), 309a0503817SUday M Bhat .num_adr = ARRAY_SIZE(cs42l42_0_adr), 310a0503817SUday M Bhat .adr_d = cs42l42_0_adr, 311a0503817SUday M Bhat }, 312a0503817SUday M Bhat { 313a0503817SUday M Bhat .mask = BIT(2), 314a0503817SUday M Bhat .num_adr = ARRAY_SIZE(mx8363_2_adr), 315a0503817SUday M Bhat .adr_d = mx8363_2_adr, 316a0503817SUday M Bhat }, 317a0503817SUday M Bhat {} 318a0503817SUday M Bhat }; 319a0503817SUday M Bhat 32011fe58c4SBard Liao /* this table is used when there is no I2S codec present */ 32111fe58c4SBard Liao struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = { 32211fe58c4SBard Liao /* mockup tests need to be first */ 32311fe58c4SBard Liao { 32411fe58c4SBard Liao .link_mask = GENMASK(3, 0), 32511fe58c4SBard Liao .links = sdw_mockup_headset_2amps_mic, 32611fe58c4SBard Liao .drv_name = "sof_sdw", 32711fe58c4SBard Liao .sof_tplg_filename = "sof-mtl-rt711-rt1308-rt715.tplg", 32811fe58c4SBard Liao }, 32911fe58c4SBard Liao { 33011fe58c4SBard Liao .link_mask = BIT(0) | BIT(1) | BIT(3), 33111fe58c4SBard Liao .links = sdw_mockup_headset_1amp_mic, 33211fe58c4SBard Liao .drv_name = "sof_sdw", 33311fe58c4SBard Liao .sof_tplg_filename = "sof-mtl-rt711-rt1308-mono-rt715.tplg", 33411fe58c4SBard Liao }, 33511fe58c4SBard Liao { 33611fe58c4SBard Liao .link_mask = GENMASK(2, 0), 33711fe58c4SBard Liao .links = sdw_mockup_mic_headset_1amp, 33811fe58c4SBard Liao .drv_name = "sof_sdw", 33911fe58c4SBard Liao .sof_tplg_filename = "sof-mtl-rt715-rt711-rt1308-mono.tplg", 34011fe58c4SBard Liao }, 34118489174SYong Zhi { 3429efa6f46SBard Liao .link_mask = BIT(3) | BIT(0), 3439efa6f46SBard Liao .links = mtl_712_only, 3449efa6f46SBard Liao .drv_name = "sof_sdw", 3459efa6f46SBard Liao .sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg", 3469efa6f46SBard Liao }, 3479efa6f46SBard Liao { 348*fec75606SChao Song .link_mask = GENMASK(2, 0), 349*fec75606SChao Song .links = mtl_sdw_rt1318_l12_rt714_l0, 350*fec75606SChao Song .drv_name = "sof_sdw", 351*fec75606SChao Song .sof_tplg_filename = "sof-mtl-rt1318-l12-rt714-l0.tplg" 352*fec75606SChao Song }, 353*fec75606SChao Song { 354b06e33aaSChao Song .link_mask = GENMASK(3, 0), 355b06e33aaSChao Song .links = mtl_3_in_1_sdca, 356b06e33aaSChao Song .drv_name = "sof_sdw", 357b06e33aaSChao Song .sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg", 358b06e33aaSChao Song }, 359b06e33aaSChao Song { 36018489174SYong Zhi .link_mask = BIT(0), 36118489174SYong Zhi .links = mtl_rvp, 36218489174SYong Zhi .drv_name = "sof_sdw", 36318489174SYong Zhi .sof_tplg_filename = "sof-mtl-rt711.tplg", 36418489174SYong Zhi }, 3658dcc2059SYong Zhi { 3668dcc2059SYong Zhi .link_mask = BIT(0) | BIT(2), 3678dcc2059SYong Zhi .links = rt5682_link2_max98373_link0, 3688dcc2059SYong Zhi .drv_name = "sof_sdw", 3698dcc2059SYong Zhi .sof_tplg_filename = "sof-mtl-sdw-rt5682-l2-max98373-l0.tplg", 3708dcc2059SYong Zhi }, 371a0503817SUday M Bhat { 372a0503817SUday M Bhat .link_mask = BIT(0) | BIT(2), 373a0503817SUday M Bhat .links = cs42l42_link0_max98363_link2, 374a0503817SUday M Bhat .drv_name = "sof_sdw", 375a0503817SUday M Bhat .sof_tplg_filename = "sof-mtl-sdw-cs42l42-l0-max98363-l2.tplg", 376a0503817SUday M Bhat }, 37711fe58c4SBard Liao {}, 37811fe58c4SBard Liao }; 37911fe58c4SBard Liao EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines); 380