Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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
13static const struct snd_soc_acpi_codecs mtl_max98357a_amp = {
14 .num_codecs = 1,
15 .codecs = {"MX98357A"}
16};
17
18static const struct snd_soc_acpi_codecs mtl_max98360a_amp = {
19 .num_codecs = 1,
20 .codecs = {"MX98360A"}
21};
22
23static const struct snd_soc_acpi_codecs mtl_rt1019p_amp = {
24 .num_codecs = 1,
25 .codecs = {"RTL1019"}
26};
27
28static const struct snd_soc_acpi_codecs mtl_rt5682_rt5682s_hp = {
29 .num_codecs = 2,
30 .codecs = {"10EC5682", "RTL5682"},
31};
32
33static const struct snd_soc_acpi_codecs mtl_essx_83x6 = {
34 .num_codecs = 3,
35 .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
36};
37
38static const struct snd_soc_acpi_codecs mtl_lt6911_hdmi = {
39 .num_codecs = 1,
40 .codecs = {"INTC10B0"}
41};
42
43struct 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};
88EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_machines);
89
90static const struct snd_soc_acpi_endpoint single_endpoint = {
91 .num = 0,
92 .aggregated = 0,
93 .group_position = 0,
94 .group_id = 0,
95};
96
97static 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
104static 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
111static 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
126static 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
133static 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
140static 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
149static 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
158static 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
167static 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
176static 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
185static 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
200static 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
209static 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
218static 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
227static 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
236static 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
245static 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
254static 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
263static 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
272static 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
281static 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
295static 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
304static 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 = "cs35l56-8"
310 },
311 {
312 .adr = 0x00013601FA355601ull,
313 .num_endpoints = 1,
314 .endpoints = &spk_3_endpoint,
315 .name_prefix = "cs35l56-7"
316 }
317};
318
319static 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 = "cs35l56-1"
325 },
326 {
327 .adr = 0x00023201FA355601ull,
328 .num_endpoints = 1,
329 .endpoints = &spk_2_endpoint,
330 .name_prefix = "cs35l56-2"
331 }
332};
333
334static 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
349static 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
358static 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
382static 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
401static 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
425static 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
440static 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
449static 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
464static 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 */
484struct 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};
554EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_mtl_sdw_machines);