ASoC: Intel: RPL/MTL machine updates for 6.6
[platform/kernel/linux-starfive.git] / sound / soc / intel / common / soc-acpi-intel-rpl-match.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * soc-apci-intel-rpl-match.c - tables and support for RPL ACPI enumeration.
4  *
5  * Copyright (c) 2022 Intel Corporation.
6  */
7
8 #include <sound/soc-acpi.h>
9 #include <sound/soc-acpi-intel-match.h>
10
11 static const struct snd_soc_acpi_endpoint single_endpoint = {
12         .num = 0,
13         .aggregated = 0,
14         .group_position = 0,
15         .group_id = 0,
16 };
17
18 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
19         .num = 0,
20         .aggregated = 1,
21         .group_position = 0,
22         .group_id = 1,
23 };
24
25 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
26         .num = 0,
27         .aggregated = 1,
28         .group_position = 1,
29         .group_id = 1,
30 };
31
32 static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
33         {
34                 .adr = 0x000020025D071100ull,
35                 .num_endpoints = 1,
36                 .endpoints = &single_endpoint,
37                 .name_prefix = "rt711"
38         }
39 };
40
41 static const struct snd_soc_acpi_link_adr rpl_rvp[] = {
42         {
43                 .mask = BIT(0),
44                 .num_adr = ARRAY_SIZE(rt711_0_adr),
45                 .adr_d = rt711_0_adr,
46         },
47         {}
48 };
49
50 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
51         {
52                 .adr = 0x000030025D071101ull,
53                 .num_endpoints = 1,
54                 .endpoints = &single_endpoint,
55                 .name_prefix = "rt711"
56         }
57 };
58
59 static const struct snd_soc_acpi_adr_device rt711_sdca_2_adr[] = {
60         {
61                 .adr = 0x000230025D071101ull,
62                 .num_endpoints = 1,
63                 .endpoints = &single_endpoint,
64                 .name_prefix = "rt711"
65         }
66 };
67
68 static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {
69         {
70                 .adr = 0x000131025D131601ull, /* unique ID is set for some reason */
71                 .num_endpoints = 1,
72                 .endpoints = &spk_l_endpoint,
73                 .name_prefix = "rt1316-1"
74         }
75 };
76
77 static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
78         {
79                 .adr = 0x000230025D131601ull,
80                 .num_endpoints = 1,
81                 .endpoints = &spk_r_endpoint,
82                 .name_prefix = "rt1316-2"
83         }
84 };
85
86 static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
87         {
88                 .adr = 0x000330025D131601ull,
89                 .num_endpoints = 1,
90                 .endpoints = &spk_r_endpoint,
91                 .name_prefix = "rt1316-2"
92         }
93 };
94
95 static const struct snd_soc_acpi_adr_device rt1316_0_group2_adr[] = {
96         {
97                 .adr = 0x000030025D131601ull,
98                 .num_endpoints = 1,
99                 .endpoints = &spk_l_endpoint,
100                 .name_prefix = "rt1316-1"
101         }
102 };
103
104 static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = {
105         {
106                 .adr = 0x000131025D131601ull,
107                 .num_endpoints = 1,
108                 .endpoints = &spk_r_endpoint,
109                 .name_prefix = "rt1316-2"
110         }
111 };
112
113 static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {
114         {
115                 .adr = 0x000132025D131801ull,
116                 .num_endpoints = 1,
117                 .endpoints = &spk_l_endpoint,
118                 .name_prefix = "rt1318-1"
119         }
120 };
121
122 static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {
123         {
124                 .adr = 0x000230025D131801ull,
125                 .num_endpoints = 1,
126                 .endpoints = &spk_r_endpoint,
127                 .name_prefix = "rt1318-2"
128         }
129 };
130
131 static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {
132         {
133                 .adr = 0x000030025D071401ull,
134                 .num_endpoints = 1,
135                 .endpoints = &single_endpoint,
136                 .name_prefix = "rt714"
137         }
138 };
139
140 static const struct snd_soc_acpi_adr_device rt714_2_adr[] = {
141         {
142                 .adr = 0x000230025D071401ull,
143                 .num_endpoints = 1,
144                 .endpoints = &single_endpoint,
145                 .name_prefix = "rt714"
146         }
147 };
148
149 static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {
150         {
151                 .adr = 0x000330025D071401ull,
152                 .num_endpoints = 1,
153                 .endpoints = &single_endpoint,
154                 .name_prefix = "rt714"
155         }
156 };
157
158 static const struct snd_soc_acpi_link_adr rpl_sdca_3_in_1[] = {
159         {
160                 .mask = BIT(0),
161                 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
162                 .adr_d = rt711_sdca_0_adr,
163         },
164         {
165                 .mask = BIT(1),
166                 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
167                 .adr_d = rt1316_1_group1_adr,
168         },
169         {
170                 .mask = BIT(2),
171                 .num_adr = ARRAY_SIZE(rt714_2_adr),
172                 .adr_d = rt714_2_adr,
173         },
174         {
175                 .mask = BIT(3),
176                 .num_adr = ARRAY_SIZE(rt1316_3_group1_adr),
177                 .adr_d = rt1316_3_group1_adr,
178         },
179         {}
180 };
181
182 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1316_link12_rt714_link3[] = {
183         {
184                 .mask = BIT(0),
185                 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
186                 .adr_d = rt711_sdca_0_adr,
187         },
188         {
189                 .mask = BIT(1),
190                 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
191                 .adr_d = rt1316_1_group1_adr,
192         },
193         {
194                 .mask = BIT(2),
195                 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
196                 .adr_d = rt1316_2_group1_adr,
197         },
198         {
199                 .mask = BIT(3),
200                 .num_adr = ARRAY_SIZE(rt714_3_adr),
201                 .adr_d = rt714_3_adr,
202         },
203         {}
204 };
205
206 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01_rt714_link3[] = {
207         {
208                 .mask = BIT(2),
209                 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
210                 .adr_d = rt711_sdca_2_adr,
211         },
212         {
213                 .mask = BIT(0),
214                 .num_adr = ARRAY_SIZE(rt1316_0_group2_adr),
215                 .adr_d = rt1316_0_group2_adr,
216         },
217         {
218                 .mask = BIT(1),
219                 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
220                 .adr_d = rt1316_1_group2_adr,
221         },
222         {
223                 .mask = BIT(3),
224                 .num_adr = ARRAY_SIZE(rt714_3_adr),
225                 .adr_d = rt714_3_adr,
226         },
227         {}
228 };
229
230 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01[] = {
231         {
232                 .mask = BIT(2),
233                 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
234                 .adr_d = rt711_sdca_2_adr,
235         },
236         {
237                 .mask = BIT(0),
238                 .num_adr = ARRAY_SIZE(rt1316_0_group2_adr),
239                 .adr_d = rt1316_0_group2_adr,
240         },
241         {
242                 .mask = BIT(1),
243                 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
244                 .adr_d = rt1316_1_group2_adr,
245         },
246         {}
247 };
248
249 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12_rt714_link3[] = {
250         {
251                 .mask = BIT(0),
252                 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
253                 .adr_d = rt711_sdca_0_adr,
254         },
255         {
256                 .mask = BIT(1),
257                 .num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
258                 .adr_d = rt1318_1_group1_adr,
259         },
260         {
261                 .mask = BIT(2),
262                 .num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
263                 .adr_d = rt1318_2_group1_adr,
264         },
265         {
266                 .mask = BIT(3),
267                 .num_adr = ARRAY_SIZE(rt714_3_adr),
268                 .adr_d = rt714_3_adr,
269         },
270         {}
271 };
272
273 static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12[] = {
274         {
275                 .mask = BIT(0),
276                 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
277                 .adr_d = rt711_sdca_0_adr,
278         },
279         {
280                 .mask = BIT(1),
281                 .num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
282                 .adr_d = rt1318_1_group1_adr,
283         },
284         {
285                 .mask = BIT(2),
286                 .num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
287                 .adr_d = rt1318_2_group1_adr,
288         },
289         {}
290 };
291
292 static const struct snd_soc_acpi_link_adr rpl_sdw_rt1316_link12_rt714_link0[] = {
293         {
294                 .mask = BIT(1),
295                 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
296                 .adr_d = rt1316_1_group1_adr,
297         },
298         {
299                 .mask = BIT(2),
300                 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
301                 .adr_d = rt1316_2_group1_adr,
302         },
303         {
304                 .mask = BIT(0),
305                 .num_adr = ARRAY_SIZE(rt714_0_adr),
306                 .adr_d = rt714_0_adr,
307         },
308         {}
309 };
310
311 static const struct snd_soc_acpi_link_adr rpl_sdca_rvp[] = {
312         {
313                 .mask = BIT(0),
314                 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
315                 .adr_d = rt711_sdca_0_adr,
316         },
317         {}
318 };
319
320 static const struct snd_soc_acpi_link_adr rplp_crb[] = {
321         {
322                 .mask = BIT(2),
323                 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
324                 .adr_d = rt711_sdca_2_adr,
325         },
326         {}
327 };
328
329 static const struct snd_soc_acpi_codecs rpl_rt5682_hp = {
330         .num_codecs = 2,
331         .codecs = {"10EC5682", "RTL5682"},
332 };
333
334 static const struct snd_soc_acpi_codecs rpl_essx_83x6 = {
335         .num_codecs = 3,
336         .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
337 };
338
339 static const struct snd_soc_acpi_codecs rpl_max98357a_amp = {
340         .num_codecs = 1,
341         .codecs = {"MX98357A"}
342 };
343
344 static const struct snd_soc_acpi_codecs rpl_max98360a_amp = {
345         .num_codecs = 1,
346         .codecs = {"MX98360A"},
347 };
348
349 static const struct snd_soc_acpi_codecs rpl_max98373_amp = {
350         .num_codecs = 1,
351         .codecs = {"MX98373"}
352 };
353
354 static const struct snd_soc_acpi_codecs rpl_lt6911_hdmi = {
355         .num_codecs = 1,
356         .codecs = {"INTC10B0"}
357 };
358
359 static const struct snd_soc_acpi_codecs rpl_nau8318_amp = {
360         .num_codecs = 1,
361         .codecs = {"NVTN2012"}
362 };
363
364 static const struct snd_soc_acpi_codecs rpl_rt1019p_amp = {
365         .num_codecs = 1,
366         .codecs = {"RTL1019"}
367 };
368
369 struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = {
370         {
371                 .comp_ids = &rpl_rt5682_hp,
372                 .drv_name = "rpl_mx98357_rt5682",
373                 .machine_quirk = snd_soc_acpi_codec_list,
374                 .quirk_data = &rpl_max98357a_amp,
375                 .sof_tplg_filename = "sof-rpl-max98357a-rt5682.tplg",
376         },
377         {
378                 .comp_ids = &rpl_rt5682_hp,
379                 .drv_name = "rpl_mx98360_rt5682",
380                 .machine_quirk = snd_soc_acpi_codec_list,
381                 .quirk_data = &rpl_max98360a_amp,
382                 .sof_tplg_filename = "sof-rpl-max98360a-rt5682.tplg",
383         },
384         {
385                 .id = "10508825",
386                 .drv_name = "rpl_max98373_8825",
387                 .machine_quirk = snd_soc_acpi_codec_list,
388                 .quirk_data = &rpl_max98373_amp,
389                 .sof_tplg_filename = "sof-rpl-max98373-nau8825.tplg",
390         },
391         {
392                 .id = "10508825",
393                 .drv_name = "rpl_nau8318_8825",
394                 .machine_quirk = snd_soc_acpi_codec_list,
395                 .quirk_data = &rpl_nau8318_amp,
396                 .sof_tplg_filename = "sof-rpl-nau8318-nau8825.tplg",
397         },
398         {
399                 .comp_ids = &rpl_rt5682_hp,
400                 .drv_name = "rpl_rt1019_rt5682",
401                 .machine_quirk = snd_soc_acpi_codec_list,
402                 .quirk_data = &rpl_rt1019p_amp,
403                 .sof_tplg_filename = "sof-rpl-rt1019-rt5682.tplg",
404         },
405         {
406                 .comp_ids = &rpl_essx_83x6,
407                 .drv_name = "rpl_es83x6_c1_h02",
408                 .machine_quirk = snd_soc_acpi_codec_list,
409                 .quirk_data = &rpl_lt6911_hdmi,
410                 .sof_tplg_filename = "sof-rpl-es83x6-ssp1-hdmi-ssp02.tplg",
411         },
412         {
413                 .comp_ids = &rpl_essx_83x6,
414                 .drv_name = "sof-essx8336",
415                 .sof_tplg_filename = "sof-rpl-es83x6", /* the tplg suffix is added at run time */
416                 .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
417                                         SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
418                                         SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
419         },
420         {
421                 .id = "INTC10B0",
422                 .drv_name = "rpl_lt6911_hdmi_ssp",
423                 .sof_tplg_filename = "sof-rpl-nocodec-hdmi-ssp02.tplg"
424         },
425         {},
426 };
427 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_machines);
428
429 /* this table is used when there is no I2S codec present */
430 struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_sdw_machines[] = {
431         {
432                 .link_mask = 0xF, /* 4 active links required */
433                 .links = rpl_sdca_3_in_1,
434                 .drv_name = "sof_sdw",
435                 .sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l13-rt714-l2.tplg",
436         },
437         {
438                 .link_mask = 0xF, /* 4 active links required */
439                 .links = rpl_sdw_rt711_link2_rt1316_link01_rt714_link3,
440                 .drv_name = "sof_sdw",
441                 .sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01-rt714-l3.tplg",
442         },
443         {
444                 .link_mask = 0xF, /* 4 active links required */
445                 .links = rpl_sdw_rt711_link0_rt1316_link12_rt714_link3,
446                 .drv_name = "sof_sdw",
447                 .sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l12-rt714-l3.tplg",
448         },
449         {
450                 .link_mask = 0xF, /* 4 active links required */
451                 .links = rpl_sdw_rt711_link0_rt1318_link12_rt714_link3,
452                 .drv_name = "sof_sdw",
453                 .sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12-rt714-l3.tplg",
454         },
455         {
456                 .link_mask = 0x7, /* rt711 on link0 & two rt1318s on link1 and link2 */
457                 .links = rpl_sdw_rt711_link0_rt1318_link12,
458                 .drv_name = "sof_sdw",
459                 .sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12.tplg",
460         },
461         {
462                 .link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */
463                 .links = rpl_sdw_rt1316_link12_rt714_link0,
464                 .drv_name = "sof_sdw",
465                 .sof_tplg_filename = "sof-rpl-rt1316-l12-rt714-l0.tplg",
466         },
467         {
468                 .link_mask = 0x7, /* rt711 on link2 & two rt1316s on link0 and link1 */
469                 .links = rpl_sdw_rt711_link2_rt1316_link01,
470                 .drv_name = "sof_sdw",
471                 .sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01.tplg",
472         },
473         {
474                 .link_mask = 0x1, /* link0 required */
475                 .links = rpl_rvp,
476                 .drv_name = "sof_sdw",
477                 .sof_tplg_filename = "sof-rpl-rt711-l0.tplg",
478         },
479         {
480                 .link_mask = 0x1, /* link0 required */
481                 .links = rpl_sdca_rvp,
482                 .drv_name = "sof_sdw",
483                 .sof_tplg_filename = "sof-rpl-rt711-l0.tplg",
484         },
485         {
486                 .link_mask = 0x4, /* link2 required */
487                 .links = rplp_crb,
488                 .drv_name = "sof_sdw",
489                 .sof_tplg_filename = "sof-rpl-rt711-l2.tplg",
490         },
491         {},
492 };
493 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_sdw_machines);