aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/hda_codec.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2007-10-10 04:04:26 -0400
committerJaroslav Kysela <perex@perex.cz>2007-10-16 10:51:08 -0400
commit1194b5b70a0a000a4ace54d94d8df5cc3ec6e3e0 (patch)
tree481421e3e06b1f4fb68df6f5d394fbcc796199da /sound/pci/hda/hda_codec.c
parent5513b0c58222d21b704cf352c554d9ab86c3fd97 (diff)
[ALSA] hda-codec - Fix Gateway laptops with STAC9200
Fix the output of Gateway laptops with STAC9200 codec chip. They require the EAPD control for some pins. These pins shouldn't be powered down. To enable EAPD control, a new model 'gateway' was added to STAC9200. The known PCI SSIDs are included in the quirk list. The fix was originally suggested by Brian Hinz, in ALSA bug#2948. Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r--sound/pci/hda/hda_codec.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 239cdd855dfe..187533e477c6 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -1630,10 +1630,24 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
1630 1630
1631 nid = codec->start_nid; 1631 nid = codec->start_nid;
1632 for (i = 0; i < codec->num_nodes; i++, nid++) { 1632 for (i = 0; i < codec->num_nodes; i++, nid++) {
1633 if (get_wcaps(codec, nid) & AC_WCAP_POWER) 1633 if (get_wcaps(codec, nid) & AC_WCAP_POWER) {
1634 unsigned int pincap;
1635 /*
1636 * don't power down the widget if it controls eapd
1637 * and EAPD_BTLENABLE is set.
1638 */
1639 pincap = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP);
1640 if (pincap & AC_PINCAP_EAPD) {
1641 int eapd = snd_hda_codec_read(codec, nid,
1642 0, AC_VERB_GET_EAPD_BTLENABLE, 0);
1643 eapd &= 0x02;
1644 if (power_state == AC_PWRST_D3 && eapd)
1645 continue;
1646 }
1634 snd_hda_codec_write(codec, nid, 0, 1647 snd_hda_codec_write(codec, nid, 0,
1635 AC_VERB_SET_POWER_STATE, 1648 AC_VERB_SET_POWER_STATE,
1636 power_state); 1649 power_state);
1650 }
1637 } 1651 }
1638 1652
1639 if (power_state == AC_PWRST_D0) { 1653 if (power_state == AC_PWRST_D0) {