Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/soc/amd/yc/acp6x-mach.c
26481 views
1
// SPDX-License-Identifier: GPL-2.0+
2
/*
3
* Machine driver for AMD Yellow Carp platform using DMIC
4
*
5
* Copyright 2021 Advanced Micro Devices, Inc.
6
*/
7
8
#include <sound/soc.h>
9
#include <sound/soc-dapm.h>
10
#include <linux/module.h>
11
#include <sound/pcm.h>
12
#include <sound/pcm_params.h>
13
#include <linux/io.h>
14
#include <linux/dmi.h>
15
#include <linux/acpi.h>
16
17
#include "acp6x.h"
18
19
#define DRV_NAME "acp_yc_mach"
20
21
SND_SOC_DAILINK_DEF(acp6x_pdm,
22
DAILINK_COMP_ARRAY(COMP_CPU("acp_yc_pdm_dma.0")));
23
24
SND_SOC_DAILINK_DEF(dmic_codec,
25
DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec.0",
26
"dmic-hifi")));
27
28
SND_SOC_DAILINK_DEF(pdm_platform,
29
DAILINK_COMP_ARRAY(COMP_PLATFORM("acp_yc_pdm_dma.0")));
30
31
static struct snd_soc_dai_link acp6x_dai_pdm[] = {
32
{
33
.name = "acp6x-dmic-capture",
34
.stream_name = "DMIC capture",
35
.capture_only = 1,
36
SND_SOC_DAILINK_REG(acp6x_pdm, dmic_codec, pdm_platform),
37
},
38
};
39
40
static struct snd_soc_card acp6x_card = {
41
.name = "acp6x",
42
.owner = THIS_MODULE,
43
.dai_link = acp6x_dai_pdm,
44
.num_links = 1,
45
};
46
47
static const struct dmi_system_id yc_acp_quirk_table[] = {
48
{
49
.driver_data = &acp6x_card,
50
.matches = {
51
DMI_MATCH(DMI_BOARD_VENDOR, "Dell Inc."),
52
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5525"),
53
}
54
},
55
{
56
.driver_data = &acp6x_card,
57
.matches = {
58
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
59
DMI_MATCH(DMI_PRODUCT_NAME, "21D0"),
60
}
61
},
62
{
63
.driver_data = &acp6x_card,
64
.matches = {
65
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
66
DMI_MATCH(DMI_PRODUCT_NAME, "21D0"),
67
}
68
},
69
{
70
.driver_data = &acp6x_card,
71
.matches = {
72
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
73
DMI_MATCH(DMI_PRODUCT_NAME, "21D1"),
74
}
75
},
76
{
77
.driver_data = &acp6x_card,
78
.matches = {
79
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
80
DMI_MATCH(DMI_PRODUCT_NAME, "21D2"),
81
}
82
},
83
{
84
.driver_data = &acp6x_card,
85
.matches = {
86
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
87
DMI_MATCH(DMI_PRODUCT_NAME, "21D3"),
88
}
89
},
90
{
91
.driver_data = &acp6x_card,
92
.matches = {
93
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
94
DMI_MATCH(DMI_PRODUCT_NAME, "21D4"),
95
}
96
},
97
{
98
.driver_data = &acp6x_card,
99
.matches = {
100
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
101
DMI_MATCH(DMI_PRODUCT_NAME, "21D5"),
102
}
103
},
104
{
105
.driver_data = &acp6x_card,
106
.matches = {
107
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
108
DMI_MATCH(DMI_PRODUCT_NAME, "21CF"),
109
}
110
},
111
{
112
.driver_data = &acp6x_card,
113
.matches = {
114
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
115
DMI_MATCH(DMI_PRODUCT_NAME, "21CG"),
116
}
117
},
118
{
119
.driver_data = &acp6x_card,
120
.matches = {
121
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
122
DMI_MATCH(DMI_PRODUCT_NAME, "21CQ"),
123
}
124
},
125
{
126
.driver_data = &acp6x_card,
127
.matches = {
128
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
129
DMI_MATCH(DMI_PRODUCT_NAME, "21CR"),
130
}
131
},
132
{
133
.driver_data = &acp6x_card,
134
.matches = {
135
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
136
DMI_MATCH(DMI_PRODUCT_NAME, "21CM"),
137
}
138
},
139
{
140
.driver_data = &acp6x_card,
141
.matches = {
142
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
143
DMI_MATCH(DMI_PRODUCT_NAME, "21CN"),
144
}
145
},
146
{
147
.driver_data = &acp6x_card,
148
.matches = {
149
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
150
DMI_MATCH(DMI_PRODUCT_NAME, "21CH"),
151
}
152
},
153
{
154
.driver_data = &acp6x_card,
155
.matches = {
156
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
157
DMI_MATCH(DMI_PRODUCT_NAME, "21CJ"),
158
}
159
},
160
{
161
.driver_data = &acp6x_card,
162
.matches = {
163
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
164
DMI_MATCH(DMI_PRODUCT_NAME, "21CK"),
165
}
166
},
167
{
168
.driver_data = &acp6x_card,
169
.matches = {
170
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
171
DMI_MATCH(DMI_PRODUCT_NAME, "21CL"),
172
}
173
},
174
{
175
.driver_data = &acp6x_card,
176
.matches = {
177
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
178
DMI_MATCH(DMI_PRODUCT_NAME, "21EF"),
179
}
180
},
181
{
182
.driver_data = &acp6x_card,
183
.matches = {
184
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
185
DMI_MATCH(DMI_PRODUCT_NAME, "21EM"),
186
}
187
},
188
{
189
.driver_data = &acp6x_card,
190
.matches = {
191
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
192
DMI_MATCH(DMI_PRODUCT_NAME, "21EN"),
193
}
194
},
195
{
196
.driver_data = &acp6x_card,
197
.matches = {
198
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
199
DMI_MATCH(DMI_PRODUCT_NAME, "21HY"),
200
}
201
},
202
{
203
.driver_data = &acp6x_card,
204
.matches = {
205
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
206
DMI_MATCH(DMI_PRODUCT_NAME, "21J0"),
207
}
208
},
209
{
210
.driver_data = &acp6x_card,
211
.matches = {
212
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
213
DMI_MATCH(DMI_PRODUCT_NAME, "21J5"),
214
}
215
},
216
{
217
.driver_data = &acp6x_card,
218
.matches = {
219
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
220
DMI_MATCH(DMI_PRODUCT_NAME, "21J6"),
221
}
222
},
223
{
224
.driver_data = &acp6x_card,
225
.matches = {
226
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
227
DMI_MATCH(DMI_PRODUCT_NAME, "21M1"),
228
}
229
},
230
{
231
.driver_data = &acp6x_card,
232
.matches = {
233
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
234
DMI_MATCH(DMI_PRODUCT_NAME, "21M3"),
235
}
236
},
237
{
238
.driver_data = &acp6x_card,
239
.matches = {
240
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
241
DMI_MATCH(DMI_PRODUCT_NAME, "21M4"),
242
}
243
},
244
{
245
.driver_data = &acp6x_card,
246
.matches = {
247
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
248
DMI_MATCH(DMI_PRODUCT_NAME, "21M5"),
249
}
250
},
251
{
252
.driver_data = &acp6x_card,
253
.matches = {
254
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
255
DMI_MATCH(DMI_PRODUCT_NAME, "21M6"),
256
}
257
},
258
{
259
.driver_data = &acp6x_card,
260
.matches = {
261
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
262
DMI_MATCH(DMI_PRODUCT_NAME, "21ME"),
263
}
264
},
265
{
266
.driver_data = &acp6x_card,
267
.matches = {
268
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
269
DMI_MATCH(DMI_PRODUCT_NAME, "82QF"),
270
}
271
},
272
{
273
.driver_data = &acp6x_card,
274
.matches = {
275
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
276
DMI_MATCH(DMI_PRODUCT_NAME, "82TL"),
277
}
278
},
279
{
280
.driver_data = &acp6x_card,
281
.matches = {
282
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
283
DMI_MATCH(DMI_PRODUCT_NAME, "82UG"),
284
}
285
},
286
{
287
.driver_data = &acp6x_card,
288
.matches = {
289
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
290
DMI_MATCH(DMI_PRODUCT_NAME, "82UU"),
291
}
292
},
293
{
294
.driver_data = &acp6x_card,
295
.matches = {
296
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
297
DMI_MATCH(DMI_PRODUCT_NAME, "82V2"),
298
}
299
},
300
{
301
.driver_data = &acp6x_card,
302
.matches = {
303
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
304
DMI_MATCH(DMI_PRODUCT_NAME, "82YM"),
305
}
306
},
307
{
308
.driver_data = &acp6x_card,
309
.matches = {
310
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
311
DMI_MATCH(DMI_PRODUCT_NAME, "83AS"),
312
}
313
},
314
{
315
.driver_data = &acp6x_card,
316
.matches = {
317
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
318
DMI_MATCH(DMI_PRODUCT_NAME, "83BS"),
319
}
320
},
321
{
322
.driver_data = &acp6x_card,
323
.matches = {
324
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
325
DMI_MATCH(DMI_PRODUCT_NAME, "83HN"),
326
}
327
},
328
{
329
.driver_data = &acp6x_card,
330
.matches = {
331
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
332
DMI_MATCH(DMI_PRODUCT_NAME, "83L3"),
333
}
334
},
335
{
336
.driver_data = &acp6x_card,
337
.matches = {
338
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
339
DMI_MATCH(DMI_PRODUCT_NAME, "83N6"),
340
}
341
},
342
{
343
.driver_data = &acp6x_card,
344
.matches = {
345
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
346
DMI_MATCH(DMI_PRODUCT_NAME, "83Q2"),
347
}
348
},
349
{
350
.driver_data = &acp6x_card,
351
.matches = {
352
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
353
DMI_MATCH(DMI_PRODUCT_NAME, "83Q3"),
354
}
355
},
356
{
357
.driver_data = &acp6x_card,
358
.matches = {
359
DMI_MATCH(DMI_BOARD_VENDOR, "RB"),
360
DMI_MATCH(DMI_PRODUCT_NAME, "Nitro ANV15-41"),
361
}
362
},
363
{
364
.driver_data = &acp6x_card,
365
.matches = {
366
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
367
DMI_MATCH(DMI_PRODUCT_NAME, "83J2"),
368
}
369
},
370
{
371
.driver_data = &acp6x_card,
372
.matches = {
373
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
374
DMI_MATCH(DMI_PRODUCT_NAME, "83J3"),
375
}
376
},
377
{
378
.driver_data = &acp6x_card,
379
.matches = {
380
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
381
DMI_MATCH(DMI_PRODUCT_NAME, "UM5302TA"),
382
}
383
},
384
{
385
.driver_data = &acp6x_card,
386
.matches = {
387
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
388
DMI_MATCH(DMI_PRODUCT_NAME, "M5402RA"),
389
}
390
},
391
{
392
.driver_data = &acp6x_card,
393
.matches = {
394
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
395
DMI_MATCH(DMI_PRODUCT_NAME, "M5602RA"),
396
}
397
},
398
{
399
.driver_data = &acp6x_card,
400
.matches = {
401
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
402
DMI_MATCH(DMI_PRODUCT_NAME, "M6400RC"),
403
}
404
},
405
{
406
.driver_data = &acp6x_card,
407
.matches = {
408
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
409
DMI_MATCH(DMI_PRODUCT_NAME, "M3402RA"),
410
}
411
},
412
{
413
.driver_data = &acp6x_card,
414
.matches = {
415
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
416
DMI_MATCH(DMI_PRODUCT_NAME, "M6500RC"),
417
}
418
},
419
{
420
.driver_data = &acp6x_card,
421
.matches = {
422
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
423
DMI_MATCH(DMI_PRODUCT_NAME, "M6501RM"),
424
}
425
},
426
{
427
.driver_data = &acp6x_card,
428
.matches = {
429
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
430
DMI_MATCH(DMI_PRODUCT_NAME, "E1404FA"),
431
}
432
},
433
{
434
.driver_data = &acp6x_card,
435
.matches = {
436
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
437
DMI_MATCH(DMI_PRODUCT_NAME, "E1504FA"),
438
}
439
},
440
{
441
.driver_data = &acp6x_card,
442
.matches = {
443
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
444
DMI_MATCH(DMI_PRODUCT_NAME, "M7600RE"),
445
}
446
},
447
{
448
.driver_data = &acp6x_card,
449
.matches = {
450
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
451
DMI_MATCH(DMI_PRODUCT_NAME, "M3502RA"),
452
}
453
},
454
{
455
.driver_data = &acp6x_card,
456
.matches = {
457
DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
458
DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 15 B7ED"),
459
}
460
},
461
{
462
.driver_data = &acp6x_card,
463
.matches = {
464
DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
465
DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 15 C7VF"),
466
}
467
},
468
{
469
.driver_data = &acp6x_card,
470
.matches = {
471
DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
472
DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 17 D7VEK"),
473
}
474
},
475
{
476
.driver_data = &acp6x_card,
477
.matches = {
478
DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
479
DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 17 D7VF"),
480
}
481
},
482
{
483
.driver_data = &acp6x_card,
484
.matches = {
485
DMI_MATCH(DMI_BOARD_VENDOR, "Alienware"),
486
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"),
487
}
488
},
489
{
490
.driver_data = &acp6x_card,
491
.matches = {
492
DMI_MATCH(DMI_BOARD_VENDOR, "TIMI"),
493
DMI_MATCH(DMI_PRODUCT_NAME, "Redmi Book Pro 14 2022"),
494
}
495
},
496
{
497
.driver_data = &acp6x_card,
498
.matches = {
499
DMI_MATCH(DMI_BOARD_VENDOR, "TIMI"),
500
DMI_MATCH(DMI_PRODUCT_NAME, "Redmi Book Pro 15 2022"),
501
}
502
},
503
{
504
.driver_data = &acp6x_card,
505
.matches = {
506
DMI_MATCH(DMI_BOARD_VENDOR, "TIMI"),
507
DMI_MATCH(DMI_PRODUCT_NAME, "Xiaomi Book Pro 14 2022"),
508
}
509
},
510
{
511
.driver_data = &acp6x_card,
512
.matches = {
513
DMI_MATCH(DMI_BOARD_VENDOR, "TIMI"),
514
DMI_MATCH(DMI_PRODUCT_NAME, "Redmi G 2022"),
515
}
516
},
517
{
518
.driver_data = &acp6x_card,
519
.matches = {
520
DMI_MATCH(DMI_BOARD_VENDOR, "Razer"),
521
DMI_MATCH(DMI_PRODUCT_NAME, "Blade 14 (2022) - RZ09-0427"),
522
}
523
},
524
{
525
.driver_data = &acp6x_card,
526
.matches = {
527
DMI_MATCH(DMI_BOARD_VENDOR, "RB"),
528
DMI_MATCH(DMI_PRODUCT_NAME, "Swift SFA16-41"),
529
}
530
},
531
{
532
.driver_data = &acp6x_card,
533
.matches = {
534
DMI_MATCH(DMI_BOARD_VENDOR, "IRBIS"),
535
DMI_MATCH(DMI_PRODUCT_NAME, "15NBC1011"),
536
}
537
},
538
{
539
.driver_data = &acp6x_card,
540
.matches = {
541
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
542
DMI_MATCH(DMI_PRODUCT_NAME, "OMEN by HP Gaming Laptop 16z-n000"),
543
}
544
},
545
{
546
.driver_data = &acp6x_card,
547
.matches = {
548
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
549
DMI_MATCH(DMI_PRODUCT_NAME, "Victus by HP Gaming Laptop 15-fb1xxx"),
550
}
551
},
552
{
553
.driver_data = &acp6x_card,
554
.matches = {
555
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
556
DMI_MATCH(DMI_PRODUCT_NAME, "Victus by HP Gaming Laptop 15-fb2xxx"),
557
}
558
},
559
{
560
.driver_data = &acp6x_card,
561
.matches = {
562
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
563
DMI_MATCH(DMI_BOARD_NAME, "8A42"),
564
}
565
},
566
{
567
.driver_data = &acp6x_card,
568
.matches = {
569
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
570
DMI_MATCH(DMI_BOARD_NAME, "8A43"),
571
}
572
},
573
{
574
.driver_data = &acp6x_card,
575
.matches = {
576
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
577
DMI_MATCH(DMI_BOARD_NAME, "8A44"),
578
}
579
},
580
{
581
.driver_data = &acp6x_card,
582
.matches = {
583
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
584
DMI_MATCH(DMI_BOARD_NAME, "8A22"),
585
}
586
},
587
{
588
.driver_data = &acp6x_card,
589
.matches = {
590
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
591
DMI_MATCH(DMI_BOARD_NAME, "8A3E"),
592
}
593
},
594
{
595
.driver_data = &acp6x_card,
596
.matches = {
597
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
598
DMI_MATCH(DMI_BOARD_NAME, "8A7F"),
599
}
600
},
601
{
602
.driver_data = &acp6x_card,
603
.matches = {
604
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
605
DMI_MATCH(DMI_BOARD_NAME, "8A81"),
606
}
607
},
608
{
609
.driver_data = &acp6x_card,
610
.matches = {
611
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
612
DMI_MATCH(DMI_BOARD_NAME, "8B27"),
613
}
614
},
615
{
616
.driver_data = &acp6x_card,
617
.matches = {
618
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
619
DMI_MATCH(DMI_BOARD_NAME, "8B2F"),
620
}
621
},
622
{
623
.driver_data = &acp6x_card,
624
.matches = {
625
DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
626
DMI_MATCH(DMI_BOARD_NAME, "8BD6"),
627
}
628
},
629
{
630
.driver_data = &acp6x_card,
631
.matches = {
632
DMI_MATCH(DMI_BOARD_VENDOR, "MECHREVO"),
633
DMI_MATCH(DMI_BOARD_NAME, "MRID6"),
634
}
635
},
636
{
637
.driver_data = &acp6x_card,
638
.matches = {
639
DMI_MATCH(DMI_BOARD_VENDOR, "MDC"),
640
DMI_MATCH(DMI_BOARD_NAME, "Herbag_MDU"),
641
}
642
},
643
{
644
.driver_data = &acp6x_card,
645
.matches = {
646
DMI_MATCH(DMI_BOARD_VENDOR, "System76"),
647
DMI_MATCH(DMI_PRODUCT_VERSION, "pang12"),
648
}
649
},
650
{
651
.driver_data = &acp6x_card,
652
.matches = {
653
DMI_MATCH(DMI_BOARD_VENDOR, "System76"),
654
DMI_MATCH(DMI_PRODUCT_VERSION, "pang13"),
655
}
656
},
657
{
658
.driver_data = &acp6x_card,
659
.matches = {
660
DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
661
DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 15 C7UCX"),
662
}
663
},
664
{}
665
};
666
667
static int acp6x_probe(struct platform_device *pdev)
668
{
669
const struct dmi_system_id *dmi_id;
670
struct acp6x_pdm *machine = NULL;
671
struct snd_soc_card *card;
672
struct acpi_device *adev;
673
acpi_handle handle;
674
acpi_integer dmic_status;
675
int ret;
676
bool is_dmic_enable, wov_en;
677
678
/* IF WOV entry not found, enable dmic based on AcpDmicConnected entry*/
679
is_dmic_enable = false;
680
wov_en = true;
681
/* check the parent device's firmware node has _DSD or not */
682
adev = ACPI_COMPANION(pdev->dev.parent);
683
if (adev) {
684
const union acpi_object *obj;
685
686
if (!acpi_dev_get_property(adev, "AcpDmicConnected", ACPI_TYPE_INTEGER, &obj) &&
687
obj->integer.value == 1)
688
is_dmic_enable = true;
689
}
690
691
handle = ACPI_HANDLE(pdev->dev.parent);
692
ret = acpi_evaluate_integer(handle, "_WOV", NULL, &dmic_status);
693
if (!ACPI_FAILURE(ret)) {
694
wov_en = dmic_status;
695
if (!wov_en)
696
return -ENODEV;
697
} else {
698
/* Incase of ACPI method read failure then jump to check_dmi_entry */
699
goto check_dmi_entry;
700
}
701
702
if (is_dmic_enable)
703
platform_set_drvdata(pdev, &acp6x_card);
704
705
check_dmi_entry:
706
/* check for any DMI overrides */
707
dmi_id = dmi_first_match(yc_acp_quirk_table);
708
if (dmi_id)
709
platform_set_drvdata(pdev, dmi_id->driver_data);
710
711
card = platform_get_drvdata(pdev);
712
if (!card)
713
return -ENODEV;
714
dev_info(&pdev->dev, "Enabling ACP DMIC support via %s", dmi_id ? "DMI" : "ACPI");
715
acp6x_card.dev = &pdev->dev;
716
717
snd_soc_card_set_drvdata(card, machine);
718
ret = devm_snd_soc_register_card(&pdev->dev, card);
719
if (ret) {
720
return dev_err_probe(&pdev->dev, ret,
721
"snd_soc_register_card(%s) failed\n",
722
card->name);
723
}
724
return 0;
725
}
726
727
static struct platform_driver acp6x_mach_driver = {
728
.driver = {
729
.name = "acp_yc_mach",
730
.pm = &snd_soc_pm_ops,
731
},
732
.probe = acp6x_probe,
733
};
734
735
module_platform_driver(acp6x_mach_driver);
736
737
MODULE_AUTHOR("[email protected]");
738
MODULE_DESCRIPTION("AMD Yellow Carp support for DMIC");
739
MODULE_LICENSE("GPL v2");
740
MODULE_ALIAS("platform:" DRV_NAME);
741
742