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 // 6f1bdd8d3SAjit Kumar Pandey // Copyright(c) 2021 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 { 51197b1f7fSVenkata Prasad Potturu .flags = FLAG_AMD_SOF, 52197b1f7fSVenkata Prasad Potturu .device = ACP_PCI_DEV_ID, 53197b1f7fSVenkata Prasad Potturu .dmi_table = (const struct dmi_system_id []) { 54197b1f7fSVenkata Prasad Potturu { 55197b1f7fSVenkata Prasad Potturu .matches = { 56197b1f7fSVenkata Prasad Potturu DMI_MATCH(DMI_SYS_VENDOR, "Valve"), 57197b1f7fSVenkata Prasad Potturu DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"), 58197b1f7fSVenkata Prasad Potturu DMI_MATCH(DMI_PRODUCT_FAMILY, "Sephiroth"), 59197b1f7fSVenkata Prasad Potturu }, 60197b1f7fSVenkata Prasad Potturu }, 61197b1f7fSVenkata Prasad Potturu {} 62197b1f7fSVenkata Prasad Potturu }, 63197b1f7fSVenkata Prasad Potturu }, 6454fcd9ddSMarian Postevca { 6554fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 6654fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 6754fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 6854fcd9ddSMarian Postevca { 6954fcd9ddSMarian Postevca .matches = { 7054fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 7154fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "KLVL-WXXW"), 7254fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"), 7354fcd9ddSMarian Postevca }, 7454fcd9ddSMarian Postevca }, 7554fcd9ddSMarian Postevca {} 7654fcd9ddSMarian Postevca }, 7754fcd9ddSMarian Postevca }, 7854fcd9ddSMarian Postevca { 7954fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 8054fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 8154fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 8254fcd9ddSMarian Postevca { 8354fcd9ddSMarian Postevca .matches = { 8454fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 8554fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "KLVL-WXX9"), 8654fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"), 8754fcd9ddSMarian Postevca }, 8854fcd9ddSMarian Postevca }, 8954fcd9ddSMarian Postevca {} 9054fcd9ddSMarian Postevca }, 9154fcd9ddSMarian Postevca }, 9254fcd9ddSMarian Postevca { 9354fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 9454fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 9554fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 9654fcd9ddSMarian Postevca { 9754fcd9ddSMarian Postevca .matches = { 9854fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 9954fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BOM-WXX9"), 10054fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"), 10154fcd9ddSMarian Postevca }, 10254fcd9ddSMarian Postevca }, 10354fcd9ddSMarian Postevca {} 10454fcd9ddSMarian Postevca }, 10554fcd9ddSMarian Postevca }, 10654fcd9ddSMarian Postevca { 10754fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 10854fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 10954fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 11054fcd9ddSMarian Postevca { 11154fcd9ddSMarian Postevca .matches = { 11254fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 11354fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"), 114*b5338b1bSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"), 115*b5338b1bSMarian Postevca }, 116*b5338b1bSMarian Postevca }, 117*b5338b1bSMarian Postevca {} 118*b5338b1bSMarian Postevca }, 119*b5338b1bSMarian Postevca }, 120*b5338b1bSMarian Postevca { 121*b5338b1bSMarian Postevca .flags = FLAG_AMD_LEGACY, 122*b5338b1bSMarian Postevca .device = ACP_PCI_DEV_ID, 123*b5338b1bSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 124*b5338b1bSMarian Postevca { 125*b5338b1bSMarian Postevca .matches = { 126*b5338b1bSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 127*b5338b1bSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"), 12854fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1020"), 12954fcd9ddSMarian Postevca }, 13054fcd9ddSMarian Postevca }, 13154fcd9ddSMarian Postevca {} 13254fcd9ddSMarian Postevca }, 13354fcd9ddSMarian Postevca }, 13454fcd9ddSMarian Postevca { 13554fcd9ddSMarian Postevca .flags = FLAG_AMD_LEGACY, 13654fcd9ddSMarian Postevca .device = ACP_PCI_DEV_ID, 13754fcd9ddSMarian Postevca .dmi_table = (const struct dmi_system_id []) { 13854fcd9ddSMarian Postevca { 13954fcd9ddSMarian Postevca .matches = { 14054fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"), 14154fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"), 14254fcd9ddSMarian Postevca DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1040"), 14354fcd9ddSMarian Postevca }, 14454fcd9ddSMarian Postevca }, 14554fcd9ddSMarian Postevca {} 14654fcd9ddSMarian Postevca }, 14754fcd9ddSMarian Postevca }, 148f1bdd8d3SAjit Kumar Pandey }; 149f1bdd8d3SAjit Kumar Pandey 150f1bdd8d3SAjit Kumar Pandey int snd_amd_acp_find_config(struct pci_dev *pci) 151f1bdd8d3SAjit Kumar Pandey { 152f1bdd8d3SAjit Kumar Pandey const struct config_entry *table = config_table; 153f1bdd8d3SAjit Kumar Pandey u16 device = pci->device; 154f1bdd8d3SAjit Kumar Pandey int i; 155f1bdd8d3SAjit Kumar Pandey 156f4872013SAjit Kumar Pandey /* Do not enable FLAGS on older platforms with Rev id zero */ 157f4872013SAjit Kumar Pandey if (!pci->revision) 158f4872013SAjit Kumar Pandey return 0; 159f4872013SAjit Kumar Pandey 160f1bdd8d3SAjit Kumar Pandey for (i = 0; i < ARRAY_SIZE(config_table); i++, table++) { 161f1bdd8d3SAjit Kumar Pandey if (table->device != device) 162f1bdd8d3SAjit Kumar Pandey continue; 163f1bdd8d3SAjit Kumar Pandey if (table->dmi_table && !dmi_check_system(table->dmi_table)) 164f1bdd8d3SAjit Kumar Pandey continue; 165f1bdd8d3SAjit Kumar Pandey acp_quirk_data = table->flags; 166f1bdd8d3SAjit Kumar Pandey return table->flags; 167f1bdd8d3SAjit Kumar Pandey } 168f1bdd8d3SAjit Kumar Pandey 169f1bdd8d3SAjit Kumar Pandey return 0; 170f1bdd8d3SAjit Kumar Pandey } 171f1bdd8d3SAjit Kumar Pandey EXPORT_SYMBOL(snd_amd_acp_find_config); 172f1bdd8d3SAjit Kumar Pandey 173f4872013SAjit Kumar Pandey static struct snd_soc_acpi_codecs amp_rt1019 = { 174f4872013SAjit Kumar Pandey .num_codecs = 1, 175f4872013SAjit Kumar Pandey .codecs = {"10EC1019"} 176f4872013SAjit Kumar Pandey }; 177f4872013SAjit Kumar Pandey 178f4872013SAjit Kumar Pandey static struct snd_soc_acpi_codecs amp_max = { 179f4872013SAjit Kumar Pandey .num_codecs = 1, 180f4872013SAjit Kumar Pandey .codecs = {"MX98360A"} 181f4872013SAjit Kumar Pandey }; 182f4872013SAjit Kumar Pandey 183ef51cddfSVenkata Prasad Potturu static struct snd_soc_acpi_codecs amp_max98388 = { 184ef51cddfSVenkata Prasad Potturu .num_codecs = 1, 185ef51cddfSVenkata Prasad Potturu .codecs = {"ADS8388"} 186ef51cddfSVenkata Prasad Potturu }; 187ef51cddfSVenkata Prasad Potturu 188f1bdd8d3SAjit Kumar Pandey struct snd_soc_acpi_mach snd_soc_acpi_amd_sof_machines[] = { 189f1bdd8d3SAjit Kumar Pandey { 190f4872013SAjit Kumar Pandey .id = "10EC5682", 191f4872013SAjit Kumar Pandey .drv_name = "rt5682-rt1019", 192f4872013SAjit Kumar Pandey .pdata = (void *)&acp_quirk_data, 193f4872013SAjit Kumar Pandey .machine_quirk = snd_soc_acpi_codec_list, 194f4872013SAjit Kumar Pandey .quirk_data = &_rt1019, 195f4872013SAjit Kumar Pandey .fw_filename = "sof-rn.ri", 1960082e329SAjit Kumar Pandey .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg", 197f4872013SAjit Kumar Pandey }, 198f4872013SAjit Kumar Pandey { 199f4872013SAjit Kumar Pandey .id = "10EC5682", 200f4872013SAjit Kumar Pandey .drv_name = "rt5682-max", 201f4872013SAjit Kumar Pandey .pdata = (void *)&acp_quirk_data, 202f4872013SAjit Kumar Pandey .machine_quirk = snd_soc_acpi_codec_list, 203f4872013SAjit Kumar Pandey .quirk_data = &_max, 204f4872013SAjit Kumar Pandey .fw_filename = "sof-rn.ri", 2050082e329SAjit Kumar Pandey .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg", 206f4872013SAjit Kumar Pandey }, 207f4872013SAjit Kumar Pandey { 208f4872013SAjit Kumar Pandey .id = "RTL5682", 209f4872013SAjit Kumar Pandey .drv_name = "rt5682s-max", 210f4872013SAjit Kumar Pandey .pdata = (void *)&acp_quirk_data, 211f4872013SAjit Kumar Pandey .machine_quirk = snd_soc_acpi_codec_list, 212f4872013SAjit Kumar Pandey .quirk_data = &_max, 213f4872013SAjit Kumar Pandey .fw_filename = "sof-rn.ri", 2140082e329SAjit Kumar Pandey .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg", 215f4872013SAjit Kumar Pandey }, 216f4872013SAjit Kumar Pandey { 217330dc183SV sujith kumar Reddy .id = "RTL5682", 218330dc183SV sujith kumar Reddy .drv_name = "rt5682s-rt1019", 219330dc183SV sujith kumar Reddy .pdata = (void *)&acp_quirk_data, 220330dc183SV sujith kumar Reddy .machine_quirk = snd_soc_acpi_codec_list, 221330dc183SV sujith kumar Reddy .quirk_data = &_rt1019, 222330dc183SV sujith kumar Reddy .fw_filename = "sof-rn.ri", 223330dc183SV sujith kumar Reddy .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg", 224330dc183SV sujith kumar Reddy }, 225330dc183SV sujith kumar Reddy { 226f1bdd8d3SAjit Kumar Pandey .id = "AMDI1019", 227f1bdd8d3SAjit Kumar Pandey .drv_name = "renoir-dsp", 228f1bdd8d3SAjit Kumar Pandey .pdata = (void *)&acp_quirk_data, 229f1bdd8d3SAjit Kumar Pandey .fw_filename = "sof-rn.ri", 230f1bdd8d3SAjit Kumar Pandey .sof_tplg_filename = "sof-acp.tplg", 231f1bdd8d3SAjit Kumar Pandey }, 232f1bdd8d3SAjit Kumar Pandey {}, 233f1bdd8d3SAjit Kumar Pandey }; 234f1bdd8d3SAjit Kumar Pandey EXPORT_SYMBOL(snd_soc_acpi_amd_sof_machines); 235f1bdd8d3SAjit Kumar Pandey 236ef51cddfSVenkata Prasad Potturu struct snd_soc_acpi_mach snd_soc_acpi_amd_vangogh_sof_machines[] = { 237ef51cddfSVenkata Prasad Potturu { 238ef51cddfSVenkata Prasad Potturu .id = "NVTN2020", 239ef51cddfSVenkata Prasad Potturu .drv_name = "nau8821-max", 240ef51cddfSVenkata Prasad Potturu .pdata = &acp_quirk_data, 241ef51cddfSVenkata Prasad Potturu .machine_quirk = snd_soc_acpi_codec_list, 242ef51cddfSVenkata Prasad Potturu .quirk_data = &_max98388, 243ef51cddfSVenkata Prasad Potturu .fw_filename = "sof-vangogh.ri", 244ef51cddfSVenkata Prasad Potturu .sof_tplg_filename = "sof-vangogh-nau8821-max.tplg", 245ef51cddfSVenkata Prasad Potturu }, 246ef51cddfSVenkata Prasad Potturu {}, 247ef51cddfSVenkata Prasad Potturu }; 248ef51cddfSVenkata Prasad Potturu EXPORT_SYMBOL(snd_soc_acpi_amd_vangogh_sof_machines); 249ef51cddfSVenkata Prasad Potturu 2500439eb4dSV sujith kumar Reddy struct snd_soc_acpi_mach snd_soc_acpi_amd_rmb_sof_machines[] = { 2510439eb4dSV sujith kumar Reddy { 2520439eb4dSV sujith kumar Reddy .id = "AMDI1019", 2530439eb4dSV sujith kumar Reddy .drv_name = "rmb-dsp", 2540439eb4dSV sujith kumar Reddy .pdata = &acp_quirk_data, 2550439eb4dSV sujith kumar Reddy .fw_filename = "sof-rmb.ri", 2560439eb4dSV sujith kumar Reddy .sof_tplg_filename = "sof-acp-rmb.tplg", 2570439eb4dSV sujith kumar Reddy }, 2580439eb4dSV sujith kumar Reddy { 2590439eb4dSV sujith kumar Reddy .id = "10508825", 2600439eb4dSV sujith kumar Reddy .drv_name = "nau8825-max", 2610439eb4dSV sujith kumar Reddy .pdata = &acp_quirk_data, 2620439eb4dSV sujith kumar Reddy .machine_quirk = snd_soc_acpi_codec_list, 2630439eb4dSV sujith kumar Reddy .quirk_data = &_max, 2640439eb4dSV sujith kumar Reddy .fw_filename = "sof-rmb.ri", 2650439eb4dSV sujith kumar Reddy .sof_tplg_filename = "sof-rmb-nau8825-max98360.tplg", 2660439eb4dSV sujith kumar Reddy }, 2674dc6737cSV sujith kumar Reddy { 2684dc6737cSV sujith kumar Reddy .id = "RTL5682", 2694dc6737cSV sujith kumar Reddy .drv_name = "rt5682s-hs-rt1019", 2704dc6737cSV sujith kumar Reddy .pdata = &acp_quirk_data, 2714dc6737cSV sujith kumar Reddy .machine_quirk = snd_soc_acpi_codec_list, 2724dc6737cSV sujith kumar Reddy .quirk_data = &_rt1019, 2734dc6737cSV sujith kumar Reddy .fw_filename = "sof-rmb.ri", 2744dc6737cSV sujith kumar Reddy .sof_tplg_filename = "sof-rmb-rt5682s-rt1019.tplg", 2754dc6737cSV sujith kumar Reddy }, 2760439eb4dSV sujith kumar Reddy {}, 2770439eb4dSV sujith kumar Reddy }; 2780439eb4dSV sujith kumar Reddy EXPORT_SYMBOL(snd_soc_acpi_amd_rmb_sof_machines); 2790439eb4dSV sujith kumar Reddy 280bb98b592SVijendar Mukunda struct snd_soc_acpi_mach snd_soc_acpi_amd_acp63_sof_machines[] = { 281bb98b592SVijendar Mukunda { 282bb98b592SVijendar Mukunda .id = "AMDI1019", 283bb98b592SVijendar Mukunda .drv_name = "acp63-dsp", 284bb98b592SVijendar Mukunda .pdata = &acp_quirk_data, 285bb98b592SVijendar Mukunda .fw_filename = "sof-acp_6_3.ri", 286bb98b592SVijendar Mukunda .sof_tplg_filename = "sof-acp_6_3.tplg", 287bb98b592SVijendar Mukunda }, 288bb98b592SVijendar Mukunda {}, 289bb98b592SVijendar Mukunda }; 290bb98b592SVijendar Mukunda EXPORT_SYMBOL(snd_soc_acpi_amd_acp63_sof_machines); 291bb98b592SVijendar Mukunda 292f1bdd8d3SAjit Kumar Pandey MODULE_LICENSE("Dual BSD/GPL"); 293