Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/soc/amd/acp/amd-acp70-acpi-match.c
54067 views
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 "soc-acpi-amd-sdca-quirks.h"
11
#include "../mach-config.h"
12
13
static const struct snd_soc_acpi_endpoint single_endpoint = {
14
.num = 0,
15
.aggregated = 0,
16
.group_position = 0,
17
.group_id = 0
18
};
19
20
static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
21
.num = 0,
22
.aggregated = 1,
23
.group_position = 0,
24
.group_id = 1
25
};
26
27
static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
28
.num = 0,
29
.aggregated = 1,
30
.group_position = 1,
31
.group_id = 1
32
};
33
34
static const struct snd_soc_acpi_endpoint spk_2_endpoint = {
35
.num = 0,
36
.aggregated = 1,
37
.group_position = 2,
38
.group_id = 1
39
};
40
41
static const struct snd_soc_acpi_endpoint spk_3_endpoint = {
42
.num = 0,
43
.aggregated = 1,
44
.group_position = 3,
45
.group_id = 1
46
};
47
48
static const struct snd_soc_acpi_endpoint jack_amp_g1_dmic_endpoints[] = {
49
/* Jack Endpoint */
50
{
51
.num = 0,
52
.aggregated = 0,
53
.group_position = 0,
54
.group_id = 0,
55
},
56
/* Amp Endpoint, work as spk_l_endpoint */
57
{
58
.num = 1,
59
.aggregated = 1,
60
.group_position = 0,
61
.group_id = 1,
62
},
63
/* DMIC Endpoint */
64
{
65
.num = 2,
66
.aggregated = 0,
67
.group_position = 0,
68
.group_id = 0,
69
},
70
};
71
72
static const struct snd_soc_acpi_adr_device rt712_vb_1_group1_adr[] = {
73
{
74
.adr = 0x000130025D071201ull,
75
.num_endpoints = ARRAY_SIZE(jack_amp_g1_dmic_endpoints),
76
.endpoints = jack_amp_g1_dmic_endpoints,
77
.name_prefix = "rt712"
78
}
79
};
80
81
static const struct snd_soc_acpi_adr_device rt711_rt1316_group_adr[] = {
82
{
83
.adr = 0x000030025D071101ull,
84
.num_endpoints = 1,
85
.endpoints = &single_endpoint,
86
.name_prefix = "rt711"
87
},
88
{
89
.adr = 0x000030025D131601ull,
90
.num_endpoints = 1,
91
.endpoints = &spk_l_endpoint,
92
.name_prefix = "rt1316-1"
93
},
94
{
95
.adr = 0x000032025D131601ull,
96
.num_endpoints = 1,
97
.endpoints = &spk_r_endpoint,
98
.name_prefix = "rt1316-2"
99
},
100
};
101
102
static const struct snd_soc_acpi_adr_device rt714_adr[] = {
103
{
104
.adr = 0x130025d071401ull,
105
.num_endpoints = 1,
106
.endpoints = &single_endpoint,
107
.name_prefix = "rt714"
108
}
109
};
110
111
static const struct snd_soc_acpi_link_adr acp70_4_in_1_sdca[] = {
112
{ .mask = BIT(0),
113
.num_adr = ARRAY_SIZE(rt711_rt1316_group_adr),
114
.adr_d = rt711_rt1316_group_adr,
115
},
116
{
117
.mask = BIT(1),
118
.num_adr = ARRAY_SIZE(rt714_adr),
119
.adr_d = rt714_adr,
120
},
121
{}
122
};
123
124
static const struct snd_soc_acpi_endpoint rt722_endpoints[] = {
125
{
126
.num = 0,
127
.aggregated = 0,
128
.group_position = 0,
129
.group_id = 0,
130
},
131
{
132
.num = 1,
133
.aggregated = 0,
134
.group_position = 0,
135
.group_id = 0,
136
},
137
{
138
.num = 2,
139
.aggregated = 0,
140
.group_position = 0,
141
.group_id = 0,
142
},
143
};
144
145
static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = {
146
{
147
.adr = 0x000030025d072201ull,
148
.num_endpoints = ARRAY_SIZE(rt722_endpoints),
149
.endpoints = rt722_endpoints,
150
.name_prefix = "rt722"
151
}
152
};
153
154
static const struct snd_soc_acpi_adr_device rt1320_1_single_adr[] = {
155
{
156
.adr = 0x000130025D132001ull,
157
.num_endpoints = 1,
158
.endpoints = &single_endpoint,
159
.name_prefix = "rt1320-1"
160
}
161
};
162
163
static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {
164
{ /* Jack Playback Endpoint */
165
.num = 0,
166
.aggregated = 0,
167
.group_position = 0,
168
.group_id = 0,
169
},
170
{ /* DMIC Capture Endpoint */
171
.num = 1,
172
.aggregated = 0,
173
.group_position = 0,
174
.group_id = 0,
175
},
176
{ /* Jack Capture Endpoint */
177
.num = 2,
178
.aggregated = 0,
179
.group_position = 0,
180
.group_id = 0,
181
},
182
{ /* Speaker Playback Endpoint */
183
.num = 3,
184
.aggregated = 0,
185
.group_position = 0,
186
.group_id = 0,
187
},
188
};
189
190
static const struct snd_soc_acpi_adr_device cs35l56x4_l1u3210_adr[] = {
191
{
192
.adr = 0x00013301FA355601ull,
193
.num_endpoints = 1,
194
.endpoints = &spk_l_endpoint,
195
.name_prefix = "AMP1"
196
},
197
{
198
.adr = 0x00013201FA355601ull,
199
.num_endpoints = 1,
200
.endpoints = &spk_r_endpoint,
201
.name_prefix = "AMP2"
202
},
203
{
204
.adr = 0x00013101FA355601ull,
205
.num_endpoints = 1,
206
.endpoints = &spk_2_endpoint,
207
.name_prefix = "AMP3"
208
},
209
{
210
.adr = 0x00013001FA355601ull,
211
.num_endpoints = 1,
212
.endpoints = &spk_3_endpoint,
213
.name_prefix = "AMP4"
214
},
215
};
216
217
static const struct snd_soc_acpi_adr_device cs35l63x2_l0u01_adr[] = {
218
{
219
.adr = 0x00003001FA356301ull,
220
.num_endpoints = 1,
221
.endpoints = &spk_l_endpoint,
222
.name_prefix = "AMP1"
223
},
224
{
225
.adr = 0x00003101FA356301ull,
226
.num_endpoints = 1,
227
.endpoints = &spk_r_endpoint,
228
.name_prefix = "AMP2"
229
},
230
};
231
232
static const struct snd_soc_acpi_adr_device cs35l63x2_l1u01_adr[] = {
233
{
234
.adr = 0x00013001FA356301ull,
235
.num_endpoints = 1,
236
.endpoints = &spk_l_endpoint,
237
.name_prefix = "AMP1"
238
},
239
{
240
.adr = 0x00013101FA356301ull,
241
.num_endpoints = 1,
242
.endpoints = &spk_r_endpoint,
243
.name_prefix = "AMP2"
244
},
245
};
246
247
static const struct snd_soc_acpi_adr_device cs35l63x2_l1u13_adr[] = {
248
{
249
.adr = 0x00013101FA356301ull,
250
.num_endpoints = 1,
251
.endpoints = &spk_l_endpoint,
252
.name_prefix = "AMP1"
253
},
254
{
255
.adr = 0x00013301FA356301ull,
256
.num_endpoints = 1,
257
.endpoints = &spk_r_endpoint,
258
.name_prefix = "AMP2"
259
},
260
};
261
262
static const struct snd_soc_acpi_adr_device cs35l63x4_l0u0246_adr[] = {
263
{
264
.adr = 0x00003001FA356301ull,
265
.num_endpoints = 1,
266
.endpoints = &spk_l_endpoint,
267
.name_prefix = "AMP1"
268
},
269
{
270
.adr = 0x00003201FA356301ull,
271
.num_endpoints = 1,
272
.endpoints = &spk_r_endpoint,
273
.name_prefix = "AMP2"
274
},
275
{
276
.adr = 0x00003401FA356301ull,
277
.num_endpoints = 1,
278
.endpoints = &spk_2_endpoint,
279
.name_prefix = "AMP3"
280
},
281
{
282
.adr = 0x00003601FA356301ull,
283
.num_endpoints = 1,
284
.endpoints = &spk_3_endpoint,
285
.name_prefix = "AMP4"
286
},
287
};
288
289
static const struct snd_soc_acpi_adr_device cs42l43_l0u0_adr[] = {
290
{
291
.adr = 0x00003001FA424301ull,
292
.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
293
.endpoints = cs42l43_endpoints,
294
.name_prefix = "cs42l43"
295
}
296
};
297
298
static const struct snd_soc_acpi_adr_device cs42l43_l0u1_adr[] = {
299
{
300
.adr = 0x00003101FA424301ull,
301
.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
302
.endpoints = cs42l43_endpoints,
303
.name_prefix = "cs42l43"
304
}
305
};
306
307
static const struct snd_soc_acpi_adr_device cs42l43b_l0u1_adr[] = {
308
{
309
.adr = 0x00003101FA2A3B01ull,
310
.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
311
.endpoints = cs42l43_endpoints,
312
.name_prefix = "cs42l43"
313
}
314
};
315
316
static const struct snd_soc_acpi_adr_device cs42l43_l1u0_cs35l56x4_l1u0123_adr[] = {
317
{
318
.adr = 0x00013001FA424301ull,
319
.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
320
.endpoints = cs42l43_endpoints,
321
.name_prefix = "cs42l43"
322
},
323
{
324
.adr = 0x00013001FA355601ull,
325
.num_endpoints = 1,
326
.endpoints = &spk_l_endpoint,
327
.name_prefix = "AMP1"
328
},
329
{
330
.adr = 0x00013101FA355601ull,
331
.num_endpoints = 1,
332
.endpoints = &spk_r_endpoint,
333
.name_prefix = "AMP2"
334
},
335
{
336
.adr = 0x00013201FA355601ull,
337
.num_endpoints = 1,
338
.endpoints = &spk_2_endpoint,
339
.name_prefix = "AMP3"
340
},
341
{
342
.adr = 0x00013301FA355601ull,
343
.num_endpoints = 1,
344
.endpoints = &spk_3_endpoint,
345
.name_prefix = "AMP4"
346
},
347
};
348
349
static const struct snd_soc_acpi_adr_device cs42l45_l0u0_adr[] = {
350
{
351
.adr = 0x00003001FA424501ull,
352
/* Re-use endpoints, but cs42l45 has no speaker */
353
.num_endpoints = ARRAY_SIZE(cs42l43_endpoints) - 1,
354
.endpoints = cs42l43_endpoints,
355
.name_prefix = "cs42l45"
356
}
357
};
358
359
static const struct snd_soc_acpi_adr_device cs42l45_l1u0_adr[] = {
360
{
361
.adr = 0x00013001FA424501ull,
362
/* Re-use endpoints, but cs42l45 has no speaker */
363
.num_endpoints = ARRAY_SIZE(cs42l43_endpoints) - 1,
364
.endpoints = cs42l43_endpoints,
365
.name_prefix = "cs42l45"
366
}
367
};
368
369
static const struct snd_soc_acpi_link_adr acp70_cs35l56x4_l1u3210[] = {
370
{
371
.mask = BIT(1),
372
.num_adr = ARRAY_SIZE(cs35l56x4_l1u3210_adr),
373
.adr_d = cs35l56x4_l1u3210_adr,
374
},
375
{}
376
};
377
378
static const struct snd_soc_acpi_link_adr acp70_cs35l63x4_l0u0246[] = {
379
{
380
.mask = BIT(0),
381
.num_adr = ARRAY_SIZE(cs35l63x4_l0u0246_adr),
382
.adr_d = cs35l63x4_l0u0246_adr,
383
},
384
{}
385
};
386
387
static const struct snd_soc_acpi_link_adr acp70_cs42l43_l0u1[] = {
388
{
389
.mask = BIT(0),
390
.num_adr = ARRAY_SIZE(cs42l43_l0u1_adr),
391
.adr_d = cs42l43_l0u1_adr,
392
},
393
{}
394
};
395
396
static const struct snd_soc_acpi_link_adr acp70_cs42l43b_l0u1[] = {
397
{
398
.mask = BIT(0),
399
.num_adr = ARRAY_SIZE(cs42l43b_l0u1_adr),
400
.adr_d = cs42l43b_l0u1_adr,
401
},
402
{}
403
};
404
405
static const struct snd_soc_acpi_link_adr acp70_cs42l43_l0u0_cs35l56x4_l1u3210[] = {
406
{
407
.mask = BIT(0),
408
.num_adr = ARRAY_SIZE(cs42l43_l0u0_adr),
409
.adr_d = cs42l43_l0u0_adr,
410
},
411
{
412
.mask = BIT(1),
413
.num_adr = ARRAY_SIZE(cs35l56x4_l1u3210_adr),
414
.adr_d = cs35l56x4_l1u3210_adr,
415
},
416
{}
417
};
418
419
static const struct snd_soc_acpi_link_adr acp70_cs42l43_l1u0_cs35l56x4_l1u0123[] = {
420
{
421
.mask = BIT(1),
422
.num_adr = ARRAY_SIZE(cs42l43_l1u0_cs35l56x4_l1u0123_adr),
423
.adr_d = cs42l43_l1u0_cs35l56x4_l1u0123_adr,
424
},
425
{}
426
};
427
428
static const struct snd_soc_acpi_link_adr acp70_cs42l45_l0u0[] = {
429
{
430
.mask = BIT(0),
431
.num_adr = ARRAY_SIZE(cs42l45_l0u0_adr),
432
.adr_d = cs42l45_l0u0_adr,
433
},
434
{}
435
};
436
437
static const struct snd_soc_acpi_link_adr acp70_cs42l45_l0u0_cs35l63x2_l1u01[] = {
438
{
439
.mask = BIT(0),
440
.num_adr = ARRAY_SIZE(cs42l45_l0u0_adr),
441
.adr_d = cs42l45_l0u0_adr,
442
},
443
{
444
.mask = BIT(1),
445
.num_adr = ARRAY_SIZE(cs35l63x2_l1u01_adr),
446
.adr_d = cs35l63x2_l1u01_adr,
447
},
448
{}
449
};
450
451
static const struct snd_soc_acpi_link_adr acp70_cs42l45_l0u0_cs35l63x2_l1u13[] = {
452
{
453
.mask = BIT(0),
454
.num_adr = ARRAY_SIZE(cs42l45_l0u0_adr),
455
.adr_d = cs42l45_l0u0_adr,
456
},
457
{
458
.mask = BIT(1),
459
.num_adr = ARRAY_SIZE(cs35l63x2_l1u13_adr),
460
.adr_d = cs35l63x2_l1u13_adr,
461
},
462
{}
463
};
464
465
static const struct snd_soc_acpi_link_adr acp70_cs42l45_l1u0[] = {
466
{
467
.mask = BIT(1),
468
.num_adr = ARRAY_SIZE(cs42l45_l1u0_adr),
469
.adr_d = cs42l45_l1u0_adr,
470
},
471
{}
472
};
473
474
static const struct snd_soc_acpi_link_adr acp70_cs42l45_l1u0_cs35l63x2_l0u01[] = {
475
{
476
.mask = BIT(1),
477
.num_adr = ARRAY_SIZE(cs42l45_l1u0_adr),
478
.adr_d = cs42l45_l1u0_adr,
479
},
480
{
481
.mask = BIT(0),
482
.num_adr = ARRAY_SIZE(cs35l63x2_l0u01_adr),
483
.adr_d = cs35l63x2_l0u01_adr,
484
},
485
{}
486
};
487
488
static const struct snd_soc_acpi_link_adr acp70_cs42l45_l1u0_cs35l63x4_l0u0246[] = {
489
{
490
.mask = BIT(1),
491
.num_adr = ARRAY_SIZE(cs42l45_l1u0_adr),
492
.adr_d = cs42l45_l1u0_adr,
493
},
494
{
495
.mask = BIT(0),
496
.num_adr = ARRAY_SIZE(cs35l63x4_l0u0246_adr),
497
.adr_d = cs35l63x4_l0u0246_adr,
498
},
499
{}
500
};
501
502
static const struct snd_soc_acpi_link_adr acp70_alc712_vb_l1[] = {
503
{
504
.mask = BIT(1),
505
.num_adr = ARRAY_SIZE(rt712_vb_1_group1_adr),
506
.adr_d = rt712_vb_1_group1_adr,
507
},
508
{}
509
};
510
511
static const struct snd_soc_acpi_link_adr acp70_rt722_only[] = {
512
{
513
.mask = BIT(0),
514
.num_adr = ARRAY_SIZE(rt722_0_single_adr),
515
.adr_d = rt722_0_single_adr,
516
},
517
{}
518
};
519
520
static const struct snd_soc_acpi_link_adr acp70_rt722_l0_rt1320_l1[] = {
521
{
522
.mask = BIT(0),
523
.num_adr = ARRAY_SIZE(rt722_0_single_adr),
524
.adr_d = rt722_0_single_adr,
525
},
526
{
527
.mask = BIT(1),
528
.num_adr = ARRAY_SIZE(rt1320_1_single_adr),
529
.adr_d = rt1320_1_single_adr,
530
},
531
{}
532
};
533
534
struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
535
{
536
.link_mask = BIT(0) | BIT(1),
537
.links = acp70_rt722_l0_rt1320_l1,
538
.drv_name = "amd_sdw",
539
},
540
{
541
.link_mask = BIT(0) | BIT(1),
542
.links = acp70_4_in_1_sdca,
543
.drv_name = "amd_sdw",
544
},
545
{
546
.link_mask = BIT(0) | BIT(1),
547
.links = acp70_cs42l43_l0u0_cs35l56x4_l1u3210,
548
.drv_name = "amd_sdw",
549
},
550
{
551
.link_mask = BIT(0) | BIT(1),
552
.links = acp70_cs42l45_l1u0_cs35l63x4_l0u0246,
553
.drv_name = "amd_sdw",
554
},
555
{
556
.link_mask = BIT(0) | BIT(1),
557
.links = acp70_cs42l45_l0u0_cs35l63x2_l1u01,
558
.drv_name = "amd_sdw",
559
},
560
{
561
.link_mask = BIT(0) | BIT(1),
562
.links = acp70_cs42l45_l0u0_cs35l63x2_l1u13,
563
.drv_name = "amd_sdw",
564
},
565
{
566
.link_mask = BIT(0) | BIT(1),
567
.links = acp70_cs42l45_l1u0_cs35l63x2_l0u01,
568
.drv_name = "amd_sdw",
569
},
570
{
571
.link_mask = BIT(1),
572
.links = acp70_cs42l43_l1u0_cs35l56x4_l1u0123,
573
.drv_name = "amd_sdw",
574
},
575
{
576
.link_mask = BIT(1),
577
.links = acp70_cs35l56x4_l1u3210,
578
.drv_name = "amd_sdw",
579
},
580
{
581
.link_mask = BIT(0),
582
.links = acp70_cs35l63x4_l0u0246,
583
.drv_name = "amd_sdw",
584
},
585
{
586
.link_mask = BIT(0),
587
.links = acp70_rt722_only,
588
.drv_name = "amd_sdw",
589
},
590
{
591
.link_mask = BIT(0),
592
.links = acp70_cs42l43_l0u1,
593
.drv_name = "amd_sdw",
594
},
595
{
596
.link_mask = BIT(0),
597
.links = acp70_cs42l43b_l0u1,
598
.drv_name = "amd_sdw",
599
},
600
{
601
.link_mask = BIT(0),
602
.links = acp70_cs42l45_l0u0,
603
.drv_name = "amd_sdw",
604
},
605
{
606
.link_mask = BIT(1),
607
.links = acp70_cs42l45_l1u0,
608
.drv_name = "amd_sdw",
609
},
610
{
611
.link_mask = BIT(1),
612
.links = acp70_alc712_vb_l1,
613
.machine_check = snd_soc_acpi_amd_sdca_is_device_rt712_vb,
614
.drv_name = "amd_sdw",
615
},
616
{},
617
};
618
EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sdw_machines);
619
620
struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sof_sdw_machines[] = {
621
{
622
.link_mask = BIT(0),
623
.links = acp70_rt722_only,
624
.drv_name = "amd_sof_sdw",
625
.sof_tplg_filename = "sof-acp_7_0-rt722-l0.tplg",
626
.fw_filename = "sof-acp_7_0.ri",
627
},
628
{},
629
};
630
EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sof_sdw_machines);
631
632
MODULE_DESCRIPTION("AMD ACP7.0 & ACP7.1 tables and support for ACPI enumeration");
633
MODULE_LICENSE("GPL");
634
MODULE_AUTHOR("[email protected]");
635
#if IS_ENABLED(CONFIG_SND_SOC_ACPI_AMD_SDCA_QUIRKS)
636
MODULE_IMPORT_NS("SND_SOC_ACPI_AMD_SDCA_QUIRKS");
637
#endif
638
639