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 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 83ba762e67SRander Wang static const struct snd_soc_acpi_adr_device rt700_1_adr[] = { 84ba762e67SRander Wang { 85ba762e67SRander Wang .adr = 0x000110025D070000, 86ba762e67SRander Wang .num_endpoints = 1, 87ba762e67SRander Wang .endpoints = &single_endpoint, 88ba762e67SRander Wang } 89ba762e67SRander Wang }; 90ba762e67SRander Wang 91ba762e67SRander Wang static const struct snd_soc_acpi_link_adr cml_rvp[] = { 92ba762e67SRander Wang { 93ba762e67SRander Wang .mask = BIT(1), 94ba762e67SRander Wang .num_adr = ARRAY_SIZE(rt700_1_adr), 95ba762e67SRander Wang .adr_d = rt700_1_adr, 96ba762e67SRander Wang }, 97ba762e67SRander Wang {} 98ba762e67SRander Wang }; 99ba762e67SRander Wang 100004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = { 101004bd416SPierre-Louis Bossart { 102004bd416SPierre-Louis Bossart .adr = 0x000010025D071100, 103004bd416SPierre-Louis Bossart .num_endpoints = 1, 104004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 105004bd416SPierre-Louis Bossart } 106004bd416SPierre-Louis Bossart }; 107004bd416SPierre-Louis Bossart 108004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_adr[] = { 109004bd416SPierre-Louis Bossart { 110004bd416SPierre-Louis Bossart .adr = 0x000110025D130800, 111004bd416SPierre-Louis Bossart .num_endpoints = 1, 112004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 113004bd416SPierre-Louis Bossart } 114004bd416SPierre-Louis Bossart }; 115004bd416SPierre-Louis Bossart 116004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = { 117004bd416SPierre-Louis Bossart { 118004bd416SPierre-Louis Bossart .adr = 0x000110025D130800, 119004bd416SPierre-Louis Bossart .num_endpoints = 1, 120004bd416SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 121004bd416SPierre-Louis Bossart } 122004bd416SPierre-Louis Bossart }; 123004bd416SPierre-Louis Bossart 124004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = { 125004bd416SPierre-Louis Bossart { 126004bd416SPierre-Louis Bossart .adr = 0x000210025D130800, 127004bd416SPierre-Louis Bossart .num_endpoints = 1, 128004bd416SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 129004bd416SPierre-Louis Bossart } 130004bd416SPierre-Louis Bossart }; 131004bd416SPierre-Louis Bossart 132004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = { 133004bd416SPierre-Louis Bossart { 134004bd416SPierre-Louis Bossart .adr = 0x000310025D071500, 135004bd416SPierre-Louis Bossart .num_endpoints = 1, 136004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 137004bd416SPierre-Louis Bossart } 138db0b9efbSRander Wang }; 139db0b9efbSRander Wang 140db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = { 141db0b9efbSRander Wang { 142db0b9efbSRander Wang .mask = BIT(0), 143db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 144004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 145db0b9efbSRander Wang }, 146db0b9efbSRander Wang { 147db0b9efbSRander Wang .mask = BIT(1), 148004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_group1_adr), 149004bd416SPierre-Louis Bossart .adr_d = rt1308_1_group1_adr, 150db0b9efbSRander Wang }, 151db0b9efbSRander Wang { 152db0b9efbSRander Wang .mask = BIT(2), 153004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_2_group1_adr), 154004bd416SPierre-Louis Bossart .adr_d = rt1308_2_group1_adr, 155db0b9efbSRander Wang }, 156db0b9efbSRander Wang { 157db0b9efbSRander Wang .mask = BIT(3), 158db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 159004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 160db0b9efbSRander Wang }, 161db0b9efbSRander Wang {} 162db0b9efbSRander Wang }; 163db0b9efbSRander Wang 164db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = { 165db0b9efbSRander Wang { 166db0b9efbSRander Wang .mask = BIT(0), 167db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt711_0_adr), 168004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 169db0b9efbSRander Wang }, 170db0b9efbSRander Wang { 171db0b9efbSRander Wang .mask = BIT(1), 172db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt1308_1_adr), 173004bd416SPierre-Louis Bossart .adr_d = rt1308_1_adr, 174db0b9efbSRander Wang }, 175db0b9efbSRander Wang { 176db0b9efbSRander Wang .mask = BIT(3), 177db0b9efbSRander Wang .num_adr = ARRAY_SIZE(rt715_3_adr), 178004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 179db0b9efbSRander Wang }, 180db0b9efbSRander Wang {} 181db0b9efbSRander Wang }; 182db0b9efbSRander Wang 183db0b9efbSRander Wang struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = { 184db0b9efbSRander Wang { 185db0b9efbSRander Wang .link_mask = 0xF, /* 4 active links required */ 186db0b9efbSRander Wang .links = cml_3_in_1_default, 187ba762e67SRander Wang .drv_name = "sof_sdw", 188db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 189db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg", 190db0b9efbSRander Wang }, 191db0b9efbSRander Wang { 192db0b9efbSRander Wang /* 193db0b9efbSRander Wang * link_mask should be 0xB, but all links are enabled by BIOS. 194db0b9efbSRander Wang * This entry will be selected if there is no rt1308 exposed 195db0b9efbSRander Wang * on link2 since it will fail to match the above entry. 196db0b9efbSRander Wang */ 197db0b9efbSRander Wang .link_mask = 0xF, 198db0b9efbSRander Wang .links = cml_3_in_1_mono_amp, 199ba762e67SRander Wang .drv_name = "sof_sdw", 200db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 201db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg", 202db0b9efbSRander Wang }, 203db0b9efbSRander Wang { 204db0b9efbSRander Wang .link_mask = 0x2, /* RT700 connected on Link1 */ 205ba762e67SRander Wang .links = cml_rvp, 206ba762e67SRander Wang .drv_name = "sof_sdw", 207db0b9efbSRander Wang .sof_fw_filename = "sof-cml.ri", 208db0b9efbSRander Wang .sof_tplg_filename = "sof-cml-rt700.tplg", 209db0b9efbSRander Wang }, 210db0b9efbSRander Wang {} 211db0b9efbSRander Wang }; 212db0b9efbSRander Wang EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines); 213db0b9efbSRander Wang 2141f24d93cSPierre-Louis Bossart MODULE_LICENSE("GPL v2"); 2151f24d93cSPierre-Louis Bossart MODULE_DESCRIPTION("Intel Common ACPI Match module"); 216