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 231f6645b1SYong Zhi static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = { 241f6645b1SYong Zhi .num_codecs = 2, 251f6645b1SYong Zhi .codecs = {"10EC5682", "RTL5682"}, 261f6645b1SYong Zhi }; 271f6645b1SYong Zhi 2811fe58c4SBard Liao struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = { 291f6645b1SYong Zhi { 301f6645b1SYong Zhi .comp_ids = &mtl_rt5682_rt5682s_hp, 311f6645b1SYong Zhi .drv_name = "mtl_mx98357_rt5682", 321f6645b1SYong Zhi .machine_quirk = snd_soc_acpi_codec_list, 331f6645b1SYong Zhi .quirk_data = &mtl_max98357a_amp, 341f6645b1SYong Zhi .sof_tplg_filename = "sof-mtl-max98357a-rt5682.tplg", 351f6645b1SYong Zhi }, 367e43b75dSDharageswari.R { 377e43b75dSDharageswari.R .comp_ids = &mtl_rt5682_rt5682s_hp, 387e43b75dSDharageswari.R .drv_name = "mtl_mx98360_rt5682", 397e43b75dSDharageswari.R .machine_quirk = snd_soc_acpi_codec_list, 407e43b75dSDharageswari.R .quirk_data = &mtl_max98360a_amp, 417e43b75dSDharageswari.R .sof_tplg_filename = "sof-mtl-max98360a-rt5682.tplg", 427e43b75dSDharageswari.R }, 4311fe58c4SBard Liao {}, 4411fe58c4SBard Liao }; 4511fe58c4SBard Liao EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines); 4611fe58c4SBard Liao 4718489174SYong Zhi static const struct snd_soc_acpi_endpoint single_endpoint = { 4818489174SYong Zhi .num = 0, 4918489174SYong Zhi .aggregated = 0, 5018489174SYong Zhi .group_position = 0, 5118489174SYong Zhi .group_id = 0, 5218489174SYong Zhi }; 5318489174SYong Zhi 548dcc2059SYong Zhi static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 558dcc2059SYong Zhi .num = 0, 568dcc2059SYong Zhi .aggregated = 1, 578dcc2059SYong Zhi .group_position = 0, 588dcc2059SYong Zhi .group_id = 1, 598dcc2059SYong Zhi }; 608dcc2059SYong Zhi 618dcc2059SYong Zhi static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 628dcc2059SYong Zhi .num = 0, 638dcc2059SYong Zhi .aggregated = 1, 648dcc2059SYong Zhi .group_position = 1, 658dcc2059SYong Zhi .group_id = 1, 668dcc2059SYong Zhi }; 678dcc2059SYong Zhi 68*9efa6f46SBard Liao static const struct snd_soc_acpi_endpoint rt712_endpoints[] = { 69*9efa6f46SBard Liao { 70*9efa6f46SBard Liao .num = 0, 71*9efa6f46SBard Liao .aggregated = 0, 72*9efa6f46SBard Liao .group_position = 0, 73*9efa6f46SBard Liao .group_id = 0, 74*9efa6f46SBard Liao }, 75*9efa6f46SBard Liao { 76*9efa6f46SBard Liao .num = 1, 77*9efa6f46SBard Liao .aggregated = 0, 78*9efa6f46SBard Liao .group_position = 0, 79*9efa6f46SBard Liao .group_id = 0, 80*9efa6f46SBard Liao }, 81*9efa6f46SBard Liao }; 82*9efa6f46SBard Liao 8318489174SYong Zhi static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { 8418489174SYong Zhi { 8518489174SYong Zhi .adr = 0x000030025D071101ull, 8618489174SYong Zhi .num_endpoints = 1, 8718489174SYong Zhi .endpoints = &single_endpoint, 8818489174SYong Zhi .name_prefix = "rt711" 8918489174SYong Zhi } 9018489174SYong Zhi }; 9118489174SYong Zhi 92*9efa6f46SBard Liao static const struct snd_soc_acpi_adr_device rt712_0_single_adr[] = { 93*9efa6f46SBard Liao { 94*9efa6f46SBard Liao .adr = 0x000030025D071201ull, 95*9efa6f46SBard Liao .num_endpoints = ARRAY_SIZE(rt712_endpoints), 96*9efa6f46SBard Liao .endpoints = rt712_endpoints, 97*9efa6f46SBard Liao .name_prefix = "rt712" 98*9efa6f46SBard Liao } 99*9efa6f46SBard Liao }; 100*9efa6f46SBard Liao 101*9efa6f46SBard Liao static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = { 102*9efa6f46SBard Liao { 103*9efa6f46SBard Liao .adr = 0x000330025D171201ull, 104*9efa6f46SBard Liao .num_endpoints = 1, 105*9efa6f46SBard Liao .endpoints = &single_endpoint, 106*9efa6f46SBard Liao .name_prefix = "rt712-dmic" 107*9efa6f46SBard Liao } 108*9efa6f46SBard Liao }; 109*9efa6f46SBard Liao 1108dcc2059SYong Zhi static const struct snd_soc_acpi_adr_device mx8373_0_adr[] = { 1118dcc2059SYong Zhi { 1128dcc2059SYong Zhi .adr = 0x000023019F837300ull, 1138dcc2059SYong Zhi .num_endpoints = 1, 1148dcc2059SYong Zhi .endpoints = &spk_l_endpoint, 1158dcc2059SYong Zhi .name_prefix = "Left" 1168dcc2059SYong Zhi }, 1178dcc2059SYong Zhi { 1188dcc2059SYong Zhi .adr = 0x000027019F837300ull, 1198dcc2059SYong Zhi .num_endpoints = 1, 1208dcc2059SYong Zhi .endpoints = &spk_r_endpoint, 1218dcc2059SYong Zhi .name_prefix = "Right" 1228dcc2059SYong Zhi } 1238dcc2059SYong Zhi }; 1248dcc2059SYong Zhi 1258dcc2059SYong Zhi static const struct snd_soc_acpi_adr_device rt5682_2_adr[] = { 1268dcc2059SYong Zhi { 1278dcc2059SYong Zhi .adr = 0x000221025D568200ull, 1288dcc2059SYong Zhi .num_endpoints = 1, 1298dcc2059SYong Zhi .endpoints = &single_endpoint, 1308dcc2059SYong Zhi .name_prefix = "rt5682" 1318dcc2059SYong Zhi } 1328dcc2059SYong Zhi }; 1338dcc2059SYong Zhi 134b06e33aaSChao Song static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = { 135b06e33aaSChao Song { 136b06e33aaSChao Song .adr = 0x000230025D131601ull, 137b06e33aaSChao Song .num_endpoints = 1, 138b06e33aaSChao Song .endpoints = &spk_l_endpoint, 139b06e33aaSChao Song .name_prefix = "rt1316-1" 140b06e33aaSChao Song } 141b06e33aaSChao Song }; 142b06e33aaSChao Song 143b06e33aaSChao Song static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = { 144b06e33aaSChao Song { 145b06e33aaSChao Song .adr = 0x000331025D131601ull, 146b06e33aaSChao Song .num_endpoints = 1, 147b06e33aaSChao Song .endpoints = &spk_r_endpoint, 148b06e33aaSChao Song .name_prefix = "rt1316-2" 149b06e33aaSChao Song } 150b06e33aaSChao Song }; 151b06e33aaSChao Song 152b06e33aaSChao Song static const struct snd_soc_acpi_adr_device rt714_1_adr[] = { 153b06e33aaSChao Song { 154b06e33aaSChao Song .adr = 0x000130025D071401ull, 155b06e33aaSChao Song .num_endpoints = 1, 156b06e33aaSChao Song .endpoints = &single_endpoint, 157b06e33aaSChao Song .name_prefix = "rt714" 158b06e33aaSChao Song } 159b06e33aaSChao Song }; 160b06e33aaSChao Song 161*9efa6f46SBard Liao static const struct snd_soc_acpi_link_adr mtl_712_only[] = { 162*9efa6f46SBard Liao { 163*9efa6f46SBard Liao .mask = BIT(0), 164*9efa6f46SBard Liao .num_adr = ARRAY_SIZE(rt712_0_single_adr), 165*9efa6f46SBard Liao .adr_d = rt712_0_single_adr, 166*9efa6f46SBard Liao }, 167*9efa6f46SBard Liao { 168*9efa6f46SBard Liao .mask = BIT(3), 169*9efa6f46SBard Liao .num_adr = ARRAY_SIZE(rt1712_3_single_adr), 170*9efa6f46SBard Liao .adr_d = rt1712_3_single_adr, 171*9efa6f46SBard Liao }, 172*9efa6f46SBard Liao {} 173*9efa6f46SBard Liao }; 174*9efa6f46SBard Liao 1758dcc2059SYong Zhi static const struct snd_soc_acpi_link_adr rt5682_link2_max98373_link0[] = { 1768dcc2059SYong Zhi /* Expected order: jack -> amp */ 1778dcc2059SYong Zhi { 1788dcc2059SYong Zhi .mask = BIT(2), 1798dcc2059SYong Zhi .num_adr = ARRAY_SIZE(rt5682_2_adr), 1808dcc2059SYong Zhi .adr_d = rt5682_2_adr, 1818dcc2059SYong Zhi }, 1828dcc2059SYong Zhi { 1838dcc2059SYong Zhi .mask = BIT(0), 1848dcc2059SYong Zhi .num_adr = ARRAY_SIZE(mx8373_0_adr), 1858dcc2059SYong Zhi .adr_d = mx8373_0_adr, 1868dcc2059SYong Zhi }, 1878dcc2059SYong Zhi {} 1888dcc2059SYong Zhi }; 1898dcc2059SYong Zhi 19018489174SYong Zhi static const struct snd_soc_acpi_link_adr mtl_rvp[] = { 19118489174SYong Zhi { 19218489174SYong Zhi .mask = BIT(0), 19318489174SYong Zhi .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 19418489174SYong Zhi .adr_d = rt711_sdca_0_adr, 19518489174SYong Zhi }, 19618489174SYong Zhi {} 19718489174SYong Zhi }; 19818489174SYong Zhi 199b06e33aaSChao Song static const struct snd_soc_acpi_link_adr mtl_3_in_1_sdca[] = { 200b06e33aaSChao Song { 201b06e33aaSChao Song .mask = BIT(0), 202b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 203b06e33aaSChao Song .adr_d = rt711_sdca_0_adr, 204b06e33aaSChao Song }, 205b06e33aaSChao Song { 206b06e33aaSChao Song .mask = BIT(2), 207b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 208b06e33aaSChao Song .adr_d = rt1316_2_group1_adr, 209b06e33aaSChao Song }, 210b06e33aaSChao Song { 211b06e33aaSChao Song .mask = BIT(3), 212b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt1316_3_group1_adr), 213b06e33aaSChao Song .adr_d = rt1316_3_group1_adr, 214b06e33aaSChao Song }, 215b06e33aaSChao Song { 216b06e33aaSChao Song .mask = BIT(1), 217b06e33aaSChao Song .num_adr = ARRAY_SIZE(rt714_1_adr), 218b06e33aaSChao Song .adr_d = rt714_1_adr, 219b06e33aaSChao Song }, 220b06e33aaSChao Song {} 221b06e33aaSChao Song }; 222b06e33aaSChao Song 22311fe58c4SBard Liao /* this table is used when there is no I2S codec present */ 22411fe58c4SBard Liao struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = { 22511fe58c4SBard Liao /* mockup tests need to be first */ 22611fe58c4SBard Liao { 22711fe58c4SBard Liao .link_mask = GENMASK(3, 0), 22811fe58c4SBard Liao .links = sdw_mockup_headset_2amps_mic, 22911fe58c4SBard Liao .drv_name = "sof_sdw", 23011fe58c4SBard Liao .sof_tplg_filename = "sof-mtl-rt711-rt1308-rt715.tplg", 23111fe58c4SBard Liao }, 23211fe58c4SBard Liao { 23311fe58c4SBard Liao .link_mask = BIT(0) | BIT(1) | BIT(3), 23411fe58c4SBard Liao .links = sdw_mockup_headset_1amp_mic, 23511fe58c4SBard Liao .drv_name = "sof_sdw", 23611fe58c4SBard Liao .sof_tplg_filename = "sof-mtl-rt711-rt1308-mono-rt715.tplg", 23711fe58c4SBard Liao }, 23811fe58c4SBard Liao { 23911fe58c4SBard Liao .link_mask = GENMASK(2, 0), 24011fe58c4SBard Liao .links = sdw_mockup_mic_headset_1amp, 24111fe58c4SBard Liao .drv_name = "sof_sdw", 24211fe58c4SBard Liao .sof_tplg_filename = "sof-mtl-rt715-rt711-rt1308-mono.tplg", 24311fe58c4SBard Liao }, 24418489174SYong Zhi { 245*9efa6f46SBard Liao .link_mask = BIT(3) | BIT(0), 246*9efa6f46SBard Liao .links = mtl_712_only, 247*9efa6f46SBard Liao .drv_name = "sof_sdw", 248*9efa6f46SBard Liao .sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg", 249*9efa6f46SBard Liao }, 250*9efa6f46SBard Liao { 251b06e33aaSChao Song .link_mask = GENMASK(3, 0), 252b06e33aaSChao Song .links = mtl_3_in_1_sdca, 253b06e33aaSChao Song .drv_name = "sof_sdw", 254b06e33aaSChao Song .sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg", 255b06e33aaSChao Song }, 256b06e33aaSChao Song { 25718489174SYong Zhi .link_mask = BIT(0), 25818489174SYong Zhi .links = mtl_rvp, 25918489174SYong Zhi .drv_name = "sof_sdw", 26018489174SYong Zhi .sof_tplg_filename = "sof-mtl-rt711.tplg", 26118489174SYong Zhi }, 2628dcc2059SYong Zhi { 2638dcc2059SYong Zhi .link_mask = BIT(0) | BIT(2), 2648dcc2059SYong Zhi .links = rt5682_link2_max98373_link0, 2658dcc2059SYong Zhi .drv_name = "sof_sdw", 2668dcc2059SYong Zhi .sof_tplg_filename = "sof-mtl-sdw-rt5682-l2-max98373-l0.tplg", 2678dcc2059SYong Zhi }, 26811fe58c4SBard Liao {}, 26911fe58c4SBard Liao }; 27011fe58c4SBard Liao EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines); 271