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 12*1cedb6eaSPierre-Louis Bossart static const struct snd_soc_acpi_codecs essx_83x6 = { 13*1cedb6eaSPierre-Louis Bossart .num_codecs = 3, 14*1cedb6eaSPierre-Louis Bossart .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"}, 15*1cedb6eaSPierre-Louis Bossart }; 16*1cedb6eaSPierre-Louis Bossart 179a5d96adSPierre-Louis Bossart static const struct snd_soc_acpi_codecs rt1011_spk_codecs = { 181f24d93cSPierre-Louis Bossart .num_codecs = 1, 194e64ba3fSAmery Song .codecs = {"10EC1011"} 201f24d93cSPierre-Louis Bossart }; 211f24d93cSPierre-Louis Bossart 229a5d96adSPierre-Louis Bossart static const struct snd_soc_acpi_codecs rt1015_spk_codecs = { 2335249a56SBrent Lu .num_codecs = 1, 2435249a56SBrent Lu .codecs = {"10EC1015"} 2535249a56SBrent Lu }; 2635249a56SBrent Lu 279a5d96adSPierre-Louis Bossart static const struct snd_soc_acpi_codecs max98357a_spk_codecs = { 281f24d93cSPierre-Louis Bossart .num_codecs = 1, 291f24d93cSPierre-Louis Bossart .codecs = {"MX98357A"} 301f24d93cSPierre-Louis Bossart }; 311f24d93cSPierre-Louis Bossart 329a5d96adSPierre-Louis Bossart static const struct snd_soc_acpi_codecs max98390_spk_codecs = { 33e1435a1fSBrent Lu .num_codecs = 1, 34e1435a1fSBrent Lu .codecs = {"MX98390"} 35e1435a1fSBrent Lu }; 36e1435a1fSBrent Lu 374e64ba3fSAmery Song /* 384e64ba3fSAmery Song * The order of the three entries with .id = "10EC5682" matters 394e64ba3fSAmery Song * here, because DSDT tables expose an ACPI HID for the MAX98357A 404e64ba3fSAmery Song * speaker amplifier which is not populated on the board. 414e64ba3fSAmery Song */ 421f24d93cSPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_machines[] = { 431f24d93cSPierre-Louis Bossart { 444e64ba3fSAmery Song .id = "10EC5682", 451f24d93cSPierre-Louis Bossart .drv_name = "cml_rt1011_rt5682", 464e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 474e64ba3fSAmery Song .quirk_data = &rt1011_spk_codecs, 481f24d93cSPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg", 491f24d93cSPierre-Louis Bossart }, 501f24d93cSPierre-Louis Bossart { 511f24d93cSPierre-Louis Bossart .id = "10EC5682", 5235249a56SBrent Lu .drv_name = "cml_rt1015_rt5682", 5335249a56SBrent Lu .machine_quirk = snd_soc_acpi_codec_list, 5435249a56SBrent Lu .quirk_data = &rt1015_spk_codecs, 5535249a56SBrent Lu .sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg", 5635249a56SBrent Lu }, 5735249a56SBrent Lu { 5835249a56SBrent Lu .id = "10EC5682", 591f24d93cSPierre-Louis Bossart .drv_name = "sof_rt5682", 604e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 614e64ba3fSAmery Song .quirk_data = &max98357a_spk_codecs, 624e64ba3fSAmery Song .sof_tplg_filename = "sof-cml-rt5682-max98357a.tplg", 634e64ba3fSAmery Song }, 644e64ba3fSAmery Song { 654e64ba3fSAmery Song .id = "10EC5682", 664e64ba3fSAmery Song .drv_name = "sof_rt5682", 671f24d93cSPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt5682.tplg", 681f24d93cSPierre-Louis Bossart }, 694e64ba3fSAmery Song { 704e64ba3fSAmery Song .id = "DLGS7219", 7124e46fb8SPierre-Louis Bossart .drv_name = "cml_da7219_mx98357a", 724e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 734e64ba3fSAmery Song .quirk_data = &max98357a_spk_codecs, 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, 81c7721e94SMac Chiang .sof_tplg_filename = "sof-cml-da7219-max98390.tplg", 82e1435a1fSBrent Lu }, 838a6cc0deSPierre-Louis Bossart { 84*1cedb6eaSPierre-Louis Bossart .comp_ids = &essx_83x6, 858a6cc0deSPierre-Louis Bossart .drv_name = "sof-essx8336", 864694b838SPierre-Louis Bossart .sof_tplg_filename = "sof-cml-es8336", /* the tplg suffix is added at run time */ 874694b838SPierre-Louis Bossart .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER | 884694b838SPierre-Louis Bossart SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | 894694b838SPierre-Louis Bossart SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, 908a6cc0deSPierre-Louis Bossart }, 911f24d93cSPierre-Louis Bossart {}, 921f24d93cSPierre-Louis Bossart }; 931f24d93cSPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_machines); 941f24d93cSPierre-Louis Bossart 95004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint single_endpoint = { 96004bd416SPierre-Louis Bossart .num = 0, 97004bd416SPierre-Louis Bossart .aggregated = 0, 98004bd416SPierre-Louis Bossart .group_position = 0, 99004bd416SPierre-Louis Bossart .group_id = 0, 100db0b9efbSRander Wang }; 101db0b9efbSRander Wang 102004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 103004bd416SPierre-Louis Bossart .num = 0, 104004bd416SPierre-Louis Bossart .aggregated = 1, 105004bd416SPierre-Louis Bossart .group_position = 0, 106004bd416SPierre-Louis Bossart .group_id = 1, 107db0b9efbSRander Wang }; 108db0b9efbSRander Wang 109004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 110004bd416SPierre-Louis Bossart .num = 0, 111004bd416SPierre-Louis Bossart .aggregated = 1, 112004bd416SPierre-Louis Bossart .group_position = 1, 113004bd416SPierre-Louis Bossart .group_id = 1, 114db0b9efbSRander Wang }; 115db0b9efbSRander Wang 116ba762e67SRander Wang static const struct snd_soc_acpi_adr_device rt700_1_adr[] = { 117ba762e67SRander Wang { 1180c52d3e2SPierre-Louis Bossart .adr = 0x000110025D070000ull, 119ba762e67SRander Wang .num_endpoints = 1, 120ba762e67SRander Wang .endpoints = &single_endpoint, 121f9380830SPierre-Louis Bossart .name_prefix = "rt700" 122ba762e67SRander Wang } 123ba762e67SRander Wang }; 124ba762e67SRander Wang 125ba762e67SRander Wang static const struct snd_soc_acpi_link_adr cml_rvp[] = { 126ba762e67SRander Wang { 127ba762e67SRander Wang .mask = BIT(1), 128ba762e67SRander Wang .num_adr = ARRAY_SIZE(rt700_1_adr), 129ba762e67SRander Wang .adr_d = rt700_1_adr, 130ba762e67SRander Wang }, 131ba762e67SRander Wang {} 132ba762e67SRander Wang }; 133ba762e67SRander Wang 134004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = { 135004bd416SPierre-Louis Bossart { 1360c52d3e2SPierre-Louis Bossart .adr = 0x000020025D071100ull, 137004bd416SPierre-Louis Bossart .num_endpoints = 1, 138004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 139f9380830SPierre-Louis Bossart .name_prefix = "rt711" 140004bd416SPierre-Louis Bossart } 141004bd416SPierre-Louis Bossart }; 142004bd416SPierre-Louis Bossart 1436cb8bd60SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_single_adr[] = { 144004bd416SPierre-Louis Bossart { 1450c52d3e2SPierre-Louis Bossart .adr = 0x000120025D130800ull, 146004bd416SPierre-Louis Bossart .num_endpoints = 1, 147004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 148f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 149004bd416SPierre-Louis Bossart } 150004bd416SPierre-Louis Bossart }; 151004bd416SPierre-Louis Bossart 152004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = { 153004bd416SPierre-Louis Bossart { 1540c52d3e2SPierre-Louis Bossart .adr = 0x000120025D130800ull, 155004bd416SPierre-Louis Bossart .num_endpoints = 1, 156004bd416SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 157f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 158004bd416SPierre-Louis Bossart } 159004bd416SPierre-Louis Bossart }; 160004bd416SPierre-Louis Bossart 161004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = { 162004bd416SPierre-Louis Bossart { 1630c52d3e2SPierre-Louis Bossart .adr = 0x000220025D130800ull, 164004bd416SPierre-Louis Bossart .num_endpoints = 1, 165004bd416SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 166f9380830SPierre-Louis Bossart .name_prefix = "rt1308-2" 167004bd416SPierre-Louis Bossart } 168004bd416SPierre-Louis Bossart }; 169004bd416SPierre-Louis Bossart 170004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = { 171004bd416SPierre-Louis Bossart { 1720c52d3e2SPierre-Louis Bossart .adr = 0x000320025D071500ull, 173004bd416SPierre-Louis Bossart .num_endpoints = 1, 174004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 175f9380830SPierre-Louis Bossart .name_prefix = "rt715" 176004bd416SPierre-Louis Bossart } 177db0b9efbSRander Wang }; 178db0b9efbSRander Wang 17944751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { 18044751fc5SPierre-Louis Bossart { 1810c52d3e2SPierre-Louis Bossart .adr = 0x000030025D071101ull, 18244751fc5SPierre-Louis Bossart .num_endpoints = 1, 18344751fc5SPierre-Louis Bossart .endpoints = &single_endpoint, 184f9380830SPierre-Louis Bossart .name_prefix = "rt711" 18544751fc5SPierre-Louis Bossart } 18644751fc5SPierre-Louis Bossart }; 18744751fc5SPierre-Louis Bossart 18844751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = { 18944751fc5SPierre-Louis Bossart { 1900c52d3e2SPierre-Louis Bossart .adr = 0x000131025D131601ull, /* unique ID is set for some reason */ 19144751fc5SPierre-Louis Bossart .num_endpoints = 1, 19244751fc5SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 193f9380830SPierre-Louis Bossart .name_prefix = "rt1316-1" 19444751fc5SPierre-Louis Bossart } 19544751fc5SPierre-Louis Bossart }; 19644751fc5SPierre-Louis Bossart 19744751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = { 19844751fc5SPierre-Louis Bossart { 1990c52d3e2SPierre-Louis Bossart .adr = 0x000230025D131601ull, 20044751fc5SPierre-Louis Bossart .num_endpoints = 1, 20144751fc5SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 202f9380830SPierre-Louis Bossart .name_prefix = "rt1316-2" 20344751fc5SPierre-Louis Bossart } 20444751fc5SPierre-Louis Bossart }; 20544751fc5SPierre-Louis Bossart 20644751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt714_3_adr[] = { 20744751fc5SPierre-Louis Bossart { 2080c52d3e2SPierre-Louis Bossart .adr = 0x000330025D071401ull, 20944751fc5SPierre-Louis Bossart .num_endpoints = 1, 21044751fc5SPierre-Louis Bossart .endpoints = &single_endpoint, 211f9380830SPierre-Louis Bossart .name_prefix = "rt714" 21244751fc5SPierre-Louis Bossart } 21344751fc5SPierre-Louis Bossart }; 21444751fc5SPierre-Louis Bossart 215db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = { 216db0b9efbSRander Wang { 217db0b9efbSRander Wang .mask = BIT(0), 218db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 219004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 220db0b9efbSRander Wang }, 221db0b9efbSRander Wang { 222db0b9efbSRander Wang .mask = BIT(1), 223004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_group1_adr), 224004bd416SPierre-Louis Bossart .adr_d = rt1308_1_group1_adr, 225db0b9efbSRander Wang }, 226db0b9efbSRander Wang { 227db0b9efbSRander Wang .mask = BIT(2), 228004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_2_group1_adr), 229004bd416SPierre-Louis Bossart .adr_d = rt1308_2_group1_adr, 230db0b9efbSRander Wang }, 231db0b9efbSRander Wang { 232db0b9efbSRander Wang .mask = BIT(3), 233db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 234004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 235db0b9efbSRander Wang }, 236db0b9efbSRander Wang {} 237db0b9efbSRander Wang }; 238db0b9efbSRander Wang 239db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = { 240db0b9efbSRander Wang { 241db0b9efbSRander Wang .mask = BIT(0), 242db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 243004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 244db0b9efbSRander Wang }, 245db0b9efbSRander Wang { 246db0b9efbSRander Wang .mask = BIT(1), 2476cb8bd60SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_single_adr), 2486cb8bd60SPierre-Louis Bossart .adr_d = rt1308_1_single_adr, 249db0b9efbSRander Wang }, 250db0b9efbSRander Wang { 251db0b9efbSRander Wang .mask = BIT(3), 252db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 253004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 254db0b9efbSRander Wang }, 255db0b9efbSRander Wang {} 256db0b9efbSRander Wang }; 257db0b9efbSRander Wang 25844751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_link_adr cml_3_in_1_sdca[] = { 25944751fc5SPierre-Louis Bossart { 26044751fc5SPierre-Louis Bossart .mask = BIT(0), 26144751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 26244751fc5SPierre-Louis Bossart .adr_d = rt711_sdca_0_adr, 26344751fc5SPierre-Louis Bossart }, 26444751fc5SPierre-Louis Bossart { 26544751fc5SPierre-Louis Bossart .mask = BIT(1), 26644751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 26744751fc5SPierre-Louis Bossart .adr_d = rt1316_1_group1_adr, 26844751fc5SPierre-Louis Bossart }, 26944751fc5SPierre-Louis Bossart { 27044751fc5SPierre-Louis Bossart .mask = BIT(2), 27144751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 27244751fc5SPierre-Louis Bossart .adr_d = rt1316_2_group1_adr, 27344751fc5SPierre-Louis Bossart }, 27444751fc5SPierre-Louis Bossart { 27544751fc5SPierre-Louis Bossart .mask = BIT(3), 27644751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt714_3_adr), 27744751fc5SPierre-Louis Bossart .adr_d = rt714_3_adr, 27844751fc5SPierre-Louis Bossart }, 27944751fc5SPierre-Louis Bossart {} 28044751fc5SPierre-Louis Bossart }; 28144751fc5SPierre-Louis Bossart 282db0b9efbSRander Wang struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = { 283db0b9efbSRander Wang { 284db0b9efbSRander Wang .link_mask = 0xF, /* 4 active links required */ 285db0b9efbSRander Wang .links = cml_3_in_1_default, 286ba762e67SRander Wang .drv_name = "sof_sdw", 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_tplg_filename = "sof-cml-rt711-rt1316-rt714.tplg", 29444751fc5SPierre-Louis Bossart }, 29544751fc5SPierre-Louis Bossart { 296db0b9efbSRander Wang /* 297db0b9efbSRander Wang * link_mask should be 0xB, but all links are enabled by BIOS. 298db0b9efbSRander Wang * This entry will be selected if there is no rt1308 exposed 299db0b9efbSRander Wang * on link2 since it will fail to match the above entry. 300db0b9efbSRander Wang */ 301db0b9efbSRander Wang .link_mask = 0xF, 302db0b9efbSRander Wang .links = cml_3_in_1_mono_amp, 303ba762e67SRander Wang .drv_name = "sof_sdw", 304db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg", 305db0b9efbSRander Wang }, 306db0b9efbSRander Wang { 307db0b9efbSRander Wang .link_mask = 0x2, /* RT700 connected on Link1 */ 308ba762e67SRander Wang .links = cml_rvp, 309ba762e67SRander Wang .drv_name = "sof_sdw", 310db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt700.tplg", 311db0b9efbSRander Wang }, 312db0b9efbSRander Wang {} 313db0b9efbSRander Wang }; 314db0b9efbSRander Wang EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines); 315