aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobin Davis <tobinx.b.davis@intel.com>2006-08-22 13:44:45 -0400
committerJaroslav Kysela <perex@suse.cz>2006-09-23 04:42:06 -0400
commit81d3dbde76eedcd3ede8a73eb72790d67fa254a9 (patch)
tree391d9fb0fd5384f602c0c17239d4e8616d311a99
parent948a4db217235ba51c41d8e7c2ffcf9432e57274 (diff)
[ALSA] hda-codec - Add support for new Intel boards with Stac9227 codec
This patch adds full 5.1 audio support for Intel boards with the SigmaTel 9227 codec chip (946, 963, 965 series). Signed-off-by: Tobin Davis <tobinx.b.davis@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
-rw-r--r--sound/pci/hda/patch_sigmatel.c126
1 files changed, 92 insertions, 34 deletions
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 7b29288690cb..73ca566e9eb7 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -377,18 +377,11 @@ static unsigned int d945gtp5_pin_configs[10] = {
377 0x02a19320, 0x40000100, 377 0x02a19320, 0x40000100,
378}; 378};
379 379
380static unsigned int d965_2112_pin_configs[10] = {
381 0x0221401f, 0x40000100, 0x40000100, 0x01014011,
382 0x01a19021, 0x01813024, 0x01452130, 0x40000100,
383 0x02a19320, 0x40000100,
384};
385
386static unsigned int *stac922x_brd_tbl[STAC_922X_MODELS] = { 380static unsigned int *stac922x_brd_tbl[STAC_922X_MODELS] = {
387 [STAC_REF] = ref922x_pin_configs, 381 [STAC_REF] = ref922x_pin_configs,
388 [STAC_D945GTP3] = d945gtp3_pin_configs, 382 [STAC_D945GTP3] = d945gtp3_pin_configs,
389 [STAC_D945GTP5] = d945gtp5_pin_configs, 383 [STAC_D945GTP5] = d945gtp5_pin_configs,
390 [STAC_MACMINI] = d945gtp5_pin_configs, 384 [STAC_MACMINI] = d945gtp5_pin_configs,
391 [STAC_D965_2112] = d965_2112_pin_configs,
392}; 385};
393 386
394static struct hda_board_config stac922x_cfg_tbl[] = { 387static struct hda_board_config stac922x_cfg_tbl[] = {
@@ -493,8 +486,16 @@ static unsigned int ref927x_pin_configs[14] = {
493 0x01c41030, 0x40000100, 486 0x01c41030, 0x40000100,
494}; 487};
495 488
489static unsigned int d965_2112_pin_configs[14] = {
490 0x0221401f, 0x02a19120, 0x40000100, 0x01014011,
491 0x01a19021, 0x01813024, 0x40000100, 0x40000100,
492 0x40000100, 0x40000100, 0x40000100, 0x40000100,
493 0x40000100, 0x40000100
494};
495
496static unsigned int *stac927x_brd_tbl[] = { 496static unsigned int *stac927x_brd_tbl[] = {
497 ref927x_pin_configs, 497 [STAC_REF] = ref927x_pin_configs,
498 [STAC_D965_2112] = d965_2112_pin_configs,
498}; 499};
499 500
500static struct hda_board_config stac927x_cfg_tbl[] = { 501static struct hda_board_config stac927x_cfg_tbl[] = {
@@ -502,6 +503,66 @@ static struct hda_board_config stac927x_cfg_tbl[] = {
502 .pci_subvendor = PCI_VENDOR_ID_INTEL, 503 .pci_subvendor = PCI_VENDOR_ID_INTEL,
503 .pci_subdevice = 0x2668, /* DFI LanParty */ 504 .pci_subdevice = 0x2668, /* DFI LanParty */
504 .config = STAC_REF }, /* SigmaTel reference board */ 505 .config = STAC_REF }, /* SigmaTel reference board */
506 /* SigmaTel 9227 reference board */
507 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
508 .pci_subdevice = 0x284b,
509 .config = STAC_D965_284B },
510 /* Intel 946 based systems */
511 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
512 .pci_subdevice = 0x3d01,
513 .config = STAC_D965_2112 }, /* D946 configuration */
514 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
515 .pci_subdevice = 0xa301,
516 .config = STAC_D965_2112 }, /* Intel D946GZT - 3 stack */
517 /* 965 based systems */
518 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
519 .pci_subdevice = 0x2116,
520 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
521 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
522 .pci_subdevice = 0x2115,
523 .config = STAC_D965_2112 }, /* Intel DQ965WC - 3 Stack */
524 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
525 .pci_subdevice = 0x2114,
526 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
527 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
528 .pci_subdevice = 0x2113,
529 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
530 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
531 .pci_subdevice = 0x2112,
532 .config = STAC_D965_2112 }, /* Intel DG965MS - 3 Stack */
533 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
534 .pci_subdevice = 0x2111,
535 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
536 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
537 .pci_subdevice = 0x2110,
538 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
539 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
540 .pci_subdevice = 0x2009,
541 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
542 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
543 .pci_subdevice = 0x2008,
544 .config = STAC_D965_2112 }, /* Intel DQ965GF - 3 Stack */
545 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
546 .pci_subdevice = 0x2007,
547 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
548 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
549 .pci_subdevice = 0x2006,
550 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
551 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
552 .pci_subdevice = 0x2005,
553 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
554 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
555 .pci_subdevice = 0x2004,
556 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
557 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
558 .pci_subdevice = 0x2003,
559 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
560 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
561 .pci_subdevice = 0x2002,
562 .config = STAC_D965_2112 }, /* Intel D965 3Stack config */
563 { .pci_subvendor = PCI_VENDOR_ID_INTEL,
564 .pci_subdevice = 0x2001,
565 .config = STAC_D965_2112 }, /* Intel DQ965GF - 3 Stackg */
505 {} /* terminator */ 566 {} /* terminator */
506}; 567};
507 568
@@ -1391,25 +1452,6 @@ static int patch_stac922x(struct hda_codec *codec)
1391 1452
1392 spec->multiout.dac_nids = spec->dac_nids; 1453 spec->multiout.dac_nids = spec->dac_nids;
1393 1454
1394 switch (spec->board_config) {
1395 case STAC_D965_2112:
1396 spec->adc_nids = stac9227_adc_nids;
1397 spec->mux_nids = stac9227_mux_nids;
1398#if 0
1399 spec->multiout.dac_nids = d965_2112_dac_nids;
1400 spec->multiout.num_dacs = ARRAY_SIZE(d965_2112_dac_nids);
1401#endif
1402 spec->init = d965_2112_core_init;
1403 spec->mixer = stac9227_mixer;
1404 break;
1405 case STAC_D965_284B:
1406 spec->adc_nids = stac9227_adc_nids;
1407 spec->mux_nids = stac9227_mux_nids;
1408 spec->init = stac9227_core_init;
1409 spec->mixer = stac9227_mixer;
1410 break;
1411 }
1412
1413 err = stac92xx_parse_auto_config(codec, 0x08, 0x09); 1455 err = stac92xx_parse_auto_config(codec, 0x08, 0x09);
1414 if (err < 0) { 1456 if (err < 0) {
1415 stac92xx_free(codec); 1457 stac92xx_free(codec);
@@ -1437,19 +1479,35 @@ static int patch_stac927x(struct hda_codec *codec)
1437 spec->board_config = snd_hda_check_board_config(codec, stac927x_cfg_tbl); 1479 spec->board_config = snd_hda_check_board_config(codec, stac927x_cfg_tbl);
1438 if (spec->board_config < 0) 1480 if (spec->board_config < 0)
1439 snd_printdd(KERN_INFO "hda_codec: Unknown model for STAC927x, using BIOS defaults\n"); 1481 snd_printdd(KERN_INFO "hda_codec: Unknown model for STAC927x, using BIOS defaults\n");
1440 else { 1482 else if (stac927x_brd_tbl[spec->board_config] != NULL) {
1441 spec->num_pins = 14; 1483 spec->num_pins = 14;
1442 spec->pin_nids = stac927x_pin_nids; 1484 spec->pin_nids = stac927x_pin_nids;
1443 spec->pin_configs = stac927x_brd_tbl[spec->board_config]; 1485 spec->pin_configs = stac927x_brd_tbl[spec->board_config];
1444 stac92xx_set_config_regs(codec); 1486 stac92xx_set_config_regs(codec);
1445 } 1487 }
1446 1488
1447 spec->adc_nids = stac927x_adc_nids; 1489 switch (spec->board_config) {
1448 spec->mux_nids = stac927x_mux_nids; 1490 case STAC_D965_2112:
1449 spec->num_muxes = 3; 1491 spec->adc_nids = stac927x_adc_nids;
1450 1492 spec->mux_nids = stac927x_mux_nids;
1451 spec->init = stac927x_core_init; 1493 spec->num_muxes = 3;
1452 spec->mixer = stac927x_mixer; 1494 spec->init = d965_2112_core_init;
1495 spec->mixer = stac9227_mixer;
1496 break;
1497 case STAC_D965_284B:
1498 spec->adc_nids = stac9227_adc_nids;
1499 spec->mux_nids = stac9227_mux_nids;
1500 spec->num_muxes = 2;
1501 spec->init = stac9227_core_init;
1502 spec->mixer = stac9227_mixer;
1503 break;
1504 default:
1505 spec->adc_nids = stac927x_adc_nids;
1506 spec->mux_nids = stac927x_mux_nids;
1507 spec->num_muxes = 3;
1508 spec->init = stac927x_core_init;
1509 spec->mixer = stac927x_mixer;
1510 }
1453 1511
1454 spec->multiout.dac_nids = spec->dac_nids; 1512 spec->multiout.dac_nids = spec->dac_nids;
1455 1513