diff options
author | Matthew Ranostay <mranostay@embeddedalley.com> | 2009-01-22 20:53:29 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-01-23 02:06:57 -0500 |
commit | 32ed3f4640631ab7a4c0bc0f1463cf019d510341 (patch) | |
tree | 4f32c0d64f8845b768e4337f0fd1b589fbbd2cf1 | |
parent | 87e88a746d6d93242c15e380dc8cd2579b524974 (diff) |
ALSA: hda: Add STAC92HD83XXX_PWR_REF quirk
Some revisions of the 92hd8xxx codec's not supporting port power
downs in which the using of it causes capture and also randomly
playback streams to not function at all. Thus by disabling it by
default and adding a option to enable it manually will fix all issue
on current and future revisions.
Signed-off-by: Matthew Ranostay <mranostay@embeddedalley.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | Documentation/sound/alsa/HD-Audio-Models.txt | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 19 |
2 files changed, 13 insertions, 7 deletions
diff --git a/Documentation/sound/alsa/HD-Audio-Models.txt b/Documentation/sound/alsa/HD-Audio-Models.txt index 64eb1100eec1..0f5d26bea80f 100644 --- a/Documentation/sound/alsa/HD-Audio-Models.txt +++ b/Documentation/sound/alsa/HD-Audio-Models.txt | |||
@@ -349,6 +349,7 @@ STAC92HD73* | |||
349 | STAC92HD83* | 349 | STAC92HD83* |
350 | =========== | 350 | =========== |
351 | ref Reference board | 351 | ref Reference board |
352 | mic-ref Reference board with power managment for ports | ||
352 | 353 | ||
353 | STAC9872 | 354 | STAC9872 |
354 | ======== | 355 | ======== |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index c553fdb2b149..3dd4eee70b7c 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -81,6 +81,7 @@ enum { | |||
81 | 81 | ||
82 | enum { | 82 | enum { |
83 | STAC_92HD83XXX_REF, | 83 | STAC_92HD83XXX_REF, |
84 | STAC_92HD83XXX_PWR_REF, | ||
84 | STAC_92HD83XXX_MODELS | 85 | STAC_92HD83XXX_MODELS |
85 | }; | 86 | }; |
86 | 87 | ||
@@ -1734,10 +1735,12 @@ static unsigned int ref92hd83xxx_pin_configs[14] = { | |||
1734 | 1735 | ||
1735 | static unsigned int *stac92hd83xxx_brd_tbl[STAC_92HD83XXX_MODELS] = { | 1736 | static unsigned int *stac92hd83xxx_brd_tbl[STAC_92HD83XXX_MODELS] = { |
1736 | [STAC_92HD83XXX_REF] = ref92hd83xxx_pin_configs, | 1737 | [STAC_92HD83XXX_REF] = ref92hd83xxx_pin_configs, |
1738 | [STAC_92HD83XXX_PWR_REF] = ref92hd83xxx_pin_configs, | ||
1737 | }; | 1739 | }; |
1738 | 1740 | ||
1739 | static const char *stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = { | 1741 | static const char *stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = { |
1740 | [STAC_92HD83XXX_REF] = "ref", | 1742 | [STAC_92HD83XXX_REF] = "ref", |
1743 | [STAC_92HD83XXX_PWR_REF] = "mic-ref", | ||
1741 | }; | 1744 | }; |
1742 | 1745 | ||
1743 | static struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = { | 1746 | static struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = { |
@@ -4783,13 +4786,6 @@ static int patch_stac92hd83xxx(struct hda_codec *codec) | |||
4783 | AC_VERB_SET_CONNECT_SEL, num_dacs); | 4786 | AC_VERB_SET_CONNECT_SEL, num_dacs); |
4784 | 4787 | ||
4785 | spec->init = stac92hd83xxx_core_init; | 4788 | spec->init = stac92hd83xxx_core_init; |
4786 | switch (codec->vendor_id) { | ||
4787 | case 0x111d7605: | ||
4788 | break; | ||
4789 | default: | ||
4790 | spec->num_pwrs--; | ||
4791 | } | ||
4792 | |||
4793 | spec->mixer = stac92hd83xxx_mixer; | 4789 | spec->mixer = stac92hd83xxx_mixer; |
4794 | spec->num_pins = ARRAY_SIZE(stac92hd83xxx_pin_nids); | 4790 | spec->num_pins = ARRAY_SIZE(stac92hd83xxx_pin_nids); |
4795 | spec->num_dmuxes = ARRAY_SIZE(stac92hd83xxx_dmux_nids); | 4791 | spec->num_dmuxes = ARRAY_SIZE(stac92hd83xxx_dmux_nids); |
@@ -4815,6 +4811,15 @@ again: | |||
4815 | return err; | 4811 | return err; |
4816 | } | 4812 | } |
4817 | 4813 | ||
4814 | switch (codec->vendor_id) { | ||
4815 | case 0x111d7604: | ||
4816 | case 0x111d7605: | ||
4817 | if (spec->board_config == STAC_92HD83XXX_PWR_REF) | ||
4818 | break; | ||
4819 | spec->num_pwrs = 0; | ||
4820 | break; | ||
4821 | } | ||
4822 | |||
4818 | err = stac92xx_parse_auto_config(codec, 0x1d, 0); | 4823 | err = stac92xx_parse_auto_config(codec, 0x1d, 0); |
4819 | if (!err) { | 4824 | if (!err) { |
4820 | if (spec->board_config < 0) { | 4825 | if (spec->board_config < 0) { |