ALSA: hda - Fix initialization of primary outputs in hda_generic.c
authorTakashi Iwai <tiwai@suse.de>
Thu, 20 Dec 2012 14:29:21 +0000 (15:29 +0100)
committerTakashi Iwai <tiwai@suse.de>
Sat, 12 Jan 2013 07:34:17 +0000 (08:34 +0100)
There were some old codes that look not stable enough, which was
derived from the old Realtek code.  The initialization for primary
output in init_multi_out() needs to consider the case of shared DAC.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_generic.c

index 96c779b6ca25ad6cd3ffc78151554c4961deff22..a133fcfd2fb4c262d28957eb36fe1ccc33ed6b79 100644 (file)
@@ -3372,6 +3372,7 @@ static void set_output_and_unmute(struct hda_codec *codec, hda_nid_t pin,
 static void init_multi_out(struct hda_codec *codec)
 {
        struct hda_gen_spec *spec = codec->spec;
+       hda_nid_t nid, dac;
        int pin_type;
        int i;
 
@@ -3380,12 +3381,14 @@ static void init_multi_out(struct hda_codec *codec)
        else
                pin_type = PIN_OUT;
 
-       for (i = 0; i <= HDA_SIDE; i++) {
-               hda_nid_t nid = spec->autocfg.line_out_pins[i];
-               if (nid)
-                       set_output_and_unmute(codec, nid, pin_type,
-                                             spec->multiout.dac_nids[i]);
-
+       for (i = 0; i < spec->autocfg.line_outs; i++) {
+               nid = spec->autocfg.line_out_pins[i];
+               if (nid) {
+                       dac = spec->multiout.dac_nids[i];
+                       if (!dac)
+                               dac = spec->multiout.dac_nids[0];
+                       set_output_and_unmute(codec, nid, pin_type, dac);
+               }
        }
 }