Commit 1c801e7f authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda/generic: Unconditionally prefer preferred_dacs pairs

Some time ago, we introduced the obey_preferred_dacs flag for choosing
the DAC/pin pairs specified by the driver instead of parsing the
paths.  This works as expected, per se, but there have been a few
cases where we forgot to set this flag while preferred_dacs table is
already set up.  It ended up with incorrect wiring and made us
wondering why it doesn't work.

Basically, when the preferred_dacs table is provided, it means that
the driver really wants to wire up to follow that.  That is, the
presence of the preferred_dacs table itself is already a "do-it"
flag.

In this patch, we simply replace the evaluation of obey_preferred_dacs
flag with the presence of preferred_dacs table for fixing the
misbehavior.  Another patch to drop of the obsoleted flag will
follow.

Fixes: 242d990c ("ALSA: hda/generic: Add option to enforce preferred_dacs pairs")
Link: https://bugzilla.suse.com/show_bug.cgi?id=1219803
Link: https://patch.msgid.link/20241001121439.26060-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent a04dae6f
...@@ -1383,7 +1383,7 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs, ...@@ -1383,7 +1383,7 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs,
struct nid_path *path; struct nid_path *path;
hda_nid_t pin = pins[i]; hda_nid_t pin = pins[i];
if (!spec->obey_preferred_dacs) { if (!spec->preferred_dacs) {
path = snd_hda_get_path_from_idx(codec, path_idx[i]); path = snd_hda_get_path_from_idx(codec, path_idx[i]);
if (path) { if (path) {
badness += assign_out_path_ctls(codec, path); badness += assign_out_path_ctls(codec, path);
...@@ -1395,7 +1395,7 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs, ...@@ -1395,7 +1395,7 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs,
if (dacs[i]) { if (dacs[i]) {
if (is_dac_already_used(codec, dacs[i])) if (is_dac_already_used(codec, dacs[i]))
badness += bad->shared_primary; badness += bad->shared_primary;
} else if (spec->obey_preferred_dacs) { } else if (spec->preferred_dacs) {
badness += BAD_NO_PRIMARY_DAC; badness += BAD_NO_PRIMARY_DAC;
} }
......
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