ALSA: hda - Fix initialization of multi-speaker output paths for Realtek
authorTakashi Iwai <tiwai@suse.de>
Tue, 23 Aug 2011 13:16:22 +0000 (15:16 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 23 Aug 2011 13:16:22 +0000 (15:16 +0200)
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_realtek.c

index c3e5af955620fc5a3b71fe7382c4adc04c6f3c81..f79a6d1cf5242f4078b76b4308759a7553eb72dc 100644 (file)
@@ -3223,6 +3223,7 @@ static void alc_auto_init_multi_out(struct hda_codec *codec)
 static void alc_auto_init_extra_out(struct hda_codec *codec)
 {
        struct alc_spec *spec = codec->spec;
+       int i;
        hda_nid_t pin, dac;
 
        pin = spec->autocfg.hp_pins[0];
@@ -3232,11 +3233,17 @@ static void alc_auto_init_extra_out(struct hda_codec *codec)
                        dac = spec->multiout.dac_nids[0];
                alc_auto_set_output_and_unmute(codec, pin, PIN_HP, dac);
        }
-       pin = spec->autocfg.speaker_pins[0];
-       if (pin) {
-               dac = spec->multiout.extra_out_nid[0];
-               if (!dac)
-                       dac = spec->multiout.dac_nids[0];
+       for (i = 0; i < spec->autocfg.speaker_outs; i++) {
+               pin = spec->autocfg.speaker_pins[i];
+               if (!pin)
+                       break;
+               dac = spec->multiout.extra_out_nid[i];
+               if (!dac) {
+                       if (i > 0 && spec->multiout.extra_out_nid[0])
+                               dac = spec->multiout.extra_out_nid[0];
+                       else
+                               dac = spec->multiout.dac_nids[0];
+               }
                alc_auto_set_output_and_unmute(codec, pin, PIN_OUT, dac);
        }
 }