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>
This commit is contained in:
Takashi Iwai 2009-10-05 08:25:13 +02:00
parent 7085ec12a6
commit 15870f05e9

View file

@ -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]);
} }