aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2012-01-10 09:16:02 -0500
committerTakashi Iwai <tiwai@suse.de>2012-01-10 09:16:02 -0500
commit4808d12d1dddb046ec86425e5f6766f02e950292 (patch)
tree4e04f621007f5901855a4616dcdc333671139f3e /sound/pci/hda
parent3a90274de3548ebb2aabfbf488cea8e275a73dc6 (diff)
ALSA: hda - Fix the detection of "Loopback Mixing" control for VIA codecs
Currently the driver checks only the out_mix_path[] for the primary output route for judging whether to create the loopback-mixing control or not. But, there are cases where aamix-routing is available only on headphone or speaker paths but not on the primary output path. So, the driver ignores such cases inappropriately. This patch fixes the check of the loopback-mixing control by testing all mix-routing paths. Cc: <stable@kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda')
-rw-r--r--sound/pci/hda/patch_via.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index ab56866cc94e..03e63fed9caf 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -2208,7 +2208,10 @@ static int via_auto_create_loopback_switch(struct hda_codec *codec)
2208{ 2208{
2209 struct via_spec *spec = codec->spec; 2209 struct via_spec *spec = codec->spec;
2210 2210
2211 if (!spec->aa_mix_nid || !spec->out_mix_path.depth) 2211 if (!spec->aa_mix_nid)
2212 return 0; /* no loopback switching available */
2213 if (!(spec->out_mix_path.depth || spec->hp_mix_path.depth ||
2214 spec->speaker_path.depth))
2212 return 0; /* no loopback switching available */ 2215 return 0; /* no loopback switching available */
2213 if (!via_clone_control(spec, &via_aamix_ctl_enum)) 2216 if (!via_clone_control(spec, &via_aamix_ctl_enum))
2214 return -ENOMEM; 2217 return -ENOMEM;