Commit 0250f7cb authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda/realtek - Fix the initialization of pin amp-in

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: default avatarTakashi Iwai <tiwai@suse.de>
parent 6518f7ac
...@@ -3921,21 +3921,27 @@ static void activate_amp_in(struct hda_codec *codec, struct nid_path *path, ...@@ -3921,21 +3921,27 @@ static void activate_amp_in(struct hda_codec *codec, struct nid_path *path,
{ {
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
hda_nid_t conn[16]; hda_nid_t conn[16];
int n, nums; int n, nums, idx;
hda_nid_t nid = path->path[i]; hda_nid_t nid = path->path[i];
nums = snd_hda_get_connections(codec, nid, conn, ARRAY_SIZE(conn)); 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++) for (n = 0; n < nums; n++)
init_amp(codec, nid, HDA_INPUT, 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; return;
/* here is a little bit tricky in comparison with activate_amp_out(); /* 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 * when aa-mixer is available, we need to enable the path as well
*/ */
for (n = 0; n < nums; n++) { 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; continue;
activate_amp(codec, nid, HDA_INPUT, n, enable); activate_amp(codec, nid, HDA_INPUT, n, enable);
} }
......
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