aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/hda_generic.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2013-01-03 10:33:02 -0500
committerTakashi Iwai <tiwai@suse.de>2013-01-12 02:43:28 -0500
commite1284af730792344f96e1428a6199e19699dfccc (patch)
tree8faf134c6e59d1aaa1830fd38780fe7b6d4d0633 /sound/pci/hda/hda_generic.c
parent985803ca91c3039afd15a2fd32a9ef5771652cee (diff)
ALSA: hda - Initialize output paths with current active states
Set path->active flag at the path creation time and let the paths initialized according to the current path->active state in set_output_and_unmute(). This allows to modify the active flag of some output paths dynamically, e.g. switching the front output route with or without aamix like patch_via.c. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/hda_generic.c')
-rw-r--r--sound/pci/hda/hda_generic.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c
index 9228175f0806..3507448c8b0d 100644
--- a/sound/pci/hda/hda_generic.c
+++ b/sound/pci/hda/hda_generic.c
@@ -873,8 +873,10 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs,
873 } 873 }
874 if (!path) 874 if (!path)
875 dac = dacs[i] = 0; 875 dac = dacs[i] = 0;
876 else 876 else {
877 print_nid_path("output", path); 877 print_nid_path("output", path);
878 path->active = true;
879 }
878 if (dac) 880 if (dac)
879 badness += assign_out_path_ctls(codec, pin, dac); 881 badness += assign_out_path_ctls(codec, pin, dac);
880 } 882 }
@@ -1045,6 +1047,7 @@ static bool map_singles(struct hda_codec *codec, int outs,
1045 dacs[i] = dac; 1047 dacs[i] = dac;
1046 found = true; 1048 found = true;
1047 print_nid_path("output", path); 1049 print_nid_path("output", path);
1050 path->active = true;
1048 } 1051 }
1049 } 1052 }
1050 return found; 1053 return found;
@@ -2418,6 +2421,7 @@ static void parse_digital(struct hda_codec *codec)
2418 if (!path) 2421 if (!path)
2419 continue; 2422 continue;
2420 print_nid_path("digout", path); 2423 print_nid_path("digout", path);
2424 path->active = true;
2421 if (!nums) { 2425 if (!nums) {
2422 spec->multiout.dig_out_nid = dig_nid; 2426 spec->multiout.dig_out_nid = dig_nid;
2423 spec->dig_out_type = spec->autocfg.dig_out_type[0]; 2427 spec->dig_out_type = spec->autocfg.dig_out_type[0];
@@ -3556,10 +3560,8 @@ static void set_output_and_unmute(struct hda_codec *codec, hda_nid_t pin,
3556 path = snd_hda_get_nid_path(codec, dac, pin); 3560 path = snd_hda_get_nid_path(codec, dac, pin);
3557 if (!path) 3561 if (!path)
3558 return; 3562 return;
3559 if (path->active) 3563 snd_hda_activate_path(codec, path, path->active, true);
3560 return; 3564 set_pin_eapd(codec, pin, path->active);
3561 snd_hda_activate_path(codec, path, true, true);
3562 set_pin_eapd(codec, pin, true);
3563} 3565}
3564 3566
3565/* initialize primary output paths */ 3567/* initialize primary output paths */