Commit f87498b6 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Check aamix-output paths from other DACs, too

Many codecs provide routes to multiple output pins through an aamix
widget, but most of them do it only from a single DAC.  However, the
current generic parser checks only the aamix paths from the original
(directly bound) DACs through aamix NID, and miss the path:
  primary DAC -> aamix -> target out pin

This patch adds a more check for the routes like the above.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 1fa335b0
...@@ -1313,14 +1313,26 @@ static int check_aamix_out_path(struct hda_codec *codec, int path_idx) ...@@ -1313,14 +1313,26 @@ static int check_aamix_out_path(struct hda_codec *codec, int path_idx)
{ {
struct hda_gen_spec *spec = codec->spec; struct hda_gen_spec *spec = codec->spec;
struct nid_path *path; struct nid_path *path;
hda_nid_t dac, pin;
path = snd_hda_get_path_from_idx(codec, path_idx); path = snd_hda_get_path_from_idx(codec, path_idx);
if (!path || !path->depth || if (!path || !path->depth ||
is_nid_contained(path, spec->mixer_nid)) is_nid_contained(path, spec->mixer_nid))
return 0; return 0;
path = snd_hda_add_new_path(codec, path->path[0], dac = path->path[0];
path->path[path->depth - 1], pin = path->path[path->depth - 1];
spec->mixer_nid); path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
if (!path) {
if (dac != spec->multiout.dac_nids[0])
dac = spec->multiout.dac_nids[0];
else if (spec->multiout.hp_out_nid[0])
dac = spec->multiout.hp_out_nid[0];
else if (spec->multiout.extra_out_nid[0])
dac = spec->multiout.extra_out_nid[0];
if (dac)
path = snd_hda_add_new_path(codec, dac, pin,
spec->mixer_nid);
}
if (!path) if (!path)
return 0; return 0;
/* print_nid_path("output-aamix", path); */ /* print_nid_path("output-aamix", path); */
......
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