1f1bdd8d3SAjit Kumar Pandey // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) 2f1bdd8d3SAjit Kumar Pandey // 3f1bdd8d3SAjit Kumar Pandey // This file is provided under a dual BSD/GPLv2 license. When using or 4f1bdd8d3SAjit Kumar Pandey // redistributing this file, you may do so under either license. 5f1bdd8d3SAjit Kumar Pandey // 6*c3ab23a1SVenkata Prasad Potturu // Copyright(c) 2021, 2023 Advanced Micro Devices, Inc. 7f1bdd8d3SAjit Kumar Pandey // 8f1bdd8d3SAjit Kumar Pandey // Authors: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com> 9f1bdd8d3SAjit Kumar Pandey // 10f1bdd8d3SAjit Kumar Pandey 11f1bdd8d3SAjit Kumar Pandey /* ACP machine configuration module */ 12f1bdd8d3SAjit Kumar Pandey 13f1bdd8d3SAjit Kumar Pandey #include <linux/acpi.h> 14f1bdd8d3SAjit Kumar Pandey #include <linux/bits.h> 15f1bdd8d3SAjit Kumar Pandey #include <linux/dmi.h> 16f1bdd8d3SAjit Kumar Pandey #include <linux/module.h> 17f1bdd8d3SAjit Kumar Pandey #include <linux/pci.h> 18f1bdd8d3SAjit Kumar Pandey 19f1bdd8d3SAjit Kumar Pandey #include "../sof/amd/acp.h" 20f1bdd8d3SAjit Kumar Pandey #include "mach-config.h" 21f1bdd8d3SAjit Kumar Pandey 22f1bdd8d3SAjit Kumar Pandey static int acp_quirk_data; 23f1bdd8d3SAjit Kumar Pandey 24f1bdd8d3SAjit Kumar Pandey static const struct config_entry config_table[] = { 25f1bdd8d3SAjit Kumar Pandey { 26f1bdd8d3SAjit Kumar Pandey .flags = FLAG_AMD_SOF, 27f1bdd8d3SAjit Kumar Pandey .device = ACP_PCI_DEV_ID, 28f1bdd8d3SAjit Kumar Pandey .dmi_table = (const struct dmi_system_id []) { 29f1bdd8d3SAjit Kumar Pandey { 30f1bdd8d3SAjit Kumar Pandey .matches = { 31f1bdd8d3SAjit Kumar Pandey DMI_MATCH(DMI_SYS_VENDOR, "AMD"), 32f1bdd8d3SAjit Kumar Pandey DMI_MATCH(DMI_PRODUCT_NAME, "Majolica-CZN"), 33f1bdd8d3SAjit Kumar Pandey }, 34f1bdd8d3SAjit Kumar Pandey }, 35f1bdd8d3SAjit Kumar Pandey {} 36f1bdd8d3SAjit Kumar Pandey }, 37f1bdd8d3SAjit Kumar Pandey }, 38f4872013SAjit Kumar Pandey { 39f4872013SAjit Kumar Pandey .flags = FLAG_AMD_SOF, 40f4872013SAjit Kumar Pandey .device = ACP_PCI_DEV_ID, 41f4872013SAjit Kumar Pandey .dmi_table = (const struct dmi_system_id []) { 42f4872013SAjit Kumar Pandey { 43f4872013SAjit Kumar Pandey .matches = { 44f4872013SAjit Kumar Pandey DMI_MATCH(DMI_SYS_VENDOR, "Google"), 45f4872013SAjit Kumar Pandey }, 46f4872013SAjit Kumar Pandey }, 47f4872013SAjit Kumar Pandey {} 48f4872013SAjit Kumar Pandey }, 49f4872013SAjit Kumar Pandey }, 50197b1f7fSVenkata Prasad Potturu { 51*c3ab23a1SVenkata Prasad Potturu .flags = FLAG_AMD_LEGACY, 52*c3ab23a1SVenkata Prasad Potturu .device = ACP_PCI_DEV_ID, 53*c3ab23a1SVenkata Prasad Potturu .dmi_table = (const struct dmi_system_id []) { 54*c3ab23a1SVenkata Prasad Potturu { 55*c3ab23a1SVenkata Prasad Potturu .matches = { 56*c3ab23a1SVenkata Prasad Potturu DMI_MATCH(DMI_SYS_VENDOR, "Valve"), 57*c3ab23a1SVenkata Prasad Potturu DMI_MATCH(DMI_PRODUCT_NAME, "Jupiter"), 58*c3ab23a1SVenkata Prasad Potturu }, 59*c3ab23a1SVenkata Prasad Potturu }, 60*c3ab23a1SVenkata Prasad Potturu {} 61*c3ab23a1SVenkata Prasad Potturu }, 62*c3ab23a1SVenkata Prasad Potturu }, 63*c3ab23a1SVenkata Prasad Potturu { 64197b1f7fSVenkata Prasad Potturu .flags = FLAG_AMD_SOF, 65197b1f7fSVenkata Prasad Potturu .device = ACP_PCI_DEV_ID, 66197b1f7fSVenkata Prasad Potturu .dmi_table = (const struct dmi_system_id []) { 67197b1f7fSVenkata Prasad Potturu { 68197b1f7fSVenkata Prasad Potturu .matches = { 69197b1f7fSVenkata Prasad Potturu DMI_MATCH(DMI_SYS_VENDOR, "Valve"), 70197b1f7fSVenkata Prasad Potturu DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"), 71197b1f7fSVenkata Prasad Potturu DMI_MATCH(DMI_PRODUCT_FAMILY, "Sephiroth"), 72197b1f7fSVenkata Prasad Potturu }, 73197b1f7fSVenkata Prasad Potturu }, 74197b1f7fSVenkata Prasad Potturu {} 75197b1f7fSVenkata Prasad Potturu }, 76197b1f7fSVenkata Prasad Potturu }, 7754fcd9ddSMarian Postevca { 7854fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 7954fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 8054fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 8154fcd9ddSMarian Postevca { 8254fcd9ddSMarian Postevca .matches = { 8354fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 8454fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "KLVL-WXXW"), 8554fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"), 8654fcd9ddSMarian Postevca }, 8754fcd9ddSMarian Postevca }, 8854fcd9ddSMarian Postevca {} 8954fcd9ddSMarian Postevca }, 9054fcd9ddSMarian Postevca }, 9154fcd9ddSMarian Postevca { 9254fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 9354fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 9454fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 9554fcd9ddSMarian Postevca { 9654fcd9ddSMarian Postevca .matches = { 9754fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 9854fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "KLVL-WXX9"), 9954fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"), 10054fcd9ddSMarian Postevca }, 10154fcd9ddSMarian Postevca }, 10254fcd9ddSMarian Postevca {} 10354fcd9ddSMarian Postevca }, 10454fcd9ddSMarian Postevca }, 10554fcd9ddSMarian Postevca { 10654fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 10754fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 10854fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 10954fcd9ddSMarian Postevca { 11054fcd9ddSMarian Postevca .matches = { 11154fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 11254fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BOM-WXX9"), 11354fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"), 11454fcd9ddSMarian Postevca }, 11554fcd9ddSMarian Postevca }, 11654fcd9ddSMarian Postevca {} 11754fcd9ddSMarian Postevca }, 11854fcd9ddSMarian Postevca }, 11954fcd9ddSMarian Postevca { 12054fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 12154fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 12254fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 12354fcd9ddSMarian Postevca { 12454fcd9ddSMarian Postevca .matches = { 12554fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 12654fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"), 12754fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1020"), 12854fcd9ddSMarian Postevca }, 12954fcd9ddSMarian Postevca }, 13054fcd9ddSMarian Postevca {} 13154fcd9ddSMarian Postevca }, 13254fcd9ddSMarian Postevca }, 13354fcd9ddSMarian Postevca { 13454fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 13554fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 13654fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 13754fcd9ddSMarian Postevca { 13854fcd9ddSMarian Postevca .matches = { 13954fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 14054fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"), 14154fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1040"), 14254fcd9ddSMarian Postevca }, 14354fcd9ddSMarian Postevca }, 14454fcd9ddSMarian Postevca {} 14554fcd9ddSMarian Postevca }, 14654fcd9ddSMarian Postevca }, 147f1bdd8d3SAjit Kumar Pandey }; 148f1bdd8d3SAjit Kumar Pandey 149f1bdd8d3SAjit Kumar Pandey int snd_amd_acp_find_config(struct pci_dev *pci) 150f1bdd8d3SAjit Kumar Pandey { 151f1bdd8d3SAjit Kumar Pandey const struct config_entry *table = config_table; 152f1bdd8d3SAjit Kumar Pandey u16 device = pci->device; 153f1bdd8d3SAjit Kumar Pandey int i; 154f1bdd8d3SAjit Kumar Pandey 155f4872013SAjit Kumar Pandey /* Do not enable FLAGS on older platforms with Rev id zero */ 156f4872013SAjit Kumar Pandey if (!pci->revision) 157f4872013SAjit Kumar Pandey return 0; 158f4872013SAjit Kumar Pandey 159f1bdd8d3SAjit Kumar Pandey for (i = 0; i < ARRAY_SIZE(config_table); i++, table++) { 160f1bdd8d3SAjit Kumar Pandey if (table->device != device) 161f1bdd8d3SAjit Kumar Pandey continue; 162f1bdd8d3SAjit Kumar Pandey if (table->dmi_table && !dmi_check_system(table->dmi_table)) 163f1bdd8d3SAjit Kumar Pandey continue; 164f1bdd8d3SAjit Kumar Pandey acp_quirk_data = table->flags; 165f1bdd8d3SAjit Kumar Pandey return table->flags; 166f1bdd8d3SAjit Kumar Pandey } 167f1bdd8d3SAjit Kumar Pandey 168f1bdd8d3SAjit Kumar Pandey return 0; 169f1bdd8d3SAjit Kumar Pandey } 170f1bdd8d3SAjit Kumar Pandey EXPORT_SYMBOL(snd_amd_acp_find_config); 171f1bdd8d3SAjit Kumar Pandey 172f4872013SAjit Kumar Pandey static struct snd_soc_acpi_codecs amp_rt1019 = { 173f4872013SAjit Kumar Pandey .num_codecs = 1, 174f4872013SAjit Kumar Pandey .codecs = {"10EC1019"} 175f4872013SAjit Kumar Pandey }; 176f4872013SAjit Kumar Pandey 177f4872013SAjit Kumar Pandey static struct snd_soc_acpi_codecs amp_max = { 178f4872013SAjit Kumar Pandey .num_codecs = 1, 179f4872013SAjit Kumar Pandey .codecs = {"MX98360A"} 180f4872013SAjit Kumar Pandey }; 181f4872013SAjit Kumar Pandey 182ef51cddfSVenkata Prasad Potturu static struct snd_soc_acpi_codecs amp_max98388 = { 183ef51cddfSVenkata Prasad Potturu .num_codecs = 1, 184ef51cddfSVenkata Prasad Potturu .codecs = {"ADS8388"} 185ef51cddfSVenkata Prasad Potturu }; 186ef51cddfSVenkata Prasad Potturu 187f1bdd8d3SAjit Kumar Pandey struct snd_soc_acpi_mach snd_soc_acpi_amd_sof_machines[] = { 188f1bdd8d3SAjit Kumar Pandey { 189f4872013SAjit Kumar Pandey .id = "10EC5682", 190f4872013SAjit Kumar Pandey .drv_name = "rt5682-rt1019", 191f4872013SAjit Kumar Pandey .pdata = (void *)&acp_quirk_data, 192f4872013SAjit Kumar Pandey .machine_quirk = snd_soc_acpi_codec_list, 193f4872013SAjit Kumar Pandey .quirk_data = &_rt1019, 194f4872013SAjit Kumar Pandey .fw_filename = "sof-rn.ri", 1950082e329SAjit Kumar Pandey .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg", 196f4872013SAjit Kumar Pandey }, 197f4872013SAjit Kumar Pandey { 198f4872013SAjit Kumar Pandey .id = "10EC5682", 199f4872013SAjit Kumar Pandey .drv_name = "rt5682-max", 200f4872013SAjit Kumar Pandey .pdata = (void *)&acp_quirk_data, 201f4872013SAjit Kumar Pandey .machine_quirk = snd_soc_acpi_codec_list, 202f4872013SAjit Kumar Pandey .quirk_data = &_max, 203f4872013SAjit Kumar Pandey .fw_filename = "sof-rn.ri", 2040082e329SAjit Kumar Pandey .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg", 205f4872013SAjit Kumar Pandey }, 206f4872013SAjit Kumar Pandey { 207f4872013SAjit Kumar Pandey .id = "RTL5682", 208f4872013SAjit Kumar Pandey .drv_name = "rt5682s-max", 209f4872013SAjit Kumar Pandey .pdata = (void *)&acp_quirk_data, 210f4872013SAjit Kumar Pandey .machine_quirk = snd_soc_acpi_codec_list, 211f4872013SAjit Kumar Pandey .quirk_data = &_max, 212f4872013SAjit Kumar Pandey .fw_filename = "sof-rn.ri", 2130082e329SAjit Kumar Pandey .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg", 214f4872013SAjit Kumar Pandey }, 215f4872013SAjit Kumar Pandey { 216330dc183SV sujith kumar Reddy .id = "RTL5682", 217330dc183SV sujith kumar Reddy .drv_name = "rt5682s-rt1019", 218330dc183SV sujith kumar Reddy .pdata = (void *)&acp_quirk_data, 219330dc183SV sujith kumar Reddy .machine_quirk = snd_soc_acpi_codec_list, 220330dc183SV sujith kumar Reddy .quirk_data = &_rt1019, 221330dc183SV sujith kumar Reddy .fw_filename = "sof-rn.ri", 222330dc183SV sujith kumar Reddy .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg", 223330dc183SV sujith kumar Reddy }, 224330dc183SV sujith kumar Reddy { 225f1bdd8d3SAjit Kumar Pandey .id = "AMDI1019", 226f1bdd8d3SAjit Kumar Pandey .drv_name = "renoir-dsp", 227f1bdd8d3SAjit Kumar Pandey .pdata = (void *)&acp_quirk_data, 228f1bdd8d3SAjit Kumar Pandey .fw_filename = "sof-rn.ri", 229f1bdd8d3SAjit Kumar Pandey .sof_tplg_filename = "sof-acp.tplg", 230f1bdd8d3SAjit Kumar Pandey }, 231f1bdd8d3SAjit Kumar Pandey {}, 232f1bdd8d3SAjit Kumar Pandey }; 233f1bdd8d3SAjit Kumar Pandey EXPORT_SYMBOL(snd_soc_acpi_amd_sof_machines); 234f1bdd8d3SAjit Kumar Pandey 235ef51cddfSVenkata Prasad Potturu struct snd_soc_acpi_mach snd_soc_acpi_amd_vangogh_sof_machines[] = { 236ef51cddfSVenkata Prasad Potturu { 237ef51cddfSVenkata Prasad Potturu .id = "NVTN2020", 238ef51cddfSVenkata Prasad Potturu .drv_name = "nau8821-max", 239ef51cddfSVenkata Prasad Potturu .pdata = &acp_quirk_data, 240ef51cddfSVenkata Prasad Potturu .machine_quirk = snd_soc_acpi_codec_list, 241ef51cddfSVenkata Prasad Potturu .quirk_data = &_max98388, 242ef51cddfSVenkata Prasad Potturu .fw_filename = "sof-vangogh.ri", 243ef51cddfSVenkata Prasad Potturu .sof_tplg_filename = "sof-vangogh-nau8821-max.tplg", 244ef51cddfSVenkata Prasad Potturu }, 245ef51cddfSVenkata Prasad Potturu {}, 246ef51cddfSVenkata Prasad Potturu }; 247ef51cddfSVenkata Prasad Potturu EXPORT_SYMBOL(snd_soc_acpi_amd_vangogh_sof_machines); 248ef51cddfSVenkata Prasad Potturu 2490439eb4dSV sujith kumar Reddy struct snd_soc_acpi_mach snd_soc_acpi_amd_rmb_sof_machines[] = { 2500439eb4dSV sujith kumar Reddy { 2510439eb4dSV sujith kumar Reddy .id = "AMDI1019", 2520439eb4dSV sujith kumar Reddy .drv_name = "rmb-dsp", 2530439eb4dSV sujith kumar Reddy .pdata = &acp_quirk_data, 2540439eb4dSV sujith kumar Reddy .fw_filename = "sof-rmb.ri", 2550439eb4dSV sujith kumar Reddy .sof_tplg_filename = "sof-acp-rmb.tplg", 2560439eb4dSV sujith kumar Reddy }, 2570439eb4dSV sujith kumar Reddy { 2580439eb4dSV sujith kumar Reddy .id = "10508825", 2590439eb4dSV sujith kumar Reddy .drv_name = "nau8825-max", 2600439eb4dSV sujith kumar Reddy .pdata = &acp_quirk_data, 2610439eb4dSV sujith kumar Reddy .machine_quirk = snd_soc_acpi_codec_list, 2620439eb4dSV sujith kumar Reddy .quirk_data = &_max, 2630439eb4dSV sujith kumar Reddy .fw_filename = "sof-rmb.ri", 2640439eb4dSV sujith kumar Reddy .sof_tplg_filename = "sof-rmb-nau8825-max98360.tplg", 2650439eb4dSV sujith kumar Reddy }, 2664dc6737cSV sujith kumar Reddy { 2674dc6737cSV sujith kumar Reddy .id = "RTL5682", 2684dc6737cSV sujith kumar Reddy .drv_name = "rt5682s-hs-rt1019", 2694dc6737cSV sujith kumar Reddy .pdata = &acp_quirk_data, 2704dc6737cSV sujith kumar Reddy .machine_quirk = snd_soc_acpi_codec_list, 2714dc6737cSV sujith kumar Reddy .quirk_data = &_rt1019, 2724dc6737cSV sujith kumar Reddy .fw_filename = "sof-rmb.ri", 2734dc6737cSV sujith kumar Reddy .sof_tplg_filename = "sof-rmb-rt5682s-rt1019.tplg", 2744dc6737cSV sujith kumar Reddy }, 2750439eb4dSV sujith kumar Reddy {}, 2760439eb4dSV sujith kumar Reddy }; 2770439eb4dSV sujith kumar Reddy EXPORT_SYMBOL(snd_soc_acpi_amd_rmb_sof_machines); 2780439eb4dSV sujith kumar Reddy 279bb98b592SVijendar Mukunda struct snd_soc_acpi_mach snd_soc_acpi_amd_acp63_sof_machines[] = { 280bb98b592SVijendar Mukunda { 281bb98b592SVijendar Mukunda .id = "AMDI1019", 282bb98b592SVijendar Mukunda .drv_name = "acp63-dsp", 283bb98b592SVijendar Mukunda .pdata = &acp_quirk_data, 284bb98b592SVijendar Mukunda .fw_filename = "sof-acp_6_3.ri", 285bb98b592SVijendar Mukunda .sof_tplg_filename = "sof-acp_6_3.tplg", 286bb98b592SVijendar Mukunda }, 287bb98b592SVijendar Mukunda {}, 288bb98b592SVijendar Mukunda }; 289bb98b592SVijendar Mukunda EXPORT_SYMBOL(snd_soc_acpi_amd_acp63_sof_machines); 290bb98b592SVijendar Mukunda 291f1bdd8d3SAjit Kumar Pandey MODULE_LICENSE("Dual BSD/GPL"); 292