ALSA: hda/realtek - Fix the initialization of pin amp-in
authorTakashi Iwai <tiwai@suse.de>
Fri, 14 Dec 2012 16:53:29 +0000 (17:53 +0100)
committerTakashi Iwai <tiwai@suse.de>
Sat, 12 Jan 2013 07:30:14 +0000 (08:30 +0100)
The pin widget has only a single amp value for the input even if it
has multiple "sources".  Handle the situation in activate_path().

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

index 76c67407996c4457b0b19408a1ba5028b2f85ada..b6b929ef23e1b162710a50562096ecfd3dd41f1f 100644 (file)
@@ -3921,21 +3921,27 @@ static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
 {
        struct alc_spec *spec = codec->spec;
        hda_nid_t conn[16];
-       int n, nums;
+       int n, nums, idx;
        hda_nid_t nid = path->path[i];
 
        nums = snd_hda_get_connections(codec, nid, conn, ARRAY_SIZE(conn));
+       if (get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_PIN) {
+               nums = 1;
+               idx = 0;
+       } else
+               idx = path->idx[i];
+
        for (n = 0; n < nums; n++)
                init_amp(codec, nid, HDA_INPUT, n);
 
-       if (is_ctl_associated(codec, nid, HDA_INPUT, path->idx[i]))
+       if (is_ctl_associated(codec, nid, HDA_INPUT, idx))
                return;
 
        /* here is a little bit tricky in comparison with activate_amp_out();
         * when aa-mixer is available, we need to enable the path as well
         */
        for (n = 0; n < nums; n++) {
-               if (n != path->idx[i] && conn[n] != spec->mixer_nid)
+               if (n != idx && conn[n] != spec->mixer_nid)
                        continue;
                activate_amp(codec, nid, HDA_INPUT, n, enable);
        }