1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
2 //
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.
5 //
6 // Copyright(c) 2021 Advanced Micro Devices, Inc.
7 //
8 // Authors: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
9 //
10
11 /* ACP machine configuration module */
12
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>
18
19 #include "../sof/amd/acp.h"
20 #include "mach-config.h"
21
22 static int acp_quirk_data;
23
24 static const struct config_entry config_table[] = {
25 {
26 .flags = FLAG_AMD_SOF,
27 .device = ACP_PCI_DEV_ID,
28 .dmi_table = (const struct dmi_system_id []) {
29 {
30 .matches = {
31 DMI_MATCH(DMI_SYS_VENDOR, "AMD"),
32 DMI_MATCH(DMI_PRODUCT_NAME, "Majolica-CZN"),
33 },
34 },
35 {}
36 },
37 },
38 {
39 .flags = FLAG_AMD_SOF,
40 .device = ACP_PCI_DEV_ID,
41 .dmi_table = (const struct dmi_system_id []) {
42 {
43 .matches = {
44 DMI_MATCH(DMI_SYS_VENDOR, "Google"),
45 },
46 },
47 {}
48 },
49 },
50 {
51 .flags = FLAG_AMD_SOF,
52 .device = ACP_PCI_DEV_ID,
53 .dmi_table = (const struct dmi_system_id []) {
54 {
55 .matches = {
56 DMI_MATCH(DMI_SYS_VENDOR, "Valve"),
57 DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"),
58 DMI_MATCH(DMI_PRODUCT_FAMILY, "Sephiroth"),
59 },
60 },
61 {}
62 },
63 },
64 };
65
snd_amd_acp_find_config(struct pci_dev * pci)66 int snd_amd_acp_find_config(struct pci_dev *pci)
67 {
68 const struct config_entry *table = config_table;
69 u16 device = pci->device;
70 int i;
71
72 /* Do not enable FLAGS on older platforms with Rev id zero */
73 if (!pci->revision)
74 return 0;
75
76 for (i = 0; i < ARRAY_SIZE(config_table); i++, table++) {
77 if (table->device != device)
78 continue;
79 if (table->dmi_table && !dmi_check_system(table->dmi_table))
80 continue;
81 acp_quirk_data = table->flags;
82 return table->flags;
83 }
84
85 return 0;
86 }
87 EXPORT_SYMBOL(snd_amd_acp_find_config);
88
89 static struct snd_soc_acpi_codecs amp_rt1019 = {
90 .num_codecs = 1,
91 .codecs = {"10EC1019"}
92 };
93
94 static struct snd_soc_acpi_codecs amp_max = {
95 .num_codecs = 1,
96 .codecs = {"MX98360A"}
97 };
98
99 static struct snd_soc_acpi_codecs amp_max98388 = {
100 .num_codecs = 1,
101 .codecs = {"ADS8388"}
102 };
103
104 struct snd_soc_acpi_mach snd_soc_acpi_amd_sof_machines[] = {
105 {
106 .id = "10EC5682",
107 .drv_name = "rt5682-rt1019",
108 .pdata = (void *)&acp_quirk_data,
109 .machine_quirk = snd_soc_acpi_codec_list,
110 .quirk_data = &_rt1019,
111 .fw_filename = "sof-rn.ri",
112 .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg",
113 },
114 {
115 .id = "10EC5682",
116 .drv_name = "rt5682-max",
117 .pdata = (void *)&acp_quirk_data,
118 .machine_quirk = snd_soc_acpi_codec_list,
119 .quirk_data = &_max,
120 .fw_filename = "sof-rn.ri",
121 .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg",
122 },
123 {
124 .id = "RTL5682",
125 .drv_name = "rt5682s-max",
126 .pdata = (void *)&acp_quirk_data,
127 .machine_quirk = snd_soc_acpi_codec_list,
128 .quirk_data = &_max,
129 .fw_filename = "sof-rn.ri",
130 .sof_tplg_filename = "sof-rn-rt5682-max98360.tplg",
131 },
132 {
133 .id = "RTL5682",
134 .drv_name = "rt5682s-rt1019",
135 .pdata = (void *)&acp_quirk_data,
136 .machine_quirk = snd_soc_acpi_codec_list,
137 .quirk_data = &_rt1019,
138 .fw_filename = "sof-rn.ri",
139 .sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg",
140 },
141 {
142 .id = "AMDI1019",
143 .drv_name = "renoir-dsp",
144 .pdata = (void *)&acp_quirk_data,
145 .fw_filename = "sof-rn.ri",
146 .sof_tplg_filename = "sof-acp.tplg",
147 },
148 {},
149 };
150 EXPORT_SYMBOL(snd_soc_acpi_amd_sof_machines);
151
152 struct snd_soc_acpi_mach snd_soc_acpi_amd_vangogh_sof_machines[] = {
153 {
154 .id = "NVTN2020",
155 .drv_name = "nau8821-max",
156 .pdata = &acp_quirk_data,
157 .machine_quirk = snd_soc_acpi_codec_list,
158 .quirk_data = &_max98388,
159 .fw_filename = "sof-vangogh.ri",
160 .sof_tplg_filename = "sof-vangogh-nau8821-max.tplg",
161 },
162 {},
163 };
164 EXPORT_SYMBOL(snd_soc_acpi_amd_vangogh_sof_machines);
165
166 struct snd_soc_acpi_mach snd_soc_acpi_amd_rmb_sof_machines[] = {
167 {
168 .id = "AMDI1019",
169 .drv_name = "rmb-dsp",
170 .pdata = &acp_quirk_data,
171 .fw_filename = "sof-rmb.ri",
172 .sof_tplg_filename = "sof-acp-rmb.tplg",
173 },
174 {
175 .id = "10508825",
176 .drv_name = "nau8825-max",
177 .pdata = &acp_quirk_data,
178 .machine_quirk = snd_soc_acpi_codec_list,
179 .quirk_data = &_max,
180 .fw_filename = "sof-rmb.ri",
181 .sof_tplg_filename = "sof-rmb-nau8825-max98360.tplg",
182 },
183 {
184 .id = "RTL5682",
185 .drv_name = "rt5682s-hs-rt1019",
186 .pdata = &acp_quirk_data,
187 .machine_quirk = snd_soc_acpi_codec_list,
188 .quirk_data = &_rt1019,
189 .fw_filename = "sof-rmb.ri",
190 .sof_tplg_filename = "sof-rmb-rt5682s-rt1019.tplg",
191 },
192 {},
193 };
194 EXPORT_SYMBOL(snd_soc_acpi_amd_rmb_sof_machines);
195
196 MODULE_LICENSE("Dual BSD/GPL");
197