]> www.infradead.org Git - users/hch/dma-mapping.git/commitdiff
ALSA: hda/generic: Unconditionally prefer preferred_dacs pairs
authorTakashi Iwai <tiwai@suse.de>
Tue, 1 Oct 2024 12:14:36 +0000 (14:14 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 2 Oct 2024 06:13:34 +0000 (08:13 +0200)
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: 242d990c158d ("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.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_generic.c

index 9cff87dfbecbb1fffa35a3d8819ac82c51571bb5..b34d84fedcc8ab46a925ee8893883ea5d08df530 100644 (file)
@@ -1383,7 +1383,7 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs,
                struct nid_path *path;
                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]);
                        if (path) {
                                badness += assign_out_path_ctls(codec, path);
@@ -1395,7 +1395,7 @@ static int try_assign_dacs(struct hda_codec *codec, int num_outs,
                if (dacs[i]) {
                        if (is_dac_already_used(codec, dacs[i]))
                                badness += bad->shared_primary;
-               } else if (spec->obey_preferred_dacs) {
+               } else if (spec->preferred_dacs) {
                        badness += BAD_NO_PRIMARY_DAC;
                }