xref: /linux/sound/soc/amd/acp/amd-acp70-acpi-match.c (revision 09b1704f5b02c18dd02b21343530463fcfc92c54)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * amd-acp70-acpi-match.c - tables and support for ACP 7.0 & ACP7.1
4  * ACPI enumeration.
5  *
6  * Copyright 2025 Advanced Micro Devices, Inc.
7  */
8 
9 #include <sound/soc-acpi.h>
10 #include "../mach-config.h"
11 
12 static const struct snd_soc_acpi_endpoint single_endpoint = {
13 	.num = 0,
14 	.aggregated = 0,
15 	.group_position = 0,
16 	.group_id = 0
17 };
18 
19 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
20 	.num = 0,
21 	.aggregated = 1,
22 	.group_position = 0,
23 	.group_id = 1
24 };
25 
26 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
27 	.num = 0,
28 	.aggregated = 1,
29 	.group_position = 1,
30 	.group_id = 1
31 };
32 
33 static const struct snd_soc_acpi_endpoint spk_2_endpoint = {
34 	.num = 0,
35 	.aggregated = 1,
36 	.group_position = 2,
37 	.group_id = 1
38 };
39 
40 static const struct snd_soc_acpi_endpoint spk_3_endpoint = {
41 	.num = 0,
42 	.aggregated = 1,
43 	.group_position = 3,
44 	.group_id = 1
45 };
46 
47 static const struct snd_soc_acpi_adr_device rt711_rt1316_group_adr[] = {
48 	{
49 		.adr = 0x000030025D071101ull,
50 		.num_endpoints = 1,
51 		.endpoints = &single_endpoint,
52 		.name_prefix = "rt711"
53 	},
54 	{
55 		.adr = 0x000030025D131601ull,
56 		.num_endpoints = 1,
57 		.endpoints = &spk_l_endpoint,
58 		.name_prefix = "rt1316-1"
59 	},
60 	{
61 		.adr = 0x000032025D131601ull,
62 		.num_endpoints = 1,
63 		.endpoints = &spk_r_endpoint,
64 		.name_prefix = "rt1316-2"
65 	},
66 };
67 
68 static const struct snd_soc_acpi_adr_device rt714_adr[] = {
69 	{
70 		.adr = 0x130025d071401ull,
71 		.num_endpoints = 1,
72 		.endpoints = &single_endpoint,
73 		.name_prefix = "rt714"
74 	}
75 };
76 
77 static const struct snd_soc_acpi_link_adr acp70_4_in_1_sdca[] = {
78 	{	.mask = BIT(0),
79 		.num_adr = ARRAY_SIZE(rt711_rt1316_group_adr),
80 		.adr_d = rt711_rt1316_group_adr,
81 	},
82 	{
83 		.mask = BIT(1),
84 		.num_adr = ARRAY_SIZE(rt714_adr),
85 		.adr_d = rt714_adr,
86 	},
87 	{}
88 };
89 
90 static const struct snd_soc_acpi_endpoint rt722_endpoints[] = {
91 	{
92 		.num = 0,
93 		.aggregated = 0,
94 		.group_position = 0,
95 		.group_id = 0,
96 	},
97 	{
98 		.num = 1,
99 		.aggregated = 0,
100 		.group_position = 0,
101 		.group_id = 0,
102 	},
103 	{
104 		.num = 2,
105 		.aggregated = 0,
106 		.group_position = 0,
107 		.group_id = 0,
108 	},
109 };
110 
111 static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = {
112 	{
113 		.adr = 0x000030025d072201ull,
114 		.num_endpoints = ARRAY_SIZE(rt722_endpoints),
115 		.endpoints = rt722_endpoints,
116 		.name_prefix = "rt722"
117 	}
118 };
119 
120 static const struct snd_soc_acpi_adr_device rt1320_1_single_adr[] = {
121 	{
122 		.adr = 0x000130025D132001ull,
123 		.num_endpoints = 1,
124 		.endpoints = &single_endpoint,
125 		.name_prefix = "rt1320-1"
126 	}
127 };
128 
129 static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {
130 	{ /* Jack Playback Endpoint */
131 		.num = 0,
132 		.aggregated = 0,
133 		.group_position = 0,
134 		.group_id = 0,
135 	},
136 	{ /* DMIC Capture Endpoint */
137 		.num = 1,
138 		.aggregated = 0,
139 		.group_position = 0,
140 		.group_id = 0,
141 	},
142 	{ /* Jack Capture Endpoint */
143 		.num = 2,
144 		.aggregated = 0,
145 		.group_position = 0,
146 		.group_id = 0,
147 	},
148 	{ /* Speaker Playback Endpoint */
149 		.num = 3,
150 		.aggregated = 0,
151 		.group_position = 0,
152 		.group_id = 0,
153 	},
154 };
155 
156 static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {
157 	{
158 		.adr = 0x00003001FA424301ull,
159 		.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
160 		.endpoints = cs42l43_endpoints,
161 		.name_prefix = "cs42l43"
162 	}
163 };
164 
165 static const struct snd_soc_acpi_adr_device cs42l43_1_cs35l56x4_1_adr[] = {
166 	{
167 		.adr = 0x00013001FA424301ull,
168 		.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
169 		.endpoints = cs42l43_endpoints,
170 		.name_prefix = "cs42l43"
171 	},
172 	{
173 		.adr = 0x00013001FA355601ull,
174 		.num_endpoints = 1,
175 		.endpoints = &spk_l_endpoint,
176 		.name_prefix = "AMP1"
177 	},
178 	{
179 		.adr = 0x00013101FA355601ull,
180 		.num_endpoints = 1,
181 		.endpoints = &spk_r_endpoint,
182 		.name_prefix = "AMP2"
183 	},
184 	{
185 		.adr = 0x00013201FA355601ull,
186 		.num_endpoints = 1,
187 		.endpoints = &spk_2_endpoint,
188 		.name_prefix = "AMP3"
189 	},
190 	{
191 		.adr = 0x00013301FA355601ull,
192 		.num_endpoints = 1,
193 		.endpoints = &spk_3_endpoint,
194 		.name_prefix = "AMP4"
195 	},
196 };
197 
198 static const struct snd_soc_acpi_adr_device cs35l56x4_1_adr[] = {
199 	{
200 		.adr = 0x00013301FA355601ull,
201 		.num_endpoints = 1,
202 		.endpoints = &spk_l_endpoint,
203 		.name_prefix = "AMP1"
204 	},
205 	{
206 		.adr = 0x00013201FA355601ull,
207 		.num_endpoints = 1,
208 		.endpoints = &spk_r_endpoint,
209 		.name_prefix = "AMP2"
210 	},
211 	{
212 		.adr = 0x00013101FA355601ull,
213 		.num_endpoints = 1,
214 		.endpoints = &spk_2_endpoint,
215 		.name_prefix = "AMP3"
216 	},
217 	{
218 		.adr = 0x00013001FA355601ull,
219 		.num_endpoints = 1,
220 		.endpoints = &spk_3_endpoint,
221 		.name_prefix = "AMP4"
222 	},
223 };
224 
225 static const struct snd_soc_acpi_link_adr acp70_cs42l43_l1_cs35l56x4_l1[] = {
226 	{
227 		.mask = BIT(1),
228 		.num_adr = ARRAY_SIZE(cs42l43_1_cs35l56x4_1_adr),
229 		.adr_d = cs42l43_1_cs35l56x4_1_adr,
230 	},
231 	{}
232 };
233 
234 static const struct snd_soc_acpi_link_adr acp70_cs42l43_l0_cs35l56x4_l1[] = {
235 	{
236 		.mask = BIT(0),
237 		.num_adr = ARRAY_SIZE(cs42l43_0_adr),
238 		.adr_d = cs42l43_0_adr,
239 	},
240 	{
241 		.mask = BIT(1),
242 		.num_adr = ARRAY_SIZE(cs35l56x4_1_adr),
243 		.adr_d = cs35l56x4_1_adr,
244 	},
245 	{}
246 };
247 
248 static const struct snd_soc_acpi_link_adr acp70_cs35l56x4_l1[] = {
249 	{
250 		.mask = BIT(1),
251 		.num_adr = ARRAY_SIZE(cs35l56x4_1_adr),
252 		.adr_d = cs35l56x4_1_adr,
253 	},
254 	{}
255 };
256 
257 static const struct snd_soc_acpi_link_adr acp70_rt722_only[] = {
258 	{
259 		.mask = BIT(0),
260 		.num_adr = ARRAY_SIZE(rt722_0_single_adr),
261 		.adr_d = rt722_0_single_adr,
262 	},
263 	{}
264 };
265 
266 static const struct snd_soc_acpi_link_adr acp70_rt722_l0_rt1320_l1[] = {
267 	{
268 		.mask = BIT(0),
269 		.num_adr = ARRAY_SIZE(rt722_0_single_adr),
270 		.adr_d = rt722_0_single_adr,
271 	},
272 	{
273 		.mask = BIT(1),
274 		.num_adr = ARRAY_SIZE(rt1320_1_single_adr),
275 		.adr_d = rt1320_1_single_adr,
276 	},
277 	{}
278 };
279 
280 struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
281 	{
282 		.link_mask = BIT(0) | BIT(1),
283 		.links = acp70_rt722_l0_rt1320_l1,
284 		.drv_name = "amd_sdw",
285 	},
286 	{
287 		.link_mask = BIT(0),
288 		.links = acp70_rt722_only,
289 		.drv_name = "amd_sdw",
290 	},
291 	{
292 		.link_mask = BIT(0) | BIT(1),
293 		.links = acp70_4_in_1_sdca,
294 		.drv_name = "amd_sdw",
295 	},
296 	{
297 		.link_mask = BIT(0) | BIT(1),
298 		.links = acp70_cs42l43_l0_cs35l56x4_l1,
299 		.drv_name = "amd_sdw",
300 	},
301 	{
302 		.link_mask = BIT(1),
303 		.links = acp70_cs42l43_l1_cs35l56x4_l1,
304 		.drv_name = "amd_sdw",
305 	},
306 	{
307 		.link_mask = BIT(1),
308 		.links = acp70_cs35l56x4_l1,
309 		.drv_name = "amd_sdw",
310 	},
311 	{},
312 };
313 EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sdw_machines);
314 
315 struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sof_sdw_machines[] = {
316 	{
317 		.link_mask = BIT(0),
318 		.links = acp70_rt722_only,
319 		.drv_name = "amd_sof_sdw",
320 		.sof_tplg_filename = "sof-acp_7_0-rt722-l0.tplg",
321 		.fw_filename = "sof-acp_7_0.ri",
322 	},
323 	{},
324 };
325 EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sof_sdw_machines);
326 
327 MODULE_DESCRIPTION("AMD ACP7.0 & ACP7.1 tables and support for ACPI enumeration");
328 MODULE_LICENSE("GPL");
329 MODULE_AUTHOR("Vijendar.Mukunda@amd.com");
330