Commit e1284af7 authored by Takashi Iwai's avatar Takashi Iwai

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: default avatarTakashi Iwai <tiwai@suse.de>
parent 985803ca
...@@ -873,8 +873,10 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs, ...@@ -873,8 +873,10 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs,
} }
if (!path) if (!path)
dac = dacs[i] = 0; dac = dacs[i] = 0;
else else {
print_nid_path("output", path); print_nid_path("output", path);
path->active = true;
}
if (dac) if (dac)
badness += assign_out_path_ctls(codec, pin, dac); badness += assign_out_path_ctls(codec, pin, dac);
} }
...@@ -1045,6 +1047,7 @@ static bool map_singles(struct hda_codec *codec, int outs, ...@@ -1045,6 +1047,7 @@ static bool map_singles(struct hda_codec *codec, int outs,
dacs[i] = dac; dacs[i] = dac;
found = true; found = true;
print_nid_path("output", path); print_nid_path("output", path);
path->active = true;
} }
} }
return found; return found;
...@@ -2418,6 +2421,7 @@ static void parse_digital(struct hda_codec *codec) ...@@ -2418,6 +2421,7 @@ static void parse_digital(struct hda_codec *codec)
if (!path) if (!path)
continue; continue;
print_nid_path("digout", path); print_nid_path("digout", path);
path->active = true;
if (!nums) { if (!nums) {
spec->multiout.dig_out_nid = dig_nid; spec->multiout.dig_out_nid = dig_nid;
spec->dig_out_type = spec->autocfg.dig_out_type[0]; 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,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); path = snd_hda_get_nid_path(codec, dac, pin);
if (!path) if (!path)
return; return;
if (path->active) snd_hda_activate_path(codec, path, path->active, true);
return; set_pin_eapd(codec, pin, path->active);
snd_hda_activate_path(codec, path, true, true);
set_pin_eapd(codec, pin, true);
} }
/* initialize primary output paths */ /* initialize primary output paths */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment