FILE
acp6x-mach.c
File preview with syntax highlighting.
linux-6.19.14/sound/soc/amd/yc/acp6x-mach.c
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 21SND_SOC_DAILINK_DEF(acp6x_pdm, 22 DAILINK_COMP_ARRAY(COMP_CPU("acp_yc_pdm_dma.0"))); 23 24SND_SOC_DAILINK_DEF(dmic_codec, 25 DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec.0", 26 "dmic-hifi"))); 27 28SND_SOC_DAILINK_DEF(pdm_platform, 29 DAILINK_COMP_ARRAY(COMP_PLATFORM("acp_yc_pdm_dma.0"))); 30 31static 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 40static 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 47static const struct dmi_system_id yc_acp_quirk_table[] = { 48 { 49 .driver_data = &acp6x_card, 50 .matches = { 51 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 52 DMI_MATCH(DMI_PRODUCT_NAME, "HP Laptop 15-fc0xxx"), 53 } 54 }, 55 { 56 .driver_data = &acp6x_card, 57 .matches = { 58 DMI_MATCH(DMI_BOARD_VENDOR, "Dell Inc."), 59 DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5525"), 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, "21D0"), 74 } 75 }, 76 { 77 .driver_data = &acp6x_card, 78 .matches = { 79 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 80 DMI_MATCH(DMI_PRODUCT_NAME, "21D1"), 81 } 82 }, 83 { 84 .driver_data = &acp6x_card, 85 .matches = { 86 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 87 DMI_MATCH(DMI_PRODUCT_NAME, "21D2"), 88 } 89 }, 90 { 91 .driver_data = &acp6x_card, 92 .matches = { 93 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 94 DMI_MATCH(DMI_PRODUCT_NAME, "21D3"), 95 } 96 }, 97 { 98 .driver_data = &acp6x_card, 99 .matches = { 100 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 101 DMI_MATCH(DMI_PRODUCT_NAME, "21D4"), 102 } 103 }, 104 { 105 .driver_data = &acp6x_card, 106 .matches = { 107 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 108 DMI_MATCH(DMI_PRODUCT_NAME, "21D5"), 109 } 110 }, 111 { 112 .driver_data = &acp6x_card, 113 .matches = { 114 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 115 DMI_MATCH(DMI_PRODUCT_NAME, "21CF"), 116 } 117 }, 118 { 119 .driver_data = &acp6x_card, 120 .matches = { 121 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 122 DMI_MATCH(DMI_PRODUCT_NAME, "21CG"), 123 } 124 }, 125 { 126 .driver_data = &acp6x_card, 127 .matches = { 128 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 129 DMI_MATCH(DMI_PRODUCT_NAME, "21CQ"), 130 } 131 }, 132 { 133 .driver_data = &acp6x_card, 134 .matches = { 135 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 136 DMI_MATCH(DMI_PRODUCT_NAME, "21CR"), 137 } 138 }, 139 { 140 .driver_data = &acp6x_card, 141 .matches = { 142 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 143 DMI_MATCH(DMI_PRODUCT_NAME, "21CM"), 144 } 145 }, 146 { 147 .driver_data = &acp6x_card, 148 .matches = { 149 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 150 DMI_MATCH(DMI_PRODUCT_NAME, "21CN"), 151 } 152 }, 153 { 154 .driver_data = &acp6x_card, 155 .matches = { 156 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 157 DMI_MATCH(DMI_PRODUCT_NAME, "21CH"), 158 } 159 }, 160 { 161 .driver_data = &acp6x_card, 162 .matches = { 163 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 164 DMI_MATCH(DMI_PRODUCT_NAME, "21CJ"), 165 } 166 }, 167 { 168 .driver_data = &acp6x_card, 169 .matches = { 170 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 171 DMI_MATCH(DMI_PRODUCT_NAME, "21CK"), 172 } 173 }, 174 { 175 .driver_data = &acp6x_card, 176 .matches = { 177 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 178 DMI_MATCH(DMI_PRODUCT_NAME, "21CL"), 179 } 180 }, 181 { 182 .driver_data = &acp6x_card, 183 .matches = { 184 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 185 DMI_MATCH(DMI_PRODUCT_NAME, "21EF"), 186 } 187 }, 188 { 189 .driver_data = &acp6x_card, 190 .matches = { 191 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 192 DMI_MATCH(DMI_PRODUCT_NAME, "21EM"), 193 } 194 }, 195 { 196 .driver_data = &acp6x_card, 197 .matches = { 198 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 199 DMI_MATCH(DMI_PRODUCT_NAME, "21EN"), 200 } 201 }, 202 { 203 .driver_data = &acp6x_card, 204 .matches = { 205 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 206 DMI_MATCH(DMI_PRODUCT_NAME, "21HY"), 207 } 208 }, 209 { 210 .driver_data = &acp6x_card, 211 .matches = { 212 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 213 DMI_MATCH(DMI_PRODUCT_NAME, "21J0"), 214 } 215 }, 216 { 217 .driver_data = &acp6x_card, 218 .matches = { 219 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 220 DMI_MATCH(DMI_PRODUCT_NAME, "21J5"), 221 } 222 }, 223 { 224 .driver_data = &acp6x_card, 225 .matches = { 226 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 227 DMI_MATCH(DMI_PRODUCT_NAME, "21J6"), 228 } 229 }, 230 { 231 .driver_data = &acp6x_card, 232 .matches = { 233 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 234 DMI_MATCH(DMI_PRODUCT_NAME, "21M1"), 235 } 236 }, 237 { 238 .driver_data = &acp6x_card, 239 .matches = { 240 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 241 DMI_MATCH(DMI_PRODUCT_NAME, "21M3"), 242 } 243 }, 244 { 245 .driver_data = &acp6x_card, 246 .matches = { 247 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 248 DMI_MATCH(DMI_PRODUCT_NAME, "21M4"), 249 } 250 }, 251 { 252 .driver_data = &acp6x_card, 253 .matches = { 254 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 255 DMI_MATCH(DMI_PRODUCT_NAME, "21M5"), 256 } 257 }, 258 { 259 .driver_data = &acp6x_card, 260 .matches = { 261 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 262 DMI_MATCH(DMI_PRODUCT_NAME, "21M6"), 263 } 264 }, 265 { 266 .driver_data = &acp6x_card, 267 .matches = { 268 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 269 DMI_MATCH(DMI_PRODUCT_NAME, "21ME"), 270 } 271 }, 272 { 273 .driver_data = &acp6x_card, 274 .matches = { 275 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 276 DMI_MATCH(DMI_PRODUCT_NAME, "82QF"), 277 } 278 }, 279 { 280 .driver_data = &acp6x_card, 281 .matches = { 282 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 283 DMI_MATCH(DMI_PRODUCT_NAME, "82TL"), 284 } 285 }, 286 { 287 .driver_data = &acp6x_card, 288 .matches = { 289 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 290 DMI_MATCH(DMI_PRODUCT_NAME, "82UG"), 291 } 292 }, 293 { 294 .driver_data = &acp6x_card, 295 .matches = { 296 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 297 DMI_MATCH(DMI_PRODUCT_NAME, "82UU"), 298 } 299 }, 300 { 301 .driver_data = &acp6x_card, 302 .matches = { 303 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 304 DMI_MATCH(DMI_PRODUCT_NAME, "82V2"), 305 } 306 }, 307 { 308 .driver_data = &acp6x_card, 309 .matches = { 310 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 311 DMI_MATCH(DMI_PRODUCT_NAME, "82YM"), 312 } 313 }, 314 { 315 .driver_data = &acp6x_card, 316 .matches = { 317 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 318 DMI_MATCH(DMI_PRODUCT_NAME, "83AS"), 319 } 320 }, 321 { 322 .driver_data = &acp6x_card, 323 .matches = { 324 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 325 DMI_MATCH(DMI_PRODUCT_NAME, "83BS"), 326 } 327 }, 328 { 329 .driver_data = &acp6x_card, 330 .matches = { 331 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 332 DMI_MATCH(DMI_PRODUCT_NAME, "83HN"), 333 } 334 }, 335 { 336 .driver_data = &acp6x_card, 337 .matches = { 338 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 339 DMI_MATCH(DMI_PRODUCT_NAME, "83L3"), 340 } 341 }, 342 { 343 .driver_data = &acp6x_card, 344 .matches = { 345 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 346 DMI_MATCH(DMI_PRODUCT_NAME, "83N6"), 347 } 348 }, 349 { 350 .driver_data = &acp6x_card, 351 .matches = { 352 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 353 DMI_MATCH(DMI_PRODUCT_NAME, "83Q2"), 354 } 355 }, 356 { 357 .driver_data = &acp6x_card, 358 .matches = { 359 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 360 DMI_MATCH(DMI_PRODUCT_NAME, "83Q3"), 361 } 362 }, 363 { 364 .driver_data = &acp6x_card, 365 .matches = { 366 DMI_MATCH(DMI_BOARD_VENDOR, "RB"), 367 DMI_MATCH(DMI_PRODUCT_NAME, "Nitro ANV15-41"), 368 } 369 }, 370 { 371 .driver_data = &acp6x_card, 372 .matches = { 373 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 374 DMI_MATCH(DMI_PRODUCT_NAME, "83J2"), 375 } 376 }, 377 { 378 .driver_data = &acp6x_card, 379 .matches = { 380 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 381 DMI_MATCH(DMI_PRODUCT_NAME, "83J3"), 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, "UM5302TA"), 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, "M5402RA"), 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, "M5602RA"), 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, "M6400RC"), 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, "M3402RA"), 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, "M6500RC"), 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, "M6500RE"), 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, "M6501RM"), 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, "E1404FA"), 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, "E1504FA"), 452 } 453 }, 454 { 455 .driver_data = &acp6x_card, 456 .matches = { 457 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 458 DMI_MATCH(DMI_PRODUCT_NAME, "M7600RE"), 459 } 460 }, 461 { 462 .driver_data = &acp6x_card, 463 .matches = { 464 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 465 DMI_MATCH(DMI_PRODUCT_NAME, "M3502RA"), 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 15 B7ED"), 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 15 C7VF"), 480 } 481 }, 482 { 483 .driver_data = &acp6x_card, 484 .matches = { 485 DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."), 486 DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 17 D7VEK"), 487 } 488 }, 489 { 490 .driver_data = &acp6x_card, 491 .matches = { 492 DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."), 493 DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 17 D7VF"), 494 } 495 }, 496 { 497 .driver_data = &acp6x_card, 498 .matches = { 499 DMI_MATCH(DMI_BOARD_VENDOR, "Alienware"), 500 DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"), 501 } 502 }, 503 { 504 .driver_data = &acp6x_card, 505 .matches = { 506 DMI_MATCH(DMI_BOARD_VENDOR, "TIMI"), 507 DMI_MATCH(DMI_PRODUCT_NAME, "Redmi 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 Book Pro 15 2022"), 515 } 516 }, 517 { 518 .driver_data = &acp6x_card, 519 .matches = { 520 DMI_MATCH(DMI_BOARD_VENDOR, "TIMI"), 521 DMI_MATCH(DMI_PRODUCT_NAME, "Xiaomi Book Pro 14 2022"), 522 } 523 }, 524 { 525 .driver_data = &acp6x_card, 526 .matches = { 527 DMI_MATCH(DMI_BOARD_VENDOR, "TIMI"), 528 DMI_MATCH(DMI_PRODUCT_NAME, "Redmi G 2022"), 529 } 530 }, 531 { 532 .driver_data = &acp6x_card, 533 .matches = { 534 DMI_MATCH(DMI_BOARD_VENDOR, "Razer"), 535 DMI_MATCH(DMI_PRODUCT_NAME, "Blade 14 (2022) - RZ09-0427"), 536 } 537 }, 538 { 539 .driver_data = &acp6x_card, 540 .matches = { 541 DMI_MATCH(DMI_BOARD_VENDOR, "RB"), 542 DMI_MATCH(DMI_PRODUCT_NAME, "Swift SFA16-41"), 543 } 544 }, 545 { 546 .driver_data = &acp6x_card, 547 .matches = { 548 DMI_MATCH(DMI_BOARD_VENDOR, "IRBIS"), 549 DMI_MATCH(DMI_PRODUCT_NAME, "15NBC1011"), 550 } 551 }, 552 { 553 .driver_data = &acp6x_card, 554 .matches = { 555 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 556 DMI_MATCH(DMI_PRODUCT_NAME, "ASUS EXPERTBOOK PM1503CDA"), 557 } 558 }, 559 { 560 .driver_data = &acp6x_card, 561 .matches = { 562 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 563 DMI_MATCH(DMI_PRODUCT_NAME, "OMEN by HP Gaming Laptop 16z-n000"), 564 } 565 }, 566 { 567 .driver_data = &acp6x_card, 568 .matches = { 569 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 570 DMI_MATCH(DMI_PRODUCT_NAME, "Victus by HP Gaming Laptop 15-fb1xxx"), 571 } 572 }, 573 { 574 .driver_data = &acp6x_card, 575 .matches = { 576 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 577 DMI_MATCH(DMI_PRODUCT_NAME, "Victus by HP Gaming Laptop 15-fb2xxx"), 578 } 579 }, 580 { 581 .driver_data = &acp6x_card, 582 .matches = { 583 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 584 DMI_MATCH(DMI_BOARD_NAME, "8A42"), 585 } 586 }, 587 { 588 .driver_data = &acp6x_card, 589 .matches = { 590 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 591 DMI_MATCH(DMI_BOARD_NAME, "8A43"), 592 } 593 }, 594 { 595 .driver_data = &acp6x_card, 596 .matches = { 597 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 598 DMI_MATCH(DMI_BOARD_NAME, "8A44"), 599 } 600 }, 601 { 602 .driver_data = &acp6x_card, 603 .matches = { 604 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 605 DMI_MATCH(DMI_BOARD_NAME, "8A22"), 606 } 607 }, 608 { 609 .driver_data = &acp6x_card, 610 .matches = { 611 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 612 DMI_MATCH(DMI_BOARD_NAME, "8A3E"), 613 } 614 }, 615 { 616 .driver_data = &acp6x_card, 617 .matches = { 618 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 619 DMI_MATCH(DMI_BOARD_NAME, "8A7F"), 620 } 621 }, 622 { 623 .driver_data = &acp6x_card, 624 .matches = { 625 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 626 DMI_MATCH(DMI_BOARD_NAME, "8A81"), 627 } 628 }, 629 { 630 .driver_data = &acp6x_card, 631 .matches = { 632 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 633 DMI_MATCH(DMI_BOARD_NAME, "8B27"), 634 } 635 }, 636 { 637 .driver_data = &acp6x_card, 638 .matches = { 639 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 640 DMI_MATCH(DMI_BOARD_NAME, "8B2F"), 641 } 642 }, 643 { 644 .driver_data = &acp6x_card, 645 .matches = { 646 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 647 DMI_MATCH(DMI_BOARD_NAME, "8BD6"), 648 } 649 }, 650 { 651 .driver_data = &acp6x_card, 652 .matches = { 653 DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 654 DMI_MATCH(DMI_BOARD_NAME, "8EE4"), 655 } 656 }, 657 { 658 .driver_data = &acp6x_card, 659 .matches = { 660 DMI_MATCH(DMI_BOARD_VENDOR, "MECHREVO"), 661 DMI_MATCH(DMI_BOARD_NAME, "MRID6"), 662 } 663 }, 664 { 665 .driver_data = &acp6x_card, 666 .matches = { 667 DMI_MATCH(DMI_BOARD_VENDOR, "MDC"), 668 DMI_MATCH(DMI_BOARD_NAME, "Herbag_MDU"), 669 } 670 }, 671 { 672 .driver_data = &acp6x_card, 673 .matches = { 674 DMI_MATCH(DMI_BOARD_VENDOR, "System76"), 675 DMI_MATCH(DMI_PRODUCT_VERSION, "pang12"), 676 } 677 }, 678 { 679 .driver_data = &acp6x_card, 680 .matches = { 681 DMI_MATCH(DMI_BOARD_VENDOR, "System76"), 682 DMI_MATCH(DMI_PRODUCT_VERSION, "pang13"), 683 } 684 }, 685 { 686 .driver_data = &acp6x_card, 687 .matches = { 688 DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."), 689 DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 15 C7UCX"), 690 } 691 }, 692 { 693 .driver_data = &acp6x_card, 694 .matches = { 695 DMI_MATCH(DMI_BOARD_VENDOR, "HONOR"), 696 DMI_MATCH(DMI_PRODUCT_NAME, "GOH-X"), 697 } 698 }, 699 { 700 .driver_data = &acp6x_card, 701 .matches = { 702 DMI_MATCH(DMI_BOARD_VENDOR, "RB"), 703 DMI_MATCH(DMI_BOARD_NAME, "XyloD5_RBU"), 704 } 705 }, 706 { 707 .driver_data = &acp6x_card, 708 .matches = { 709 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 710 DMI_MATCH(DMI_PRODUCT_NAME, "Vivobook_ASUSLaptop M6501RR_M6501RR"), 711 } 712 }, 713 { 714 .driver_data = &acp6x_card, 715 .matches = { 716 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 717 DMI_MATCH(DMI_PRODUCT_NAME, "ASUS EXPERTBOOK BM1503CDA"), 718 } 719 }, 720 { 721 .driver_data = &acp6x_card, 722 .matches = { 723 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 724 DMI_MATCH(DMI_BOARD_NAME, "PM1503CDA"), 725 } 726 }, 727 { 728 .driver_data = &acp6x_card, 729 .matches = { 730 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."), 731 DMI_MATCH(DMI_BOARD_NAME, "BM1403CDA"), 732 } 733 }, 734 { 735 .driver_data = &acp6x_card, 736 .matches = { 737 DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."), 738 DMI_MATCH(DMI_PRODUCT_NAME, "Thin A15 B7VE"), 739 } 740 }, 741 {} 742}; 743 744static int acp6x_probe(struct platform_device *pdev) 745{ 746 const struct dmi_system_id *dmi_id; 747 struct acp6x_pdm *machine = NULL; 748 struct snd_soc_card *card; 749 struct acpi_device *adev; 750 acpi_handle handle; 751 acpi_integer dmic_status; 752 int ret; 753 bool is_dmic_enable, wov_en; 754 755 /* IF WOV entry not found, enable dmic based on AcpDmicConnected entry*/ 756 is_dmic_enable = false; 757 wov_en = true; 758 /* check the parent device's firmware node has _DSD or not */ 759 adev = ACPI_COMPANION(pdev->dev.parent); 760 if (adev) { 761 const union acpi_object *obj; 762 763 if (!acpi_dev_get_property(adev, "AcpDmicConnected", ACPI_TYPE_INTEGER, &obj) && 764 obj->integer.value == 1) 765 is_dmic_enable = true; 766 } 767 768 handle = ACPI_HANDLE(pdev->dev.parent); 769 ret = acpi_evaluate_integer(handle, "_WOV", NULL, &dmic_status); 770 if (!ACPI_FAILURE(ret)) { 771 wov_en = dmic_status; 772 if (!wov_en) 773 return -ENODEV; 774 } else { 775 /* Incase of ACPI method read failure then jump to check_dmi_entry */ 776 goto check_dmi_entry; 777 } 778 779 if (is_dmic_enable) 780 platform_set_drvdata(pdev, &acp6x_card); 781 782check_dmi_entry: 783 /* check for any DMI overrides */ 784 dmi_id = dmi_first_match(yc_acp_quirk_table); 785 if (dmi_id) 786 platform_set_drvdata(pdev, dmi_id->driver_data); 787 788 card = platform_get_drvdata(pdev); 789 if (!card) 790 return -ENODEV; 791 dev_info(&pdev->dev, "Enabling ACP DMIC support via %s", dmi_id ? "DMI" : "ACPI"); 792 acp6x_card.dev = &pdev->dev; 793 794 snd_soc_card_set_drvdata(card, machine); 795 ret = devm_snd_soc_register_card(&pdev->dev, card); 796 if (ret) { 797 return dev_err_probe(&pdev->dev, ret, 798 "snd_soc_register_card(%s) failed\n", 799 card->name); 800 } 801 return 0; 802} 803 804static struct platform_driver acp6x_mach_driver = { 805 .driver = { 806 .name = "acp_yc_mach", 807 .pm = &snd_soc_pm_ops, 808 }, 809 .probe = acp6x_probe, 810}; 811 812module_platform_driver(acp6x_mach_driver); 813 814MODULE_AUTHOR("Vijendar.Mukunda@amd.com"); 815MODULE_DESCRIPTION("AMD Yellow Carp support for DMIC"); 816MODULE_LICENSE("GPL v2"); 817MODULE_ALIAS("platform:" DRV_NAME);
~/
Read-only file preview.