aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2014-02-05 02:49:41 -0500
committerTakashi Iwai <tiwai@suse.de>2014-02-05 02:49:41 -0500
commit276ab336b4c6e483d12fd46cbf24f97f71867710 (patch)
treecc81ed1da994ee9494e7d3ce815de2e31f238865 /sound/pci/hda
parentc20f31ec421ea4fabea5e95a6afd46c5f41e5599 (diff)
ALSA: hda - Improve loopback path lookups for AD1983
AD1983 has flexible loopback routes and the generic parser would take wrong path confusingly instead of taking individual paths via NID 0x0c and 0x0d. For avoiding it, limit the connections at these widgets so that the parser can think more straightforwardly. This fixes the regression of the missing line-in loopback on Dell machine. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=70011 Cc: <stable@vger.kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda')
-rw-r--r--sound/pci/hda/patch_analog.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
index 195cd62cdce5..df3652ad15ef 100644
--- a/sound/pci/hda/patch_analog.c
+++ b/sound/pci/hda/patch_analog.c
@@ -491,6 +491,8 @@ static int ad1983_add_spdif_mux_ctl(struct hda_codec *codec)
491static int patch_ad1983(struct hda_codec *codec) 491static int patch_ad1983(struct hda_codec *codec)
492{ 492{
493 struct ad198x_spec *spec; 493 struct ad198x_spec *spec;
494 static hda_nid_t conn_0c[] = { 0x08 };
495 static hda_nid_t conn_0d[] = { 0x09 };
494 int err; 496 int err;
495 497
496 err = alloc_ad_spec(codec); 498 err = alloc_ad_spec(codec);
@@ -501,6 +503,11 @@ static int patch_ad1983(struct hda_codec *codec)
501 spec->gen.mixer_nid = 0x0e; 503 spec->gen.mixer_nid = 0x0e;
502 spec->gen.beep_nid = 0x10; 504 spec->gen.beep_nid = 0x10;
503 set_beep_amp(spec, 0x10, 0, HDA_OUTPUT); 505 set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
506
507 /* limit the loopback routes not to confuse the parser */
508 snd_hda_override_conn_list(codec, 0x0c, ARRAY_SIZE(conn_0c), conn_0c);
509 snd_hda_override_conn_list(codec, 0x0d, ARRAY_SIZE(conn_0d), conn_0d);
510
504 err = ad198x_parse_auto_config(codec, false); 511 err = ad198x_parse_auto_config(codec, false);
505 if (err < 0) 512 if (err < 0)
506 goto error; 513 goto error;