1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
3 // This file is provided under a dual BSD/GPLv2 license. When using or
4 // redistributing this file, you may do so under either license.
6 // Copyright(c) 2021 Advanced Micro Devices, Inc.
8 // Authors: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
11 /* ACP machine configuration module */
13 #include <linux/acpi.h>
14 #include <linux/bits.h>
15 #include <linux/dmi.h>
16 #include <linux/module.h>
17 #include <linux/pci.h>
19 #include "../sof/amd/acp.h"
20 #include "mach-config.h"
22 static int acp_quirk_data;
24 static const struct config_entry config_table[] = {
26 .flags = FLAG_AMD_SOF,
27 .device = ACP_PCI_DEV_ID,
28 .dmi_table = (const struct dmi_system_id []) {
31 DMI_MATCH(DMI_SYS_VENDOR, "AMD"),
32 DMI_MATCH(DMI_PRODUCT_NAME, "Majolica-CZN"),
39 .flags = FLAG_AMD_SOF,
40 .device = ACP_PCI_DEV_ID,
41 .dmi_table = (const struct dmi_system_id []) {
44 DMI_MATCH(DMI_SYS_VENDOR, "Google"),
51 .flags = FLAG_AMD_SOF,
52 .device = ACP_PCI_DEV_ID,
53 .dmi_table = (const struct dmi_system_id []) {
56 DMI_MATCH(DMI_SYS_VENDOR, "Valve"),
57 DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"),
58 DMI_MATCH(DMI_PRODUCT_FAMILY, "Sephiroth"),
65 .flags = FLAG_AMD_LEGACY,
66 .device = ACP_PCI_DEV_ID,
67 .dmi_table = (const struct dmi_system_id []) {
70 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),
71 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "KLVL-WXXW"),
72 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"),
79 .flags = FLAG_AMD_LEGACY,
80 .device = ACP_PCI_DEV_ID,
81 .dmi_table = (const struct dmi_system_id []) {
84 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),
85 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "KLVL-WXX9"),
86 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"),
93 .flags = FLAG_AMD_LEGACY,
94 .device = ACP_PCI_DEV_ID,
95 .dmi_table = (const struct dmi_system_id []) {
98 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),
99 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BOM-WXX9"),
100 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"),
107 .flags = FLAG_AMD_LEGACY,
108 .device = ACP_PCI_DEV_ID,
109 .dmi_table = (const struct dmi_system_id []) {
112 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),
113 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"),
114 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"),
121 .flags = FLAG_AMD_LEGACY,
122 .device = ACP_PCI_DEV_ID,
123 .dmi_table = (const struct dmi_system_id []) {
126 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),
127 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"),
128 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1020"),
135 .flags = FLAG_AMD_LEGACY,
136 .device = ACP_PCI_DEV_ID,
137 .dmi_table = (const struct dmi_system_id []) {
140 DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),
141 DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"),
142 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1040"),
150 int snd_amd_acp_find_config(struct pci_dev *pci)
152 const struct config_entry *table = config_table;
153 u16 device = pci->device;
156 /* Do not enable FLAGS on older platforms with Rev id zero */
160 for (i = 0; i < ARRAY_SIZE(config_table); i++, table++) {
161 if (table->device != device)
163 if (table->dmi_table && !dmi_check_system(table->dmi_table))
165 acp_quirk_data = table->flags;
171 EXPORT_SYMBOL(snd_amd_acp_find_config);
173 static struct snd_soc_acpi_codecs amp_rt1019 = {
175 .codecs = {"10EC1019"}
178 static struct snd_soc_acpi_codecs amp_max = {
180 .codecs = {"MX98360A"}
183 static struct snd_soc_acpi_codecs amp_max98388 = {
185 .codecs = {"ADS8388"}
188 struct snd_soc_acpi_mach snd_soc_acpi_amd_sof_machines[] = {
191 .drv_name = "rt5682-rt1019",
192 .pdata = (void *)&acp_quirk_data,
193 .machine_quirk = snd_soc_acpi_codec_list,
194 .quirk_data = &_rt1019,
195 .fw_filename = "sof-rn.ri",
196 .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg",
200 .drv_name = "rt5682-max",
201 .pdata = (void *)&acp_quirk_data,
202 .machine_quirk = snd_soc_acpi_codec_list,
203 .quirk_data = &_max,
204 .fw_filename = "sof-rn.ri",
205 .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg",
209 .drv_name = "rt5682s-max",
210 .pdata = (void *)&acp_quirk_data,
211 .machine_quirk = snd_soc_acpi_codec_list,
212 .quirk_data = &_max,
213 .fw_filename = "sof-rn.ri",
214 .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg",
218 .drv_name = "rt5682s-rt1019",
219 .pdata = (void *)&acp_quirk_data,
220 .machine_quirk = snd_soc_acpi_codec_list,
221 .quirk_data = &_rt1019,
222 .fw_filename = "sof-rn.ri",
223 .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg",
227 .drv_name = "renoir-dsp",
228 .pdata = (void *)&acp_quirk_data,
229 .fw_filename = "sof-rn.ri",
230 .sof_tplg_filename = "sof-acp.tplg",
234 EXPORT_SYMBOL(snd_soc_acpi_amd_sof_machines);
236 struct snd_soc_acpi_mach snd_soc_acpi_amd_vangogh_sof_machines[] = {
239 .drv_name = "nau8821-max",
240 .pdata = &acp_quirk_data,
241 .machine_quirk = snd_soc_acpi_codec_list,
242 .quirk_data = &_max98388,
243 .fw_filename = "sof-vangogh.ri",
244 .sof_tplg_filename = "sof-vangogh-nau8821-max.tplg",
248 EXPORT_SYMBOL(snd_soc_acpi_amd_vangogh_sof_machines);
250 struct snd_soc_acpi_mach snd_soc_acpi_amd_rmb_sof_machines[] = {
253 .drv_name = "rmb-dsp",
254 .pdata = &acp_quirk_data,
255 .fw_filename = "sof-rmb.ri",
256 .sof_tplg_filename = "sof-acp-rmb.tplg",
260 .drv_name = "nau8825-max",
261 .pdata = &acp_quirk_data,
262 .machine_quirk = snd_soc_acpi_codec_list,
263 .quirk_data = &_max,
264 .fw_filename = "sof-rmb.ri",
265 .sof_tplg_filename = "sof-rmb-nau8825-max98360.tplg",
269 .drv_name = "rt5682s-hs-rt1019",
270 .pdata = &acp_quirk_data,
271 .machine_quirk = snd_soc_acpi_codec_list,
272 .quirk_data = &_rt1019,
273 .fw_filename = "sof-rmb.ri",
274 .sof_tplg_filename = "sof-rmb-rt5682s-rt1019.tplg",
278 EXPORT_SYMBOL(snd_soc_acpi_amd_rmb_sof_machines);
280 struct snd_soc_acpi_mach snd_soc_acpi_amd_acp63_sof_machines[] = {
283 .drv_name = "acp63-dsp",
284 .pdata = &acp_quirk_data,
285 .fw_filename = "sof-acp_6_3.ri",
286 .sof_tplg_filename = "sof-acp_6_3.tplg",
290 EXPORT_SYMBOL(snd_soc_acpi_amd_acp63_sof_machines);
292 MODULE_LICENSE("Dual BSD/GPL");