11f24d93cSPierre-Louis Bossart // SPDX-License-Identifier: GPL-2.0 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 174e64ba3fSAmery Song static struct snd_soc_acpi_codecs max98357a_spk_codecs = { 181f24d93cSPierre-Louis Bossart .num_codecs = 1, 191f24d93cSPierre-Louis Bossart .codecs = {"MX98357A"} 201f24d93cSPierre-Louis Bossart }; 211f24d93cSPierre-Louis Bossart 224e64ba3fSAmery Song /* 234e64ba3fSAmery Song * The order of the three entries with .id = "10EC5682" matters 244e64ba3fSAmery Song * here, because DSDT tables expose an ACPI HID for the MAX98357A 254e64ba3fSAmery Song * speaker amplifier which is not populated on the board. 264e64ba3fSAmery Song */ 271f24d93cSPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_machines[] = { 281f24d93cSPierre-Louis Bossart { 294e64ba3fSAmery Song .id = "10EC5682", 301f24d93cSPierre-Louis Bossart .drv_name = "cml_rt1011_rt5682", 314e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 324e64ba3fSAmery Song .quirk_data = &rt1011_spk_codecs, 331f24d93cSPierre-Louis Bossart .sof_fw_filename = "sof-cml.ri", 341f24d93cSPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg", 351f24d93cSPierre-Louis Bossart }, 361f24d93cSPierre-Louis Bossart { 371f24d93cSPierre-Louis Bossart .id = "10EC5682", 381f24d93cSPierre-Louis Bossart .drv_name = "sof_rt5682", 394e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 404e64ba3fSAmery Song .quirk_data = &max98357a_spk_codecs, 414e64ba3fSAmery Song .sof_fw_filename = "sof-cml.ri", 424e64ba3fSAmery Song .sof_tplg_filename = "sof-cml-rt5682-max98357a.tplg", 434e64ba3fSAmery Song }, 444e64ba3fSAmery Song { 454e64ba3fSAmery Song .id = "10EC5682", 464e64ba3fSAmery Song .drv_name = "sof_rt5682", 471f24d93cSPierre-Louis Bossart .sof_fw_filename = "sof-cml.ri", 481f24d93cSPierre-Louis Bossart .sof_tplg_filename = "sof-cml-rt5682.tplg", 491f24d93cSPierre-Louis Bossart }, 504e64ba3fSAmery Song { 514e64ba3fSAmery Song .id = "DLGS7219", 524e64ba3fSAmery Song .drv_name = "cml_da7219_max98357a", 534e64ba3fSAmery Song .machine_quirk = snd_soc_acpi_codec_list, 544e64ba3fSAmery Song .quirk_data = &max98357a_spk_codecs, 554e64ba3fSAmery Song .sof_fw_filename = "sof-cml.ri", 564e64ba3fSAmery Song .sof_tplg_filename = "sof-cml-da7219-max98357a.tplg", 574e64ba3fSAmery Song }, 581f24d93cSPierre-Louis Bossart {}, 591f24d93cSPierre-Louis Bossart }; 601f24d93cSPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_machines); 611f24d93cSPierre-Louis Bossart 62004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint single_endpoint = { 63004bd416SPierre-Louis Bossart .num = 0, 64004bd416SPierre-Louis Bossart .aggregated = 0, 65004bd416SPierre-Louis Bossart .group_position = 0, 66004bd416SPierre-Louis Bossart .group_id = 0, 67db0b9efbSRander Wang }; 68db0b9efbSRander Wang 69004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 70004bd416SPierre-Louis Bossart .num = 0, 71004bd416SPierre-Louis Bossart .aggregated = 1, 72004bd416SPierre-Louis Bossart .group_position = 0, 73004bd416SPierre-Louis Bossart .group_id = 1, 74db0b9efbSRander Wang }; 75db0b9efbSRander Wang 76004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 77004bd416SPierre-Louis Bossart .num = 0, 78004bd416SPierre-Louis Bossart .aggregated = 1, 79004bd416SPierre-Louis Bossart .group_position = 1, 80004bd416SPierre-Louis Bossart .group_id = 1, 81db0b9efbSRander Wang }; 82db0b9efbSRander Wang 83004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = { 84004bd416SPierre-Louis Bossart { 85004bd416SPierre-Louis Bossart .adr = 0x000010025D071100, 86004bd416SPierre-Louis Bossart .num_endpoints = 1, 87004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 88004bd416SPierre-Louis Bossart } 89004bd416SPierre-Louis Bossart }; 90004bd416SPierre-Louis Bossart 91004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_adr[] = { 92004bd416SPierre-Louis Bossart { 93004bd416SPierre-Louis Bossart .adr = 0x000110025D130800, 94004bd416SPierre-Louis Bossart .num_endpoints = 1, 95004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 96004bd416SPierre-Louis Bossart } 97004bd416SPierre-Louis Bossart }; 98004bd416SPierre-Louis Bossart 99004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_adr[] = { 100004bd416SPierre-Louis Bossart { 101004bd416SPierre-Louis Bossart .adr = 0x000210025D130800, 102004bd416SPierre-Louis Bossart .num_endpoints = 1, 103004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 104004bd416SPierre-Louis Bossart } 105004bd416SPierre-Louis Bossart }; 106004bd416SPierre-Louis Bossart 107004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = { 108004bd416SPierre-Louis Bossart { 109004bd416SPierre-Louis Bossart .adr = 0x000110025D130800, 110004bd416SPierre-Louis Bossart .num_endpoints = 1, 111004bd416SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 112004bd416SPierre-Louis Bossart } 113004bd416SPierre-Louis Bossart }; 114004bd416SPierre-Louis Bossart 115004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = { 116004bd416SPierre-Louis Bossart { 117004bd416SPierre-Louis Bossart .adr = 0x000210025D130800, 118004bd416SPierre-Louis Bossart .num_endpoints = 1, 119004bd416SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 120004bd416SPierre-Louis Bossart } 121004bd416SPierre-Louis Bossart }; 122004bd416SPierre-Louis Bossart 123004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = { 124004bd416SPierre-Louis Bossart { 125004bd416SPierre-Louis Bossart .adr = 0x000310025D071500, 126004bd416SPierre-Louis Bossart .num_endpoints = 1, 127004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 128004bd416SPierre-Louis Bossart } 129db0b9efbSRander Wang }; 130db0b9efbSRander Wang 131db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = { 132db0b9efbSRander Wang { 133db0b9efbSRander Wang .mask = BIT(0), 134db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 135004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 136db0b9efbSRander Wang }, 137db0b9efbSRander Wang { 138db0b9efbSRander Wang .mask = BIT(1), 139004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_group1_adr), 140004bd416SPierre-Louis Bossart .adr_d = rt1308_1_group1_adr, 141db0b9efbSRander Wang }, 142db0b9efbSRander Wang { 143db0b9efbSRander Wang .mask = BIT(2), 144004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_2_group1_adr), 145004bd416SPierre-Louis Bossart .adr_d = rt1308_2_group1_adr, 146db0b9efbSRander Wang }, 147db0b9efbSRander Wang { 148db0b9efbSRander Wang .mask = BIT(3), 149db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 150004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 151db0b9efbSRander Wang }, 152db0b9efbSRander Wang {} 153db0b9efbSRander Wang }; 154db0b9efbSRander Wang 155db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = { 156db0b9efbSRander Wang { 157db0b9efbSRander Wang .mask = BIT(0), 158db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 159004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 160db0b9efbSRander Wang }, 161db0b9efbSRander Wang { 162db0b9efbSRander Wang .mask = BIT(1), 163db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt1308_1_adr), 164004bd416SPierre-Louis Bossart .adr_d = rt1308_1_adr, 165db0b9efbSRander Wang }, 166db0b9efbSRander Wang { 167db0b9efbSRander Wang .mask = BIT(3), 168db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 169004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 170db0b9efbSRander Wang }, 171db0b9efbSRander Wang {} 172db0b9efbSRander Wang }; 173db0b9efbSRander Wang 174db0b9efbSRander Wang struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = { 175db0b9efbSRander Wang { 176db0b9efbSRander Wang .link_mask = 0xF, /* 4 active links required */ 177db0b9efbSRander Wang .links = cml_3_in_1_default, 178db0b9efbSRander Wang .drv_name = "sdw_rt711_rt1308_rt715", 179db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 180db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg", 181db0b9efbSRander Wang }, 182db0b9efbSRander Wang { 183db0b9efbSRander Wang /* 184db0b9efbSRander Wang * link_mask should be 0xB, but all links are enabled by BIOS. 185db0b9efbSRander Wang * This entry will be selected if there is no rt1308 exposed 186db0b9efbSRander Wang * on link2 since it will fail to match the above entry. 187db0b9efbSRander Wang */ 188db0b9efbSRander Wang .link_mask = 0xF, 189db0b9efbSRander Wang .links = cml_3_in_1_mono_amp, 190db0b9efbSRander Wang .drv_name = "sdw_rt711_rt1308_rt715", 191db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 192db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg", 193db0b9efbSRander Wang }, 194db0b9efbSRander Wang { 195db0b9efbSRander Wang .link_mask = 0x2, /* RT700 connected on Link1 */ 196db0b9efbSRander Wang .drv_name = "sdw_rt700", 197db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 198db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt700.tplg", 199db0b9efbSRander Wang }, 200db0b9efbSRander Wang {} 201db0b9efbSRander Wang }; 202db0b9efbSRander Wang EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines); 203db0b9efbSRander Wang 2041f24d93cSPierre-Louis Bossart MODULE_LICENSE("GPL v2"); 2051f24d93cSPierre-Louis Bossart MODULE_DESCRIPTION("Intel Common ACPI Match module"); 206