| From 43a8e50a46a4e1dd1451e4a4ffa1f7695fb7d287 Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Tue, 7 Jan 2014 18:11:44 +0100 |
| Subject: ALSA: hda - Don't create duplicated ctls for loopback paths |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit 43a8e50a46a4e1dd1451e4a4ffa1f7695fb7d287 upstream. |
| |
| AD1986A mic pins (0x1d and 0x1f) share the same widget for controlling |
| the loopback volume/mute, but the generic parser didn't check it. |
| This ended up with the duplicated controls for the same effect. |
| |
| This patch adds the check of the duplication for avoiding it. |
| |
| After this fix, there will be only one control although it affects |
| both paths; this remaining issue should be fixed later in a different |
| patch. |
| |
| Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=66621 |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/pci/hda/hda_generic.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/sound/pci/hda/hda_generic.c |
| +++ b/sound/pci/hda/hda_generic.c |
| @@ -2857,9 +2857,11 @@ static bool look_for_mix_leaf_ctls(struc |
| if (num_conns < idx) |
| return false; |
| nid = list[idx]; |
| - if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT)) |
| + if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT) && |
| + !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_VOL_CTL)) |
| *mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); |
| - if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT)) |
| + if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT) && |
| + !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_MUTE_CTL)) |
| *mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); |
| |
| return *mix_val || *mute_val; |