summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2013-01-03 19:33:02 +0400
committerTakashi Iwai <tiwai@suse.de>2013-01-12 11:43:28 +0400
commite1284af730792344f96e1428a6199e19699dfccc (patch)
tree8faf134c6e59d1aaa1830fd38780fe7b6d4d0633
parent985803ca91c3039afd15a2fd32a9ef5771652cee (diff)
downloadlinux-e1284af730792344f96e1428a6199e19699dfccc.tar.xz
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>
-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,
}
if (!path)
dac = dacs[i] = 0;
- else
+ else {
print_nid_path("output", path);
+ path->active = true;
+ }
if (dac)
badness += assign_out_path_ctls(codec, pin, dac);
}
@@ -1045,6 +1047,7 @@ static bool map_singles(struct hda_codec *codec, int outs,
dacs[i] = dac;
found = true;
print_nid_path("output", path);
+ path->active = true;
}
}
return found;
@@ -2418,6 +2421,7 @@ static void parse_digital(struct hda_codec *codec)
if (!path)
continue;
print_nid_path("digout", path);
+ path->active = true;
if (!nums) {
spec->multiout.dig_out_nid = dig_nid;
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,
path = snd_hda_get_nid_path(codec, dac, pin);
if (!path)
return;
- if (path->active)
- return;
- snd_hda_activate_path(codec, path, true, true);
- set_pin_eapd(codec, pin, true);
+ snd_hda_activate_path(codec, path, path->active, true);
+ set_pin_eapd(codec, pin, path->active);
}
/* initialize primary output paths */