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 124e64ba3fSAmery Song static struct snd_soc_acpi_codecs rt1011_spk_codecs = { 131f24d93cSPierre-Louis Bossart .num_codecs = 1, 144e64ba3fSAmery Song .codecs = {"10EC1011"} 151f24d93cSPierre-Louis Bossart }; 161f24d93cSPierre-Louis Bossart 17*35249a56SBrent Lu static struct snd_soc_acpi_codecs rt1015_spk_codecs = { 18*35249a56SBrent Lu .num_codecs = 1, 19*35249a56SBrent Lu .codecs = {"10EC1015"} 20*35249a56SBrent Lu }; 21*35249a56SBrent Lu 224e64ba3fSAmery Song static 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 27e1435a1fSBrent Lu static 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", 48*35249a56SBrent Lu .drv_name = "cml_rt1015_rt5682", 49*35249a56SBrent Lu .machine_quirk = snd_soc_acpi_codec_list, 50*35249a56SBrent Lu .quirk_data = &rt1015_spk_codecs, 51*35249a56SBrent Lu .sof_fw_filename = "sof-cml.ri", 52*35249a56SBrent Lu .sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg", 53*35249a56SBrent Lu }, 54*35249a56SBrent Lu { 55*35249a56SBrent 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", 704e64ba3fSAmery Song .drv_name = "cml_da7219_max98357a", 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", 78e1435a1fSBrent Lu .drv_name = "cml_da7219_max98357a", 79e1435a1fSBrent Lu .machine_quirk = snd_soc_acpi_codec_list, 80e1435a1fSBrent Lu .quirk_data = &max98390_spk_codecs, 81e1435a1fSBrent Lu .sof_fw_filename = "sof-cml.ri", 82e1435a1fSBrent Lu .sof_tplg_filename = "sof-cml-da7219-max98357a.tplg", 83e1435a1fSBrent Lu }, 841f24d93cSPierre-Louis Bossart {}, 851f24d93cSPierre-Louis Bossart }; 861f24d93cSPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_machines); 871f24d93cSPierre-Louis Bossart 88004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint single_endpoint = { 89004bd416SPierre-Louis Bossart .num = 0, 90004bd416SPierre-Louis Bossart .aggregated = 0, 91004bd416SPierre-Louis Bossart .group_position = 0, 92004bd416SPierre-Louis Bossart .group_id = 0, 93db0b9efbSRander Wang }; 94db0b9efbSRander Wang 95004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 96004bd416SPierre-Louis Bossart .num = 0, 97004bd416SPierre-Louis Bossart .aggregated = 1, 98004bd416SPierre-Louis Bossart .group_position = 0, 99004bd416SPierre-Louis Bossart .group_id = 1, 100db0b9efbSRander Wang }; 101db0b9efbSRander Wang 102004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 103004bd416SPierre-Louis Bossart .num = 0, 104004bd416SPierre-Louis Bossart .aggregated = 1, 105004bd416SPierre-Louis Bossart .group_position = 1, 106004bd416SPierre-Louis Bossart .group_id = 1, 107db0b9efbSRander Wang }; 108db0b9efbSRander Wang 109ba762e67SRander Wang static const struct snd_soc_acpi_adr_device rt700_1_adr[] = { 110ba762e67SRander Wang { 111ba762e67SRander Wang .adr = 0x000110025D070000, 112ba762e67SRander Wang .num_endpoints = 1, 113ba762e67SRander Wang .endpoints = &single_endpoint, 114f9380830SPierre-Louis Bossart .name_prefix = "rt700" 115ba762e67SRander Wang } 116ba762e67SRander Wang }; 117ba762e67SRander Wang 118ba762e67SRander Wang static const struct snd_soc_acpi_link_adr cml_rvp[] = { 119ba762e67SRander Wang { 120ba762e67SRander Wang .mask = BIT(1), 121ba762e67SRander Wang .num_adr = ARRAY_SIZE(rt700_1_adr), 122ba762e67SRander Wang .adr_d = rt700_1_adr, 123ba762e67SRander Wang }, 124ba762e67SRander Wang {} 125ba762e67SRander Wang }; 126ba762e67SRander Wang 127004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = { 128004bd416SPierre-Louis Bossart { 12969a785daSBard Liao .adr = 0x000020025D071100, 130004bd416SPierre-Louis Bossart .num_endpoints = 1, 131004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 132f9380830SPierre-Louis Bossart .name_prefix = "rt711" 133004bd416SPierre-Louis Bossart } 134004bd416SPierre-Louis Bossart }; 135004bd416SPierre-Louis Bossart 1366cb8bd60SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_single_adr[] = { 137004bd416SPierre-Louis Bossart { 13869a785daSBard Liao .adr = 0x000120025D130800, 139004bd416SPierre-Louis Bossart .num_endpoints = 1, 140004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 141f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 142004bd416SPierre-Louis Bossart } 143004bd416SPierre-Louis Bossart }; 144004bd416SPierre-Louis Bossart 145004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = { 146004bd416SPierre-Louis Bossart { 14769a785daSBard Liao .adr = 0x000120025D130800, 148004bd416SPierre-Louis Bossart .num_endpoints = 1, 149004bd416SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 150f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 151004bd416SPierre-Louis Bossart } 152004bd416SPierre-Louis Bossart }; 153004bd416SPierre-Louis Bossart 154004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = { 155004bd416SPierre-Louis Bossart { 15669a785daSBard Liao .adr = 0x000220025D130800, 157004bd416SPierre-Louis Bossart .num_endpoints = 1, 158004bd416SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 159f9380830SPierre-Louis Bossart .name_prefix = "rt1308-2" 160004bd416SPierre-Louis Bossart } 161004bd416SPierre-Louis Bossart }; 162004bd416SPierre-Louis Bossart 163004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = { 164004bd416SPierre-Louis Bossart { 16569a785daSBard Liao .adr = 0x000320025D071500, 166004bd416SPierre-Louis Bossart .num_endpoints = 1, 167004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 168f9380830SPierre-Louis Bossart .name_prefix = "rt715" 169004bd416SPierre-Louis Bossart } 170db0b9efbSRander Wang }; 171db0b9efbSRander Wang 17244751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { 17344751fc5SPierre-Louis Bossart { 17444751fc5SPierre-Louis Bossart .adr = 0x000030025D071101, 17544751fc5SPierre-Louis Bossart .num_endpoints = 1, 17644751fc5SPierre-Louis Bossart .endpoints = &single_endpoint, 177f9380830SPierre-Louis Bossart .name_prefix = "rt711" 17844751fc5SPierre-Louis Bossart } 17944751fc5SPierre-Louis Bossart }; 18044751fc5SPierre-Louis Bossart 18144751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = { 18244751fc5SPierre-Louis Bossart { 18344751fc5SPierre-Louis Bossart .adr = 0x000131025D131601, /* unique ID is set for some reason */ 18444751fc5SPierre-Louis Bossart .num_endpoints = 1, 18544751fc5SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 186f9380830SPierre-Louis Bossart .name_prefix = "rt1316-1" 18744751fc5SPierre-Louis Bossart } 18844751fc5SPierre-Louis Bossart }; 18944751fc5SPierre-Louis Bossart 19044751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = { 19144751fc5SPierre-Louis Bossart { 19244751fc5SPierre-Louis Bossart .adr = 0x000230025D131601, 19344751fc5SPierre-Louis Bossart .num_endpoints = 1, 19444751fc5SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 195f9380830SPierre-Louis Bossart .name_prefix = "rt1316-2" 19644751fc5SPierre-Louis Bossart } 19744751fc5SPierre-Louis Bossart }; 19844751fc5SPierre-Louis Bossart 19944751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt714_3_adr[] = { 20044751fc5SPierre-Louis Bossart { 20144751fc5SPierre-Louis Bossart .adr = 0x000330025D071401, 20244751fc5SPierre-Louis Bossart .num_endpoints = 1, 20344751fc5SPierre-Louis Bossart .endpoints = &single_endpoint, 204f9380830SPierre-Louis Bossart .name_prefix = "rt714" 20544751fc5SPierre-Louis Bossart } 20644751fc5SPierre-Louis Bossart }; 20744751fc5SPierre-Louis Bossart 208db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = { 209db0b9efbSRander Wang { 210db0b9efbSRander Wang .mask = BIT(0), 211db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 212004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 213db0b9efbSRander Wang }, 214db0b9efbSRander Wang { 215db0b9efbSRander Wang .mask = BIT(1), 216004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_group1_adr), 217004bd416SPierre-Louis Bossart .adr_d = rt1308_1_group1_adr, 218db0b9efbSRander Wang }, 219db0b9efbSRander Wang { 220db0b9efbSRander Wang .mask = BIT(2), 221004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_2_group1_adr), 222004bd416SPierre-Louis Bossart .adr_d = rt1308_2_group1_adr, 223db0b9efbSRander Wang }, 224db0b9efbSRander Wang { 225db0b9efbSRander Wang .mask = BIT(3), 226db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 227004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 228db0b9efbSRander Wang }, 229db0b9efbSRander Wang {} 230db0b9efbSRander Wang }; 231db0b9efbSRander Wang 232db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = { 233db0b9efbSRander Wang { 234db0b9efbSRander Wang .mask = BIT(0), 235db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 236004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 237db0b9efbSRander Wang }, 238db0b9efbSRander Wang { 239db0b9efbSRander Wang .mask = BIT(1), 2406cb8bd60SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_single_adr), 2416cb8bd60SPierre-Louis Bossart .adr_d = rt1308_1_single_adr, 242db0b9efbSRander Wang }, 243db0b9efbSRander Wang { 244db0b9efbSRander Wang .mask = BIT(3), 245db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 246004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 247db0b9efbSRander Wang }, 248db0b9efbSRander Wang {} 249db0b9efbSRander Wang }; 250db0b9efbSRander Wang 25144751fc5SPierre-Louis Bossart static const struct snd_soc_acpi_link_adr cml_3_in_1_sdca[] = { 25244751fc5SPierre-Louis Bossart { 25344751fc5SPierre-Louis Bossart .mask = BIT(0), 25444751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 25544751fc5SPierre-Louis Bossart .adr_d = rt711_sdca_0_adr, 25644751fc5SPierre-Louis Bossart }, 25744751fc5SPierre-Louis Bossart { 25844751fc5SPierre-Louis Bossart .mask = BIT(1), 25944751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 26044751fc5SPierre-Louis Bossart .adr_d = rt1316_1_group1_adr, 26144751fc5SPierre-Louis Bossart }, 26244751fc5SPierre-Louis Bossart { 26344751fc5SPierre-Louis Bossart .mask = BIT(2), 26444751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 26544751fc5SPierre-Louis Bossart .adr_d = rt1316_2_group1_adr, 26644751fc5SPierre-Louis Bossart }, 26744751fc5SPierre-Louis Bossart { 26844751fc5SPierre-Louis Bossart .mask = BIT(3), 26944751fc5SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt714_3_adr), 27044751fc5SPierre-Louis Bossart .adr_d = rt714_3_adr, 27144751fc5SPierre-Louis Bossart }, 27244751fc5SPierre-Louis Bossart {} 27344751fc5SPierre-Louis Bossart }; 27444751fc5SPierre-Louis Bossart 275db0b9efbSRander Wang struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = { 276db0b9efbSRander Wang { 277db0b9efbSRander Wang .link_mask = 0xF, /* 4 active links required */ 278db0b9efbSRander Wang .links = cml_3_in_1_default, 279ba762e67SRander Wang .drv_name = "sof_sdw", 280db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 281db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg", 282db0b9efbSRander Wang }, 283db0b9efbSRander Wang { 28444751fc5SPierre-Louis Bossart .link_mask = 0xF, /* 4 active links required */ 28544751fc5SPierre-Louis Bossart .links = cml_3_in_1_sdca, 28644751fc5SPierre-Louis Bossart .drv_name = "sof_sdw", 28744751fc5SPierre-Louis Bossart .sof_fw_filename = "sof-cml.ri", 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_fw_filename = "sof-cml.ri", 300db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg", 301db0b9efbSRander Wang }, 302db0b9efbSRander Wang { 303db0b9efbSRander Wang .link_mask = 0x2, /* RT700 connected on Link1 */ 304ba762e67SRander Wang .links = cml_rvp, 305ba762e67SRander Wang .drv_name = "sof_sdw", 306db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 307db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt700.tplg", 308db0b9efbSRander Wang }, 309db0b9efbSRander Wang {} 310db0b9efbSRander Wang }; 311db0b9efbSRander Wang EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines); 312db0b9efbSRander Wang 3131f24d93cSPierre-Louis Bossart MODULE_LICENSE("GPL v2"); 3141f24d93cSPierre-Louis Bossart MODULE_DESCRIPTION("Intel Common ACPI Match module"); 315