aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_sigmatel.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-01-13 11:50:46 -0500
committerTakashi Iwai <tiwai@suse.de>2009-01-13 11:50:46 -0500
commit14ed74fbe2b917f0ad3e30cf2644203c04a45e89 (patch)
treef1c9642a8c1f5c91399a9679faf32adfd213b508 /sound/pci/hda/patch_sigmatel.c
parentc107b41c485c43f15b24743e81eaab742b3c0b67 (diff)
parent58eec4235d63e07b98544527e031e7ae807e15df (diff)
Merge branch 'topic/hda-gateway' into topic/hda
Diffstat (limited to 'sound/pci/hda/patch_sigmatel.c')
-rw-r--r--sound/pci/hda/patch_sigmatel.c127
1 files changed, 97 insertions, 30 deletions
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index 9acf2f0a2df9..0e6fc56fa378 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -55,7 +55,8 @@ enum {
55 STAC_9200_DELL_M25, 55 STAC_9200_DELL_M25,
56 STAC_9200_DELL_M26, 56 STAC_9200_DELL_M26,
57 STAC_9200_DELL_M27, 57 STAC_9200_DELL_M27,
58 STAC_9200_GATEWAY, 58 STAC_9200_M4,
59 STAC_9200_M4_2,
59 STAC_9200_PANASONIC, 60 STAC_9200_PANASONIC,
60 STAC_9200_MODELS 61 STAC_9200_MODELS
61}; 62};
@@ -94,9 +95,13 @@ enum {
94 95
95enum { 96enum {
96 STAC_925x_REF, 97 STAC_925x_REF,
98 STAC_M1,
99 STAC_M1_2,
100 STAC_M2,
97 STAC_M2_2, 101 STAC_M2_2,
98 STAC_MA6, 102 STAC_M3,
99 STAC_PA6, 103 STAC_M5,
104 STAC_M6,
100 STAC_925x_MODELS 105 STAC_925x_MODELS
101}; 106};
102 107
@@ -1334,7 +1339,16 @@ static unsigned int ref9200_pin_configs[8] = {
1334 0x02a19020, 0x01a19021, 0x90100140, 0x01813122, 1339 0x02a19020, 0x01a19021, 0x90100140, 0x01813122,
1335}; 1340};
1336 1341
1337/* 1342static unsigned int gateway9200_m4_pin_configs[8] = {
1343 0x400000fe, 0x404500f4, 0x400100f0, 0x90110010,
1344 0x400100f1, 0x02a1902e, 0x500000f2, 0x500000f3,
1345};
1346static unsigned int gateway9200_m4_2_pin_configs[8] = {
1347 0x400000fe, 0x404500f4, 0x400100f0, 0x90110010,
1348 0x400100f1, 0x02a1902e, 0x500000f2, 0x500000f3,
1349};
1350
1351/*
1338 STAC 9200 pin configs for 1352 STAC 9200 pin configs for
1339 102801A8 1353 102801A8
1340 102801DE 1354 102801DE
@@ -1464,6 +1478,8 @@ static unsigned int *stac9200_brd_tbl[STAC_9200_MODELS] = {
1464 [STAC_9200_DELL_M25] = dell9200_m25_pin_configs, 1478 [STAC_9200_DELL_M25] = dell9200_m25_pin_configs,
1465 [STAC_9200_DELL_M26] = dell9200_m26_pin_configs, 1479 [STAC_9200_DELL_M26] = dell9200_m26_pin_configs,
1466 [STAC_9200_DELL_M27] = dell9200_m27_pin_configs, 1480 [STAC_9200_DELL_M27] = dell9200_m27_pin_configs,
1481 [STAC_9200_M4] = gateway9200_m4_pin_configs,
1482 [STAC_9200_M4_2] = gateway9200_m4_2_pin_configs,
1467 [STAC_9200_PANASONIC] = ref9200_pin_configs, 1483 [STAC_9200_PANASONIC] = ref9200_pin_configs,
1468}; 1484};
1469 1485
@@ -1480,7 +1496,8 @@ static const char *stac9200_models[STAC_9200_MODELS] = {
1480 [STAC_9200_DELL_M25] = "dell-m25", 1496 [STAC_9200_DELL_M25] = "dell-m25",
1481 [STAC_9200_DELL_M26] = "dell-m26", 1497 [STAC_9200_DELL_M26] = "dell-m26",
1482 [STAC_9200_DELL_M27] = "dell-m27", 1498 [STAC_9200_DELL_M27] = "dell-m27",
1483 [STAC_9200_GATEWAY] = "gateway", 1499 [STAC_9200_M4] = "gateway-m4",
1500 [STAC_9200_M4_2] = "gateway-m4-2",
1484 [STAC_9200_PANASONIC] = "panasonic", 1501 [STAC_9200_PANASONIC] = "panasonic",
1485}; 1502};
1486 1503
@@ -1550,11 +1567,9 @@ static struct snd_pci_quirk stac9200_cfg_tbl[] = {
1550 /* Panasonic */ 1567 /* Panasonic */
1551 SND_PCI_QUIRK(0x10f7, 0x8338, "Panasonic CF-74", STAC_9200_PANASONIC), 1568 SND_PCI_QUIRK(0x10f7, 0x8338, "Panasonic CF-74", STAC_9200_PANASONIC),
1552 /* Gateway machines needs EAPD to be set on resume */ 1569 /* Gateway machines needs EAPD to be set on resume */
1553 SND_PCI_QUIRK(0x107b, 0x0205, "Gateway S-7110M", STAC_9200_GATEWAY), 1570 SND_PCI_QUIRK(0x107b, 0x0205, "Gateway S-7110M", STAC_9200_M4),
1554 SND_PCI_QUIRK(0x107b, 0x0317, "Gateway MT3423, MX341*", 1571 SND_PCI_QUIRK(0x107b, 0x0317, "Gateway MT3423, MX341*", STAC_9200_M4_2),
1555 STAC_9200_GATEWAY), 1572 SND_PCI_QUIRK(0x107b, 0x0318, "Gateway ML3019, MT3707", STAC_9200_M4_2),
1556 SND_PCI_QUIRK(0x107b, 0x0318, "Gateway ML3019, MT3707",
1557 STAC_9200_GATEWAY),
1558 /* OQO Mobile */ 1573 /* OQO Mobile */
1559 SND_PCI_QUIRK(0x1106, 0x3288, "OQO Model 2", STAC_9200_OQO), 1574 SND_PCI_QUIRK(0x1106, 0x3288, "OQO Model 2", STAC_9200_OQO),
1560 {} /* terminator */ 1575 {} /* terminator */
@@ -1565,44 +1580,85 @@ static unsigned int ref925x_pin_configs[8] = {
1565 0x90a70320, 0x02214210, 0x01019020, 0x9033032e, 1580 0x90a70320, 0x02214210, 0x01019020, 0x9033032e,
1566}; 1581};
1567 1582
1568static unsigned int stac925x_MA6_pin_configs[8] = { 1583static unsigned int stac925xM1_pin_configs[8] = {
1569 0x40c003f0, 0x424503f2, 0x01813022, 0x02a19021, 1584 0x40c003f4, 0x424503f2, 0x400000f3, 0x02a19020,
1570 0x90a70320, 0x90100211, 0x400003f1, 0x9033032e, 1585 0x40a000f0, 0x90100210, 0x400003f1, 0x9033032e,
1571}; 1586};
1572 1587
1573static unsigned int stac925x_PA6_pin_configs[8] = { 1588static unsigned int stac925xM1_2_pin_configs[8] = {
1574 0x40c003f0, 0x424503f2, 0x01813022, 0x02a19021, 1589 0x40c003f4, 0x424503f2, 0x400000f3, 0x02a19020,
1575 0x50a103f0, 0x90100211, 0x400003f1, 0x9033032e, 1590 0x40a000f0, 0x90100210, 0x400003f1, 0x9033032e,
1591};
1592
1593static unsigned int stac925xM2_pin_configs[8] = {
1594 0x40c003f4, 0x424503f2, 0x400000f3, 0x02a19020,
1595 0x40a000f0, 0x90100210, 0x400003f1, 0x9033032e,
1576}; 1596};
1577 1597
1578static unsigned int stac925xM2_2_pin_configs[8] = { 1598static unsigned int stac925xM2_2_pin_configs[8] = {
1579 0x40c003f3, 0x424503f2, 0x04180011, 0x02a19020, 1599 0x40c003f4, 0x424503f2, 0x400000f3, 0x02a19020,
1580 0x50a103f0, 0x90100212, 0x400003f1, 0x9033032e, 1600 0x40a000f0, 0x90100210, 0x400003f1, 0x9033032e,
1601};
1602
1603static unsigned int stac925xM3_pin_configs[8] = {
1604 0x40c003f4, 0x424503f2, 0x400000f3, 0x02a19020,
1605 0x40a000f0, 0x90100210, 0x400003f1, 0x503303f3,
1606};
1607
1608static unsigned int stac925xM5_pin_configs[8] = {
1609 0x40c003f4, 0x424503f2, 0x400000f3, 0x02a19020,
1610 0x40a000f0, 0x90100210, 0x400003f1, 0x9033032e,
1611};
1612
1613static unsigned int stac925xM6_pin_configs[8] = {
1614 0x40c003f4, 0x424503f2, 0x400000f3, 0x02a19020,
1615 0x40a000f0, 0x90100210, 0x400003f1, 0x90330320,
1581}; 1616};
1582 1617
1583static unsigned int *stac925x_brd_tbl[STAC_925x_MODELS] = { 1618static unsigned int *stac925x_brd_tbl[STAC_925x_MODELS] = {
1584 [STAC_REF] = ref925x_pin_configs, 1619 [STAC_REF] = ref925x_pin_configs,
1620 [STAC_M1] = stac925xM1_pin_configs,
1621 [STAC_M1_2] = stac925xM1_2_pin_configs,
1622 [STAC_M2] = stac925xM2_pin_configs,
1585 [STAC_M2_2] = stac925xM2_2_pin_configs, 1623 [STAC_M2_2] = stac925xM2_2_pin_configs,
1586 [STAC_MA6] = stac925x_MA6_pin_configs, 1624 [STAC_M3] = stac925xM3_pin_configs,
1587 [STAC_PA6] = stac925x_PA6_pin_configs, 1625 [STAC_M5] = stac925xM5_pin_configs,
1626 [STAC_M6] = stac925xM6_pin_configs,
1588}; 1627};
1589 1628
1590static const char *stac925x_models[STAC_925x_MODELS] = { 1629static const char *stac925x_models[STAC_925x_MODELS] = {
1591 [STAC_REF] = "ref", 1630 [STAC_REF] = "ref",
1631 [STAC_M1] = "m1",
1632 [STAC_M1_2] = "m1-2",
1633 [STAC_M2] = "m2",
1592 [STAC_M2_2] = "m2-2", 1634 [STAC_M2_2] = "m2-2",
1593 [STAC_MA6] = "m6", 1635 [STAC_M3] = "m3",
1594 [STAC_PA6] = "pa6", 1636 [STAC_M5] = "m5",
1637 [STAC_M6] = "m6",
1638};
1639
1640static struct snd_pci_quirk stac925x_codec_id_cfg_tbl[] = {
1641 SND_PCI_QUIRK(0x107b, 0x0316, "Gateway M255", STAC_M2),
1642 SND_PCI_QUIRK(0x107b, 0x0366, "Gateway MP6954", STAC_M5),
1643 SND_PCI_QUIRK(0x107b, 0x0461, "Gateway NX560XL", STAC_M1),
1644 SND_PCI_QUIRK(0x107b, 0x0681, "Gateway NX860", STAC_M2),
1645 SND_PCI_QUIRK(0x107b, 0x0367, "Gateway MX6453", STAC_M1_2),
1646 /* Not sure about the brand name for those */
1647 SND_PCI_QUIRK(0x107b, 0x0281, "Gateway mobile", STAC_M1),
1648 SND_PCI_QUIRK(0x107b, 0x0507, "Gateway mobile", STAC_M3),
1649 SND_PCI_QUIRK(0x107b, 0x0281, "Gateway mobile", STAC_M6),
1650 SND_PCI_QUIRK(0x107b, 0x0685, "Gateway mobile", STAC_M2_2),
1651 {} /* terminator */
1595}; 1652};
1596 1653
1597static struct snd_pci_quirk stac925x_cfg_tbl[] = { 1654static struct snd_pci_quirk stac925x_cfg_tbl[] = {
1598 /* SigmaTel reference board */ 1655 /* SigmaTel reference board */
1599 SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2668, "DFI LanParty", STAC_REF), 1656 SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2668, "DFI LanParty", STAC_REF),
1600 SND_PCI_QUIRK(0x8384, 0x7632, "Stac9202 Reference Board", STAC_REF), 1657 SND_PCI_QUIRK(0x8384, 0x7632, "Stac9202 Reference Board", STAC_REF),
1601 SND_PCI_QUIRK(0x107b, 0x0316, "Gateway M255", STAC_REF), 1658
1602 SND_PCI_QUIRK(0x107b, 0x0366, "Gateway MP6954", STAC_REF), 1659 /* Default table for unknown ID */
1603 SND_PCI_QUIRK(0x107b, 0x0461, "Gateway NX560XL", STAC_MA6), 1660 SND_PCI_QUIRK(0x1002, 0x437b, "Gateway mobile", STAC_M2_2),
1604 SND_PCI_QUIRK(0x107b, 0x0681, "Gateway NX860", STAC_PA6), 1661
1605 SND_PCI_QUIRK(0x1002, 0x437b, "Gateway MX6453", STAC_M2_2),
1606 {} /* terminator */ 1662 {} /* terminator */
1607}; 1663};
1608 1664
@@ -4392,7 +4448,8 @@ static int patch_stac9200(struct hda_codec *codec)
4392 spec->num_adcs = 1; 4448 spec->num_adcs = 1;
4393 spec->num_pwrs = 0; 4449 spec->num_pwrs = 0;
4394 4450
4395 if (spec->board_config == STAC_9200_GATEWAY || 4451 if (spec->board_config == STAC_9200_M4 ||
4452 spec->board_config == STAC_9200_M4_2 ||
4396 spec->board_config == STAC_9200_OQO) 4453 spec->board_config == STAC_9200_OQO)
4397 spec->init = stac9200_eapd_init; 4454 spec->init = stac9200_eapd_init;
4398 else 4455 else
@@ -4427,12 +4484,22 @@ static int patch_stac925x(struct hda_codec *codec)
4427 codec->spec = spec; 4484 codec->spec = spec;
4428 spec->num_pins = ARRAY_SIZE(stac925x_pin_nids); 4485 spec->num_pins = ARRAY_SIZE(stac925x_pin_nids);
4429 spec->pin_nids = stac925x_pin_nids; 4486 spec->pin_nids = stac925x_pin_nids;
4430 spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS, 4487
4488 /* Check first for codec ID */
4489 spec->board_config = snd_hda_check_board_codec_sid_config(codec,
4490 STAC_925x_MODELS,
4491 stac925x_models,
4492 stac925x_codec_id_cfg_tbl);
4493
4494 /* Now checks for PCI ID, if codec ID is not found */
4495 if (spec->board_config < 0)
4496 spec->board_config = snd_hda_check_board_config(codec,
4497 STAC_925x_MODELS,
4431 stac925x_models, 4498 stac925x_models,
4432 stac925x_cfg_tbl); 4499 stac925x_cfg_tbl);
4433 again: 4500 again:
4434 if (spec->board_config < 0) { 4501 if (spec->board_config < 0) {
4435 snd_printdd(KERN_INFO "hda_codec: Unknown model for STAC925x," 4502 snd_printdd(KERN_INFO "hda_codec: Unknown model for STAC925x,"
4436 "using BIOS defaults\n"); 4503 "using BIOS defaults\n");
4437 err = stac92xx_save_bios_config_regs(codec); 4504 err = stac92xx_save_bios_config_regs(codec);
4438 } else 4505 } else