diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-10-05 02:25:13 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-10-05 02:29:49 -0400 |
commit | 15870f05e90a365f8022da416e713be0c5024e2f (patch) | |
tree | 36b77ec1a4c315fafaf2dcd63090f4eac755ae30 /sound | |
parent | 7085ec12a62ec2e990bc7d984bee7ba28e5c1dec (diff) |
ALSA: hda - Fix invalid initializations for ALC861 auto mode
The recent auto-parser doesn't work for machines with a single output
with ALC861, such as Toshiba laptops, because alc_subsystem_id() sets
the hp_pins[0] while it's listed in line_outs[0].
This ends up with the doubled initialization of the same mixer widget,
and it mutes the DAC route because hp_pins has no DAC assigned.
To fix this problem, just check spec->autocfg.hp_outs and speaker_outs
so that they are really detected pins.
Reference: Novell bnc#544161
http://bugzilla.novell.com/show_bug.cgi?id=544161
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 7810d3dcad83..c1e05994cc31 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -14357,15 +14357,16 @@ static void alc861_auto_init_multi_out(struct hda_codec *codec) | |||
14357 | static void alc861_auto_init_hp_out(struct hda_codec *codec) | 14357 | static void alc861_auto_init_hp_out(struct hda_codec *codec) |
14358 | { | 14358 | { |
14359 | struct alc_spec *spec = codec->spec; | 14359 | struct alc_spec *spec = codec->spec; |
14360 | hda_nid_t pin; | ||
14361 | 14360 | ||
14362 | pin = spec->autocfg.hp_pins[0]; | 14361 | if (spec->autocfg.hp_outs) |
14363 | if (pin) | 14362 | alc861_auto_set_output_and_unmute(codec, |
14364 | alc861_auto_set_output_and_unmute(codec, pin, PIN_HP, | 14363 | spec->autocfg.hp_pins[0], |
14364 | PIN_HP, | ||
14365 | spec->multiout.hp_nid); | 14365 | spec->multiout.hp_nid); |
14366 | pin = spec->autocfg.speaker_pins[0]; | 14366 | if (spec->autocfg.speaker_outs) |
14367 | if (pin) | 14367 | alc861_auto_set_output_and_unmute(codec, |
14368 | alc861_auto_set_output_and_unmute(codec, pin, PIN_OUT, | 14368 | spec->autocfg.speaker_pins[0], |
14369 | PIN_OUT, | ||
14369 | spec->multiout.dac_nids[0]); | 14370 | spec->multiout.dac_nids[0]); |
14370 | } | 14371 | } |
14371 | 14372 | ||