xref: /linux/sound/soc/amd/acp-config.c (revision b5338b1b901e41bd7cead66a0b3a796e9fa95684)
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 = &amp_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 = &amp_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 = &amp_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 = &amp_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 = &amp_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 = &amp_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 = &amp_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