Commit 15870f05 authored by Takashi Iwai's avatar Takashi Iwai

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=544161Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 7085ec12
...@@ -14357,15 +14357,16 @@ static void alc861_auto_init_multi_out(struct hda_codec *codec) ...@@ -14357,15 +14357,16 @@ static void alc861_auto_init_multi_out(struct hda_codec *codec)
static void alc861_auto_init_hp_out(struct hda_codec *codec) static void alc861_auto_init_hp_out(struct hda_codec *codec)
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
hda_nid_t pin;
pin = spec->autocfg.hp_pins[0]; if (spec->autocfg.hp_outs)
if (pin) alc861_auto_set_output_and_unmute(codec,
alc861_auto_set_output_and_unmute(codec, pin, PIN_HP, spec->autocfg.hp_pins[0],
PIN_HP,
spec->multiout.hp_nid); spec->multiout.hp_nid);
pin = spec->autocfg.speaker_pins[0]; if (spec->autocfg.speaker_outs)
if (pin) alc861_auto_set_output_and_unmute(codec,
alc861_auto_set_output_and_unmute(codec, pin, PIN_OUT, spec->autocfg.speaker_pins[0],
PIN_OUT,
spec->multiout.dac_nids[0]); spec->multiout.dac_nids[0]);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment