1e149ca29SPierre-Louis Bossart // SPDX-License-Identifier: GPL-2.0-only 21f24d93cSPierre-Louis Bossart /* 31f24d93cSPierre-Louis Bossart * soc-acpi-intel-cml-match.c - tables and support for CML ACPI enumeration. 41f24d93cSPierre-Louis Bossart * 51f24d93cSPierre-Louis Bossart * Copyright (c) 2019, Intel Corporation. 61f24d93cSPierre-Louis Bossart * 71f24d93cSPierre-Louis Bossart */ 81f24d93cSPierre-Louis Bossart 91f24d93cSPierre-Louis Bossart #include <sound/soc-acpi.h> 101f24d93cSPierre-Louis Bossart #include <sound/soc-acpi-intel-match.h> 111f24d93cSPierre-Louis Bossart 129a5d96adSPierre-Louis Bossart static const struct snd_soc_acpi_codecs rt1011_spk_codecs = { 131f24d93cSPierre-Louis Bossart .num_codecs = 1, 144e64ba3fSAmery Song .codecs = {"10EC1011"} 151f24d93cSPierre-Louis Bossart }; 161f24d93cSPierre-Louis Bossart 179a5d96adSPierre-Louis Bossart static const struct snd_soc_acpi_codecs rt1015_spk_codecs = { 1835249a56SBrent Lu .num_codecs = 1, 1935249a56SBrent Lu .codecs = {"10EC1015"} 2035249a56SBrent Lu }; 2135249a56SBrent Lu 229a5d96adSPierre-Louis Bossart static const struct snd_soc_acpi_codecs max98357a_spk_codecs = { 231f24d93cSPierre-Louis Bossart .num_codecs = 1, 241f24d93cSPierre-Louis Bossart .codecs = {"MX98357A"} 251f24d93cSPierre-Louis Bossart }; 261f24d93cSPierre-Louis Bossart 279a5d96adSPierre-Louis Bossart static const struct snd_soc_acpi_codecs max98390_spk_codecs = { 28e1435a1fSBrent Lu .num_codecs = 1, 29e1435a1fSBrent Lu .codecs = {"MX98390"} 30e1435a1fSBrent Lu }; 31e1435a1fSBrent Lu 324e64ba3fSAmery Song /* 334e64ba3fSAmery Song * The order of the three entries with .id = "10EC5682" matters 344e64ba3fSAmery Song * here, because DSDT tables expose an ACPI HID for the MAX98357A 354e64ba3fSAmery Song * speaker amplifier which is not populated on the board. 364e64ba3fSAmery Song */ 371f24d93cSPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_machines[] = { 381f24d93cSPierre-Louis Bossart { 394e64ba3fSAmery Song .id = "10EC5682", 401f24d93cSPierre-Louis Bossart .drv_name = "cml_rt1011_rt5682", 414e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 424e64ba3fSAmery Song .quirk_data = &rt1011_spk_codecs, 431f24d93cSPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg", 441f24d93cSPierre-Louis Bossart }, 451f24d93cSPierre-Louis Bossart { 461f24d93cSPierre-Louis Bossart .id = "10EC5682", 4735249a56SBrent Lu .drv_name = "cml_rt1015_rt5682", 4835249a56SBrent Lu .machine_quirk = snd_soc_acpi_codec_list, 4935249a56SBrent Lu .quirk_data = &rt1015_spk_codecs, 5035249a56SBrent Lu .sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg", 5135249a56SBrent Lu }, 5235249a56SBrent Lu { 5335249a56SBrent Lu .id = "10EC5682", 541f24d93cSPierre-Louis Bossart .drv_name = "sof_rt5682", 554e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 564e64ba3fSAmery Song .quirk_data = &max98357a_spk_codecs, 574e64ba3fSAmery Song .sof_tplg_filename = "sof-cml-rt5682-max98357a.tplg", 584e64ba3fSAmery Song }, 594e64ba3fSAmery Song { 604e64ba3fSAmery Song .id = "10EC5682", 614e64ba3fSAmery Song .drv_name = "sof_rt5682", 621f24d93cSPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt5682.tplg", 631f24d93cSPierre-Louis Bossart }, 644e64ba3fSAmery Song { 654e64ba3fSAmery Song .id = "DLGS7219", 6624e46fb8SPierre-Louis Bossart .drv_name = "cml_da7219_mx98357a", 674e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 684e64ba3fSAmery Song .quirk_data = &max98357a_spk_codecs, 694e64ba3fSAmery Song .sof_tplg_filename = "sof-cml-da7219-max98357a.tplg", 704e64ba3fSAmery Song }, 71e1435a1fSBrent Lu { 72e1435a1fSBrent Lu .id = "DLGS7219", 73f4eeaed0SCurtis Malainey .drv_name = "cml_da7219_mx98357a", 74e1435a1fSBrent Lu .machine_quirk = snd_soc_acpi_codec_list, 75e1435a1fSBrent Lu .quirk_data = &max98390_spk_codecs, 76c7721e94SMac Chiang .sof_tplg_filename = "sof-cml-da7219-max98390.tplg", 77e1435a1fSBrent Lu }, 788a6cc0deSPierre-Louis Bossart { 798a6cc0deSPierre-Louis Bossart .id = "ESSX8336", 808a6cc0deSPierre-Louis Bossart .drv_name = "sof-essx8336", 81*4694b838SPierre-Louis Bossart .sof_tplg_filename = "sof-cml-es8336", /* the tplg suffix is added at run time */ 82*4694b838SPierre-Louis Bossart .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER | 83*4694b838SPierre-Louis Bossart SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | 84*4694b838SPierre-Louis Bossart SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, 858a6cc0deSPierre-Louis Bossart }, 861f24d93cSPierre-Louis Bossart {}, 871f24d93cSPierre-Louis Bossart }; 881f24d93cSPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_machines); 891f24d93cSPierre-Louis Bossart 90004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint single_endpoint = { 91004bd416SPierre-Louis Bossart .num = 0, 92004bd416SPierre-Louis Bossart .aggregated = 0, 93004bd416SPierre-Louis Bossart .group_position = 0, 94004bd416SPierre-Louis Bossart .group_id = 0, 95db0b9efbSRander Wang }; 96db0b9efbSRander Wang 97004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 98004bd416SPierre-Louis Bossart .num = 0, 99004bd416SPierre-Louis Bossart .aggregated = 1, 100004bd416SPierre-Louis Bossart .group_position = 0, 101004bd416SPierre-Louis Bossart .group_id = 1, 102db0b9efbSRander Wang }; 103db0b9efbSRander Wang 104004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 105004bd416SPierre-Louis Bossart .num = 0, 106004bd416SPierre-Louis Bossart .aggregated = 1, 107004bd416SPierre-Louis Bossart .group_position = 1, 108004bd416SPierre-Louis Bossart .group_id = 1, 109db0b9efbSRander Wang }; 110db0b9efbSRander Wang 111ba762e67SRander Wang static const struct snd_soc_acpi_adr_device rt700_1_adr[] = { 112ba762e67SRander Wang { 1130c52d3e2SPierre-Louis Bossart .adr = 0x000110025D070000ull, 114ba762e67SRander Wang .num_endpoints = 1, 115ba762e67SRander Wang .endpoints = &single_endpoint, 116f9380830SPierre-Louis Bossart .name_prefix = "rt700" 117ba762e67SRander Wang } 118ba762e67SRander Wang }; 119ba762e67SRander Wang 120ba762e67SRander Wang static const struct snd_soc_acpi_link_adr cml_rvp[] = { 121ba762e67SRander Wang { 122ba762e67SRander Wang .mask = BIT(1), 123ba762e67SRander Wang .num_adr = ARRAY_SIZE(rt700_1_adr), 124ba762e67SRander Wang .adr_d = rt700_1_adr, 125ba762e67SRander Wang }, 126ba762e67SRander Wang {} 127ba762e67SRander Wang }; 128ba762e67SRander Wang 129004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = { 130004bd416SPierre-Louis Bossart { 1310c52d3e2SPierre-Louis Bossart .adr = 0x000020025D071100ull, 132004bd416SPierre-Louis Bossart .num_endpoints = 1, 133004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 134f9380830SPierre-Louis Bossart .name_prefix = "rt711" 135004bd416SPierre-Louis Bossart } 136004bd416SPierre-Louis Bossart }; 137004bd416SPierre-Louis Bossart 1386cb8bd60SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_single_adr[] = { 139004bd416SPierre-Louis Bossart { 1400c52d3e2SPierre-Louis Bossart .adr = 0x000120025D130800ull, 141004bd416SPierre-Louis Bossart .num_endpoints = 1, 142004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 143f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 144004bd416SPierre-Louis Bossart } 145004bd416SPierre-Louis Bossart }; 146004bd416SPierre-Louis Bossart 147004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = { 148004bd416SPierre-Louis Bossart { 1490c52d3e2SPierre-Louis Bossart .adr = 0x000120025D130800ull, 150004bd416SPierre-Louis Bossart .num_endpoints = 1, 151004bd416SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 152f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 153004bd416SPierre-Louis Bossart } 154004bd416SPierre-Louis Bossart }; 155004bd416SPierre-Louis Bossart 156004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = { 157004bd416SPierre-Louis Bossart { 1580c52d3e2SPierre-Louis Bossart .adr = 0x000220025D130800ull, 159004bd416SPierre-Louis Bossart .num_endpoints = 1, 160004bd416SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 161f9380830SPierre-Louis Bossart .name_prefix = "rt1308-2" 162004bd416SPierre-Louis Bossart } 163004bd416SPierre-Louis Bossart }; 164004bd416SPierre-Louis Bossart 165004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = { 166004bd416SPierre-Louis Bossart { 1670c52d3e2SPierre-Louis Bossart .adr = 0x000320025D071500ull, 168004bd416SPierre-Louis Bossart .num_endpoints = 1, 169004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 170f9380830SPierre-Louis Bossart .name_prefix = "rt715" 171004bd416SPierre-Louis Bossart } 172db0b9efbSRander Wang }; 173db0b9efbSRander Wang 17444751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { 17544751fc5SPierre-Louis Bossart { 1760c52d3e2SPierre-Louis Bossart .adr = 0x000030025D071101ull, 17744751fc5SPierre-Louis Bossart .num_endpoints = 1, 17844751fc5SPierre-Louis Bossart .endpoints = &single_endpoint, 179f9380830SPierre-Louis Bossart .name_prefix = "rt711" 18044751fc5SPierre-Louis Bossart } 18144751fc5SPierre-Louis Bossart }; 18244751fc5SPierre-Louis Bossart 18344751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = { 18444751fc5SPierre-Louis Bossart { 1850c52d3e2SPierre-Louis Bossart .adr = 0x000131025D131601ull, /* unique ID is set for some reason */ 18644751fc5SPierre-Louis Bossart .num_endpoints = 1, 18744751fc5SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 188f9380830SPierre-Louis Bossart .name_prefix = "rt1316-1" 18944751fc5SPierre-Louis Bossart } 19044751fc5SPierre-Louis Bossart }; 19144751fc5SPierre-Louis Bossart 19244751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = { 19344751fc5SPierre-Louis Bossart { 1940c52d3e2SPierre-Louis Bossart .adr = 0x000230025D131601ull, 19544751fc5SPierre-Louis Bossart .num_endpoints = 1, 19644751fc5SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 197f9380830SPierre-Louis Bossart .name_prefix = "rt1316-2" 19844751fc5SPierre-Louis Bossart } 19944751fc5SPierre-Louis Bossart }; 20044751fc5SPierre-Louis Bossart 20144751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt714_3_adr[] = { 20244751fc5SPierre-Louis Bossart { 2030c52d3e2SPierre-Louis Bossart .adr = 0x000330025D071401ull, 20444751fc5SPierre-Louis Bossart .num_endpoints = 1, 20544751fc5SPierre-Louis Bossart .endpoints = &single_endpoint, 206f9380830SPierre-Louis Bossart .name_prefix = "rt714" 20744751fc5SPierre-Louis Bossart } 20844751fc5SPierre-Louis Bossart }; 20944751fc5SPierre-Louis Bossart 210db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = { 211db0b9efbSRander Wang { 212db0b9efbSRander Wang .mask = BIT(0), 213db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 214004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 215db0b9efbSRander Wang }, 216db0b9efbSRander Wang { 217db0b9efbSRander Wang .mask = BIT(1), 218004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_group1_adr), 219004bd416SPierre-Louis Bossart .adr_d = rt1308_1_group1_adr, 220db0b9efbSRander Wang }, 221db0b9efbSRander Wang { 222db0b9efbSRander Wang .mask = BIT(2), 223004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_2_group1_adr), 224004bd416SPierre-Louis Bossart .adr_d = rt1308_2_group1_adr, 225db0b9efbSRander Wang }, 226db0b9efbSRander Wang { 227db0b9efbSRander Wang .mask = BIT(3), 228db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 229004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 230db0b9efbSRander Wang }, 231db0b9efbSRander Wang {} 232db0b9efbSRander Wang }; 233db0b9efbSRander Wang 234db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = { 235db0b9efbSRander Wang { 236db0b9efbSRander Wang .mask = BIT(0), 237db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 238004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 239db0b9efbSRander Wang }, 240db0b9efbSRander Wang { 241db0b9efbSRander Wang .mask = BIT(1), 2426cb8bd60SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_single_adr), 2436cb8bd60SPierre-Louis Bossart .adr_d = rt1308_1_single_adr, 244db0b9efbSRander Wang }, 245db0b9efbSRander Wang { 246db0b9efbSRander Wang .mask = BIT(3), 247db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 248004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 249db0b9efbSRander Wang }, 250db0b9efbSRander Wang {} 251db0b9efbSRander Wang }; 252db0b9efbSRander Wang 25344751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_link_adr cml_3_in_1_sdca[] = { 25444751fc5SPierre-Louis Bossart { 25544751fc5SPierre-Louis Bossart .mask = BIT(0), 25644751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 25744751fc5SPierre-Louis Bossart .adr_d = rt711_sdca_0_adr, 25844751fc5SPierre-Louis Bossart }, 25944751fc5SPierre-Louis Bossart { 26044751fc5SPierre-Louis Bossart .mask = BIT(1), 26144751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 26244751fc5SPierre-Louis Bossart .adr_d = rt1316_1_group1_adr, 26344751fc5SPierre-Louis Bossart }, 26444751fc5SPierre-Louis Bossart { 26544751fc5SPierre-Louis Bossart .mask = BIT(2), 26644751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 26744751fc5SPierre-Louis Bossart .adr_d = rt1316_2_group1_adr, 26844751fc5SPierre-Louis Bossart }, 26944751fc5SPierre-Louis Bossart { 27044751fc5SPierre-Louis Bossart .mask = BIT(3), 27144751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt714_3_adr), 27244751fc5SPierre-Louis Bossart .adr_d = rt714_3_adr, 27344751fc5SPierre-Louis Bossart }, 27444751fc5SPierre-Louis Bossart {} 27544751fc5SPierre-Louis Bossart }; 27644751fc5SPierre-Louis Bossart 277db0b9efbSRander Wang struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = { 278db0b9efbSRander Wang { 279db0b9efbSRander Wang .link_mask = 0xF, /* 4 active links required */ 280db0b9efbSRander Wang .links = cml_3_in_1_default, 281ba762e67SRander Wang .drv_name = "sof_sdw", 282db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg", 283db0b9efbSRander Wang }, 284db0b9efbSRander Wang { 28544751fc5SPierre-Louis Bossart .link_mask = 0xF, /* 4 active links required */ 28644751fc5SPierre-Louis Bossart .links = cml_3_in_1_sdca, 28744751fc5SPierre-Louis Bossart .drv_name = "sof_sdw", 28844751fc5SPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt711-rt1316-rt714.tplg", 28944751fc5SPierre-Louis Bossart }, 29044751fc5SPierre-Louis Bossart { 291db0b9efbSRander Wang /* 292db0b9efbSRander Wang * link_mask should be 0xB, but all links are enabled by BIOS. 293db0b9efbSRander Wang * This entry will be selected if there is no rt1308 exposed 294db0b9efbSRander Wang * on link2 since it will fail to match the above entry. 295db0b9efbSRander Wang */ 296db0b9efbSRander Wang .link_mask = 0xF, 297db0b9efbSRander Wang .links = cml_3_in_1_mono_amp, 298ba762e67SRander Wang .drv_name = "sof_sdw", 299db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg", 300db0b9efbSRander Wang }, 301db0b9efbSRander Wang { 302db0b9efbSRander Wang .link_mask = 0x2, /* RT700 connected on Link1 */ 303ba762e67SRander Wang .links = cml_rvp, 304ba762e67SRander Wang .drv_name = "sof_sdw", 305db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt700.tplg", 306db0b9efbSRander Wang }, 307db0b9efbSRander Wang {} 308db0b9efbSRander Wang }; 309db0b9efbSRander Wang EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines); 310