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_fw_filename = "sof-cml.ri", 441f24d93cSPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg", 451f24d93cSPierre-Louis Bossart }, 461f24d93cSPierre-Louis Bossart { 471f24d93cSPierre-Louis Bossart .id = "10EC5682", 4835249a56SBrent Lu .drv_name = "cml_rt1015_rt5682", 4935249a56SBrent Lu .machine_quirk = snd_soc_acpi_codec_list, 5035249a56SBrent Lu .quirk_data = &rt1015_spk_codecs, 5135249a56SBrent Lu .sof_fw_filename = "sof-cml.ri", 5235249a56SBrent Lu .sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg", 5335249a56SBrent Lu }, 5435249a56SBrent Lu { 5535249a56SBrent Lu .id = "10EC5682", 561f24d93cSPierre-Louis Bossart .drv_name = "sof_rt5682", 574e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 584e64ba3fSAmery Song .quirk_data = &max98357a_spk_codecs, 594e64ba3fSAmery Song .sof_fw_filename = "sof-cml.ri", 604e64ba3fSAmery Song .sof_tplg_filename = "sof-cml-rt5682-max98357a.tplg", 614e64ba3fSAmery Song }, 624e64ba3fSAmery Song { 634e64ba3fSAmery Song .id = "10EC5682", 644e64ba3fSAmery Song .drv_name = "sof_rt5682", 651f24d93cSPierre-Louis Bossart .sof_fw_filename = "sof-cml.ri", 661f24d93cSPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt5682.tplg", 671f24d93cSPierre-Louis Bossart }, 684e64ba3fSAmery Song { 694e64ba3fSAmery Song .id = "DLGS7219", 7024e46fb8SPierre-Louis Bossart .drv_name = "cml_da7219_mx98357a", 714e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 724e64ba3fSAmery Song .quirk_data = &max98357a_spk_codecs, 734e64ba3fSAmery Song .sof_fw_filename = "sof-cml.ri", 744e64ba3fSAmery Song .sof_tplg_filename = "sof-cml-da7219-max98357a.tplg", 754e64ba3fSAmery Song }, 76e1435a1fSBrent Lu { 77e1435a1fSBrent Lu .id = "DLGS7219", 78f4eeaed0SCurtis Malainey .drv_name = "cml_da7219_mx98357a", 79e1435a1fSBrent Lu .machine_quirk = snd_soc_acpi_codec_list, 80e1435a1fSBrent Lu .quirk_data = &max98390_spk_codecs, 81e1435a1fSBrent Lu .sof_fw_filename = "sof-cml.ri", 82c7721e94SMac Chiang .sof_tplg_filename = "sof-cml-da7219-max98390.tplg", 83e1435a1fSBrent Lu }, 84*8a6cc0deSPierre-Louis Bossart { 85*8a6cc0deSPierre-Louis Bossart .id = "ESSX8336", 86*8a6cc0deSPierre-Louis Bossart .drv_name = "sof-essx8336", 87*8a6cc0deSPierre-Louis Bossart .sof_fw_filename = "sof-cml.ri", 88*8a6cc0deSPierre-Louis Bossart .sof_tplg_filename = "sof-cml-es8336.tplg", 89*8a6cc0deSPierre-Louis Bossart }, 901f24d93cSPierre-Louis Bossart {}, 911f24d93cSPierre-Louis Bossart }; 921f24d93cSPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_machines); 931f24d93cSPierre-Louis Bossart 94004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint single_endpoint = { 95004bd416SPierre-Louis Bossart .num = 0, 96004bd416SPierre-Louis Bossart .aggregated = 0, 97004bd416SPierre-Louis Bossart .group_position = 0, 98004bd416SPierre-Louis Bossart .group_id = 0, 99db0b9efbSRander Wang }; 100db0b9efbSRander Wang 101004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 102004bd416SPierre-Louis Bossart .num = 0, 103004bd416SPierre-Louis Bossart .aggregated = 1, 104004bd416SPierre-Louis Bossart .group_position = 0, 105004bd416SPierre-Louis Bossart .group_id = 1, 106db0b9efbSRander Wang }; 107db0b9efbSRander Wang 108004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 109004bd416SPierre-Louis Bossart .num = 0, 110004bd416SPierre-Louis Bossart .aggregated = 1, 111004bd416SPierre-Louis Bossart .group_position = 1, 112004bd416SPierre-Louis Bossart .group_id = 1, 113db0b9efbSRander Wang }; 114db0b9efbSRander Wang 115ba762e67SRander Wang static const struct snd_soc_acpi_adr_device rt700_1_adr[] = { 116ba762e67SRander Wang { 1170c52d3e2SPierre-Louis Bossart .adr = 0x000110025D070000ull, 118ba762e67SRander Wang .num_endpoints = 1, 119ba762e67SRander Wang .endpoints = &single_endpoint, 120f9380830SPierre-Louis Bossart .name_prefix = "rt700" 121ba762e67SRander Wang } 122ba762e67SRander Wang }; 123ba762e67SRander Wang 124ba762e67SRander Wang static const struct snd_soc_acpi_link_adr cml_rvp[] = { 125ba762e67SRander Wang { 126ba762e67SRander Wang .mask = BIT(1), 127ba762e67SRander Wang .num_adr = ARRAY_SIZE(rt700_1_adr), 128ba762e67SRander Wang .adr_d = rt700_1_adr, 129ba762e67SRander Wang }, 130ba762e67SRander Wang {} 131ba762e67SRander Wang }; 132ba762e67SRander Wang 133004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = { 134004bd416SPierre-Louis Bossart { 1350c52d3e2SPierre-Louis Bossart .adr = 0x000020025D071100ull, 136004bd416SPierre-Louis Bossart .num_endpoints = 1, 137004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 138f9380830SPierre-Louis Bossart .name_prefix = "rt711" 139004bd416SPierre-Louis Bossart } 140004bd416SPierre-Louis Bossart }; 141004bd416SPierre-Louis Bossart 1426cb8bd60SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_single_adr[] = { 143004bd416SPierre-Louis Bossart { 1440c52d3e2SPierre-Louis Bossart .adr = 0x000120025D130800ull, 145004bd416SPierre-Louis Bossart .num_endpoints = 1, 146004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 147f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 148004bd416SPierre-Louis Bossart } 149004bd416SPierre-Louis Bossart }; 150004bd416SPierre-Louis Bossart 151004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = { 152004bd416SPierre-Louis Bossart { 1530c52d3e2SPierre-Louis Bossart .adr = 0x000120025D130800ull, 154004bd416SPierre-Louis Bossart .num_endpoints = 1, 155004bd416SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 156f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 157004bd416SPierre-Louis Bossart } 158004bd416SPierre-Louis Bossart }; 159004bd416SPierre-Louis Bossart 160004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = { 161004bd416SPierre-Louis Bossart { 1620c52d3e2SPierre-Louis Bossart .adr = 0x000220025D130800ull, 163004bd416SPierre-Louis Bossart .num_endpoints = 1, 164004bd416SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 165f9380830SPierre-Louis Bossart .name_prefix = "rt1308-2" 166004bd416SPierre-Louis Bossart } 167004bd416SPierre-Louis Bossart }; 168004bd416SPierre-Louis Bossart 169004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = { 170004bd416SPierre-Louis Bossart { 1710c52d3e2SPierre-Louis Bossart .adr = 0x000320025D071500ull, 172004bd416SPierre-Louis Bossart .num_endpoints = 1, 173004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 174f9380830SPierre-Louis Bossart .name_prefix = "rt715" 175004bd416SPierre-Louis Bossart } 176db0b9efbSRander Wang }; 177db0b9efbSRander Wang 17844751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { 17944751fc5SPierre-Louis Bossart { 1800c52d3e2SPierre-Louis Bossart .adr = 0x000030025D071101ull, 18144751fc5SPierre-Louis Bossart .num_endpoints = 1, 18244751fc5SPierre-Louis Bossart .endpoints = &single_endpoint, 183f9380830SPierre-Louis Bossart .name_prefix = "rt711" 18444751fc5SPierre-Louis Bossart } 18544751fc5SPierre-Louis Bossart }; 18644751fc5SPierre-Louis Bossart 18744751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = { 18844751fc5SPierre-Louis Bossart { 1890c52d3e2SPierre-Louis Bossart .adr = 0x000131025D131601ull, /* unique ID is set for some reason */ 19044751fc5SPierre-Louis Bossart .num_endpoints = 1, 19144751fc5SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 192f9380830SPierre-Louis Bossart .name_prefix = "rt1316-1" 19344751fc5SPierre-Louis Bossart } 19444751fc5SPierre-Louis Bossart }; 19544751fc5SPierre-Louis Bossart 19644751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = { 19744751fc5SPierre-Louis Bossart { 1980c52d3e2SPierre-Louis Bossart .adr = 0x000230025D131601ull, 19944751fc5SPierre-Louis Bossart .num_endpoints = 1, 20044751fc5SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 201f9380830SPierre-Louis Bossart .name_prefix = "rt1316-2" 20244751fc5SPierre-Louis Bossart } 20344751fc5SPierre-Louis Bossart }; 20444751fc5SPierre-Louis Bossart 20544751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt714_3_adr[] = { 20644751fc5SPierre-Louis Bossart { 2070c52d3e2SPierre-Louis Bossart .adr = 0x000330025D071401ull, 20844751fc5SPierre-Louis Bossart .num_endpoints = 1, 20944751fc5SPierre-Louis Bossart .endpoints = &single_endpoint, 210f9380830SPierre-Louis Bossart .name_prefix = "rt714" 21144751fc5SPierre-Louis Bossart } 21244751fc5SPierre-Louis Bossart }; 21344751fc5SPierre-Louis Bossart 214db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = { 215db0b9efbSRander Wang { 216db0b9efbSRander Wang .mask = BIT(0), 217db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 218004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 219db0b9efbSRander Wang }, 220db0b9efbSRander Wang { 221db0b9efbSRander Wang .mask = BIT(1), 222004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_group1_adr), 223004bd416SPierre-Louis Bossart .adr_d = rt1308_1_group1_adr, 224db0b9efbSRander Wang }, 225db0b9efbSRander Wang { 226db0b9efbSRander Wang .mask = BIT(2), 227004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_2_group1_adr), 228004bd416SPierre-Louis Bossart .adr_d = rt1308_2_group1_adr, 229db0b9efbSRander Wang }, 230db0b9efbSRander Wang { 231db0b9efbSRander Wang .mask = BIT(3), 232db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 233004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 234db0b9efbSRander Wang }, 235db0b9efbSRander Wang {} 236db0b9efbSRander Wang }; 237db0b9efbSRander Wang 238db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = { 239db0b9efbSRander Wang { 240db0b9efbSRander Wang .mask = BIT(0), 241db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 242004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 243db0b9efbSRander Wang }, 244db0b9efbSRander Wang { 245db0b9efbSRander Wang .mask = BIT(1), 2466cb8bd60SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_single_adr), 2476cb8bd60SPierre-Louis Bossart .adr_d = rt1308_1_single_adr, 248db0b9efbSRander Wang }, 249db0b9efbSRander Wang { 250db0b9efbSRander Wang .mask = BIT(3), 251db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 252004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 253db0b9efbSRander Wang }, 254db0b9efbSRander Wang {} 255db0b9efbSRander Wang }; 256db0b9efbSRander Wang 25744751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_link_adr cml_3_in_1_sdca[] = { 25844751fc5SPierre-Louis Bossart { 25944751fc5SPierre-Louis Bossart .mask = BIT(0), 26044751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 26144751fc5SPierre-Louis Bossart .adr_d = rt711_sdca_0_adr, 26244751fc5SPierre-Louis Bossart }, 26344751fc5SPierre-Louis Bossart { 26444751fc5SPierre-Louis Bossart .mask = BIT(1), 26544751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 26644751fc5SPierre-Louis Bossart .adr_d = rt1316_1_group1_adr, 26744751fc5SPierre-Louis Bossart }, 26844751fc5SPierre-Louis Bossart { 26944751fc5SPierre-Louis Bossart .mask = BIT(2), 27044751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 27144751fc5SPierre-Louis Bossart .adr_d = rt1316_2_group1_adr, 27244751fc5SPierre-Louis Bossart }, 27344751fc5SPierre-Louis Bossart { 27444751fc5SPierre-Louis Bossart .mask = BIT(3), 27544751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt714_3_adr), 27644751fc5SPierre-Louis Bossart .adr_d = rt714_3_adr, 27744751fc5SPierre-Louis Bossart }, 27844751fc5SPierre-Louis Bossart {} 27944751fc5SPierre-Louis Bossart }; 28044751fc5SPierre-Louis Bossart 281db0b9efbSRander Wang struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = { 282db0b9efbSRander Wang { 283db0b9efbSRander Wang .link_mask = 0xF, /* 4 active links required */ 284db0b9efbSRander Wang .links = cml_3_in_1_default, 285ba762e67SRander Wang .drv_name = "sof_sdw", 286db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 287db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg", 288db0b9efbSRander Wang }, 289db0b9efbSRander Wang { 29044751fc5SPierre-Louis Bossart .link_mask = 0xF, /* 4 active links required */ 29144751fc5SPierre-Louis Bossart .links = cml_3_in_1_sdca, 29244751fc5SPierre-Louis Bossart .drv_name = "sof_sdw", 29344751fc5SPierre-Louis Bossart .sof_fw_filename = "sof-cml.ri", 29444751fc5SPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt711-rt1316-rt714.tplg", 29544751fc5SPierre-Louis Bossart }, 29644751fc5SPierre-Louis Bossart { 297db0b9efbSRander Wang /* 298db0b9efbSRander Wang * link_mask should be 0xB, but all links are enabled by BIOS. 299db0b9efbSRander Wang * This entry will be selected if there is no rt1308 exposed 300db0b9efbSRander Wang * on link2 since it will fail to match the above entry. 301db0b9efbSRander Wang */ 302db0b9efbSRander Wang .link_mask = 0xF, 303db0b9efbSRander Wang .links = cml_3_in_1_mono_amp, 304ba762e67SRander Wang .drv_name = "sof_sdw", 305db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 306db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg", 307db0b9efbSRander Wang }, 308db0b9efbSRander Wang { 309db0b9efbSRander Wang .link_mask = 0x2, /* RT700 connected on Link1 */ 310ba762e67SRander Wang .links = cml_rvp, 311ba762e67SRander Wang .drv_name = "sof_sdw", 312db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 313db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt700.tplg", 314db0b9efbSRander Wang }, 315db0b9efbSRander Wang {} 316db0b9efbSRander Wang }; 317db0b9efbSRander Wang EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines); 318