Linux 6.7-rc7
[linux-modified.git] / sound / soc / intel / common / soc-acpi-intel-mtl-match.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * soc-acpi-intel-mtl-match.c - tables and support for MTL ACPI enumeration.
4  *
5  * Copyright (c) 2022, Intel Corporation.
6  *
7  */
8
9 #include <sound/soc-acpi.h>
10 #include <sound/soc-acpi-intel-match.h>
11 #include "soc-acpi-intel-sdw-mockup-match.h"
12
13 static const struct snd_soc_acpi_codecs mtl_max98357a_amp = {
14         .num_codecs = 1,
15         .codecs = {"MX98357A"}
16 };
17
18 static const struct snd_soc_acpi_codecs mtl_max98360a_amp = {
19         .num_codecs = 1,
20         .codecs = {"MX98360A"}
21 };
22
23 static const struct snd_soc_acpi_codecs mtl_rt1019p_amp = {
24         .num_codecs = 1,
25         .codecs = {"RTL1019"}
26 };
27
28 static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = {
29         .num_codecs = 2,
30         .codecs = {"10EC5682", "RTL5682"},
31 };
32
33 static const struct snd_soc_acpi_codecs mtl_essx_83x6 = {
34         .num_codecs = 3,
35         .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
36 };
37
38 static const struct snd_soc_acpi_codecs mtl_lt6911_hdmi = {
39         .num_codecs = 1,
40         .codecs = {"INTC10B0"}
41 };
42
43 struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_machines[] = {
44         {
45                 .comp_ids = &mtl_rt5682_rt5682s_hp,
46                 .drv_name = "mtl_mx98357_rt5682",
47                 .machine_quirk = snd_soc_acpi_codec_list,
48                 .quirk_data = &mtl_max98357a_amp,
49                 .sof_tplg_filename = "sof-mtl-max98357a-rt5682.tplg",
50         },
51         {
52                 .comp_ids = &mtl_rt5682_rt5682s_hp,
53                 .drv_name = "mtl_mx98360_rt5682",
54                 .machine_quirk = snd_soc_acpi_codec_list,
55                 .quirk_data = &mtl_max98360a_amp,
56                 .sof_tplg_filename = "sof-mtl-max98360a-rt5682.tplg",
57         },
58         {
59                 .comp_ids = &mtl_rt5682_rt5682s_hp,
60                 .drv_name = "mtl_rt1019_rt5682",
61                 .machine_quirk = snd_soc_acpi_codec_list,
62                 .quirk_data = &mtl_rt1019p_amp,
63                 .sof_tplg_filename = "sof-mtl-rt1019-rt5682.tplg",
64         },
65         {
66                 .comp_ids = &mtl_essx_83x6,
67                 .drv_name = "mtl_es83x6_c1_h02",
68                 .machine_quirk = snd_soc_acpi_codec_list,
69                 .quirk_data = &mtl_lt6911_hdmi,
70                 .sof_tplg_filename = "sof-mtl-es83x6-ssp1-hdmi-ssp02.tplg",
71         },
72         {
73                 .comp_ids = &mtl_essx_83x6,
74                 .drv_name = "sof-essx8336",
75                 .sof_tplg_filename = "sof-mtl-es8336", /* the tplg suffix is added at run time */
76                 .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
77                                         SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
78                                         SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
79         },
80         /* place amp-only boards in the end of table */
81         {
82                 .id = "INTC10B0",
83                 .drv_name = "mtl_lt6911_hdmi_ssp",
84                 .sof_tplg_filename = "sof-mtl-hdmi-ssp02.tplg",
85         },
86         {},
87 };
88 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines);
89
90 static const struct snd_soc_acpi_endpoint single_endpoint = {
91         .num = 0,
92         .aggregated = 0,
93         .group_position = 0,
94         .group_id = 0,
95 };
96
97 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
98         .num = 0,
99         .aggregated = 1,
100         .group_position = 0,
101         .group_id = 1,
102 };
103
104 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
105         .num = 0,
106         .aggregated = 1,
107         .group_position = 1,
108         .group_id = 1,
109 };
110
111 static const struct snd_soc_acpi_endpoint rt712_endpoints[] = {
112         {
113                 .num = 0,
114                 .aggregated = 0,
115                 .group_position = 0,
116                 .group_id = 0,
117         },
118         {
119                 .num = 1,
120                 .aggregated = 0,
121                 .group_position = 0,
122                 .group_id = 0,
123         },
124 };
125
126 static const struct snd_soc_acpi_endpoint spk_2_endpoint = {
127         .num = 0,
128         .aggregated = 1,
129         .group_position = 2,
130         .group_id = 1,
131 };
132
133 static const struct snd_soc_acpi_endpoint spk_3_endpoint = {
134         .num = 0,
135         .aggregated = 1,
136         .group_position = 3,
137         .group_id = 1,
138 };
139
140 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
141         {
142                 .adr = 0x000030025D071101ull,
143                 .num_endpoints = 1,
144                 .endpoints = &single_endpoint,
145                 .name_prefix = "rt711"
146         }
147 };
148
149 static const struct snd_soc_acpi_adr_device rt712_0_single_adr[] = {
150         {
151                 .adr = 0x000030025D071201ull,
152                 .num_endpoints = ARRAY_SIZE(rt712_endpoints),
153                 .endpoints = rt712_endpoints,
154                 .name_prefix = "rt712"
155         }
156 };
157
158 static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = {
159         {
160                 .adr = 0x000330025D171201ull,
161                 .num_endpoints = 1,
162                 .endpoints = &single_endpoint,
163                 .name_prefix = "rt712-dmic"
164         }
165 };
166
167 static const struct snd_soc_acpi_adr_device rt713_0_single_adr[] = {
168         {
169                 .adr = 0x000031025D071301ull,
170                 .num_endpoints = 1,
171                 .endpoints = &single_endpoint,
172                 .name_prefix = "rt713"
173         }
174 };
175
176 static const struct snd_soc_acpi_adr_device rt1713_3_single_adr[] = {
177         {
178                 .adr = 0x000331025D171301ull,
179                 .num_endpoints = 1,
180                 .endpoints = &single_endpoint,
181                 .name_prefix = "rt713-dmic"
182         }
183 };
184
185 static const struct snd_soc_acpi_adr_device mx8373_0_adr[] = {
186         {
187                 .adr = 0x000023019F837300ull,
188                 .num_endpoints = 1,
189                 .endpoints = &spk_l_endpoint,
190                 .name_prefix = "Left"
191         },
192         {
193                 .adr = 0x000027019F837300ull,
194                 .num_endpoints = 1,
195                 .endpoints = &spk_r_endpoint,
196                 .name_prefix = "Right"
197         }
198 };
199
200 static const struct snd_soc_acpi_adr_device rt5682_2_adr[] = {
201         {
202                 .adr = 0x000221025D568200ull,
203                 .num_endpoints = 1,
204                 .endpoints = &single_endpoint,
205                 .name_prefix = "rt5682"
206         }
207 };
208
209 static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
210         {
211                 .adr = 0x000230025D131601ull,
212                 .num_endpoints = 1,
213                 .endpoints = &spk_l_endpoint,
214                 .name_prefix = "rt1316-1"
215         }
216 };
217
218 static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
219         {
220                 .adr = 0x000331025D131601ull,
221                 .num_endpoints = 1,
222                 .endpoints = &spk_r_endpoint,
223                 .name_prefix = "rt1316-2"
224         }
225 };
226
227 static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = {
228         {
229                 .adr = 0x000131025D131601ull,
230                 .num_endpoints = 1,
231                 .endpoints = &spk_l_endpoint,
232                 .name_prefix = "rt1316-1"
233         }
234 };
235
236 static const struct snd_soc_acpi_adr_device rt1316_2_group2_adr[] = {
237         {
238                 .adr = 0x000230025D131601ull,
239                 .num_endpoints = 1,
240                 .endpoints = &spk_r_endpoint,
241                 .name_prefix = "rt1316-2"
242         }
243 };
244
245 static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {
246         {
247                 .adr = 0x000130025D131801ull,
248                 .num_endpoints = 1,
249                 .endpoints = &spk_l_endpoint,
250                 .name_prefix = "rt1318-1"
251         }
252 };
253
254 static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {
255         {
256                 .adr = 0x000232025D131801ull,
257                 .num_endpoints = 1,
258                 .endpoints = &spk_r_endpoint,
259                 .name_prefix = "rt1318-2"
260         }
261 };
262
263 static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {
264         {
265                 .adr = 0x000030025D071401ull,
266                 .num_endpoints = 1,
267                 .endpoints = &single_endpoint,
268                 .name_prefix = "rt714"
269         }
270 };
271
272 static const struct snd_soc_acpi_adr_device rt714_1_adr[] = {
273         {
274                 .adr = 0x000130025D071401ull,
275                 .num_endpoints = 1,
276                 .endpoints = &single_endpoint,
277                 .name_prefix = "rt714"
278         }
279 };
280
281 static const struct snd_soc_acpi_link_adr mtl_712_only[] = {
282         {
283                 .mask = BIT(0),
284                 .num_adr = ARRAY_SIZE(rt712_0_single_adr),
285                 .adr_d = rt712_0_single_adr,
286         },
287         {
288                 .mask = BIT(3),
289                 .num_adr = ARRAY_SIZE(rt1712_3_single_adr),
290                 .adr_d = rt1712_3_single_adr,
291         },
292         {}
293 };
294
295 static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {
296         {
297                 .adr = 0x00003001FA424301ull,
298                 .num_endpoints = 1,
299                 .endpoints = &single_endpoint,
300                 .name_prefix = "cs42l43"
301         }
302 };
303
304 static const struct snd_soc_acpi_adr_device cs35l56_1_adr[] = {
305         {
306                 .adr = 0x00013701FA355601ull,
307                 .num_endpoints = 1,
308                 .endpoints = &spk_r_endpoint,
309                 .name_prefix = "AMP8"
310         },
311         {
312                 .adr = 0x00013601FA355601ull,
313                 .num_endpoints = 1,
314                 .endpoints = &spk_3_endpoint,
315                 .name_prefix = "AMP7"
316         }
317 };
318
319 static const struct snd_soc_acpi_adr_device cs35l56_2_adr[] = {
320         {
321                 .adr = 0x00023301FA355601ull,
322                 .num_endpoints = 1,
323                 .endpoints = &spk_l_endpoint,
324                 .name_prefix = "AMP1"
325         },
326         {
327                 .adr = 0x00023201FA355601ull,
328                 .num_endpoints = 1,
329                 .endpoints = &spk_2_endpoint,
330                 .name_prefix = "AMP2"
331         }
332 };
333
334 static const struct snd_soc_acpi_link_adr rt5682_link2_max98373_link0[] = {
335         /* Expected order: jack -> amp */
336         {
337                 .mask = BIT(2),
338                 .num_adr = ARRAY_SIZE(rt5682_2_adr),
339                 .adr_d = rt5682_2_adr,
340         },
341         {
342                 .mask = BIT(0),
343                 .num_adr = ARRAY_SIZE(mx8373_0_adr),
344                 .adr_d = mx8373_0_adr,
345         },
346         {}
347 };
348
349 static const struct snd_soc_acpi_link_adr mtl_rvp[] = {
350         {
351                 .mask = BIT(0),
352                 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
353                 .adr_d = rt711_sdca_0_adr,
354         },
355         {}
356 };
357
358 static const struct snd_soc_acpi_link_adr mtl_3_in_1_sdca[] = {
359         {
360                 .mask = BIT(0),
361                 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
362                 .adr_d = rt711_sdca_0_adr,
363         },
364         {
365                 .mask = BIT(2),
366                 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
367                 .adr_d = rt1316_2_group1_adr,
368         },
369         {
370                 .mask = BIT(3),
371                 .num_adr = ARRAY_SIZE(rt1316_3_group1_adr),
372                 .adr_d = rt1316_3_group1_adr,
373         },
374         {
375                 .mask = BIT(1),
376                 .num_adr = ARRAY_SIZE(rt714_1_adr),
377                 .adr_d = rt714_1_adr,
378         },
379         {}
380 };
381
382 static const struct snd_soc_acpi_link_adr mtl_sdw_rt1318_l12_rt714_l0[] = {
383         {
384                 .mask = BIT(1),
385                 .num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
386                 .adr_d = rt1318_1_group1_adr,
387         },
388         {
389                 .mask = BIT(2),
390                 .num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
391                 .adr_d = rt1318_2_group1_adr,
392         },
393         {
394                 .mask = BIT(0),
395                 .num_adr = ARRAY_SIZE(rt714_0_adr),
396                 .adr_d = rt714_0_adr,
397         },
398         {}
399 };
400
401 static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12_rt1713_l3[] = {
402         {
403                 .mask = BIT(0),
404                 .num_adr = ARRAY_SIZE(rt713_0_single_adr),
405                 .adr_d = rt713_0_single_adr,
406         },
407         {
408                 .mask = BIT(1),
409                 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
410                 .adr_d = rt1316_1_group2_adr,
411         },
412         {
413                 .mask = BIT(2),
414                 .num_adr = ARRAY_SIZE(rt1316_2_group2_adr),
415                 .adr_d = rt1316_2_group2_adr,
416         },
417         {
418                 .mask = BIT(3),
419                 .num_adr = ARRAY_SIZE(rt1713_3_single_adr),
420                 .adr_d = rt1713_3_single_adr,
421         },
422         {}
423 };
424
425 static const struct snd_soc_acpi_adr_device mx8363_2_adr[] = {
426         {
427                 .adr = 0x000230019F836300ull,
428                 .num_endpoints = 1,
429                 .endpoints = &spk_l_endpoint,
430                 .name_prefix = "Left"
431         },
432         {
433                 .adr = 0x000231019F836300ull,
434                 .num_endpoints = 1,
435                 .endpoints = &spk_r_endpoint,
436                 .name_prefix = "Right"
437         }
438 };
439
440 static const struct snd_soc_acpi_adr_device cs42l42_0_adr[] = {
441         {
442                 .adr = 0x00001001FA424200ull,
443                 .num_endpoints = 1,
444                 .endpoints = &single_endpoint,
445                 .name_prefix = "cs42l42"
446         }
447 };
448
449 static const struct snd_soc_acpi_link_adr cs42l42_link0_max98363_link2[] = {
450         /* Expected order: jack -> amp */
451         {
452                 .mask = BIT(0),
453                 .num_adr = ARRAY_SIZE(cs42l42_0_adr),
454                 .adr_d = cs42l42_0_adr,
455         },
456         {
457                 .mask = BIT(2),
458                 .num_adr = ARRAY_SIZE(mx8363_2_adr),
459                 .adr_d = mx8363_2_adr,
460         },
461         {}
462 };
463
464 static const struct snd_soc_acpi_link_adr mtl_cs42l43_cs35l56[] = {
465         {
466                 .mask = BIT(0),
467                 .num_adr = ARRAY_SIZE(cs42l43_0_adr),
468                 .adr_d = cs42l43_0_adr,
469         },
470         {
471                 .mask = BIT(1),
472                 .num_adr = ARRAY_SIZE(cs35l56_1_adr),
473                 .adr_d = cs35l56_1_adr,
474         },
475         {
476                 .mask = BIT(2),
477                 .num_adr = ARRAY_SIZE(cs35l56_2_adr),
478                 .adr_d = cs35l56_2_adr,
479         },
480         {}
481 };
482
483 /* this table is used when there is no I2S codec present */
484 struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = {
485         /* mockup tests need to be first */
486         {
487                 .link_mask = GENMASK(3, 0),
488                 .links = sdw_mockup_headset_2amps_mic,
489                 .drv_name = "sof_sdw",
490                 .sof_tplg_filename = "sof-mtl-rt711-rt1308-rt715.tplg",
491         },
492         {
493                 .link_mask = BIT(0) | BIT(1) | BIT(3),
494                 .links = sdw_mockup_headset_1amp_mic,
495                 .drv_name = "sof_sdw",
496                 .sof_tplg_filename = "sof-mtl-rt711-rt1308-mono-rt715.tplg",
497         },
498         {
499                 .link_mask = GENMASK(2, 0),
500                 .links = sdw_mockup_mic_headset_1amp,
501                 .drv_name = "sof_sdw",
502                 .sof_tplg_filename = "sof-mtl-rt715-rt711-rt1308-mono.tplg",
503         },
504         {
505                 .link_mask = GENMASK(3, 0),
506                 .links = mtl_rt713_l0_rt1316_l12_rt1713_l3,
507                 .drv_name = "sof_sdw",
508                 .sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12-rt1713-l3.tplg",
509         },
510         {
511                 .link_mask = BIT(3) | BIT(0),
512                 .links = mtl_712_only,
513                 .drv_name = "sof_sdw",
514                 .sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg",
515         },
516         {
517                 .link_mask = GENMASK(2, 0),
518                 .links = mtl_sdw_rt1318_l12_rt714_l0,
519                 .drv_name = "sof_sdw",
520                 .sof_tplg_filename = "sof-mtl-rt1318-l12-rt714-l0.tplg"
521         },
522         {
523                 .link_mask = GENMASK(2, 0),
524                 .links = mtl_cs42l43_cs35l56,
525                 .drv_name = "sof_sdw",
526                 .sof_tplg_filename = "sof-mtl-cs42l43-l0-cs35l56-l12.tplg",
527         },
528         {
529                 .link_mask = GENMASK(3, 0),
530                 .links = mtl_3_in_1_sdca,
531                 .drv_name = "sof_sdw",
532                 .sof_tplg_filename = "sof-mtl-rt711-l0-rt1316-l23-rt714-l1.tplg",
533         },
534         {
535                 .link_mask = BIT(0),
536                 .links = mtl_rvp,
537                 .drv_name = "sof_sdw",
538                 .sof_tplg_filename = "sof-mtl-rt711.tplg",
539         },
540         {
541                 .link_mask = BIT(0) | BIT(2),
542                 .links = rt5682_link2_max98373_link0,
543                 .drv_name = "sof_sdw",
544                 .sof_tplg_filename = "sof-mtl-sdw-rt5682-l2-max98373-l0.tplg",
545         },
546         {
547                 .link_mask = BIT(0) | BIT(2),
548                 .links = cs42l42_link0_max98363_link2,
549                 .drv_name = "sof_sdw",
550                 .sof_tplg_filename = "sof-mtl-sdw-cs42l42-l0-max98363-l2.tplg",
551         },
552         {},
553 };
554 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines);