Commit 5e0ad0d8 authored by Kai-Heng Feng's avatar Kai-Heng Feng Committed by Takashi Iwai

ALSA: hda: when comparing pin configurations, ignore assoc in addition to seq

Commit [64047d7f ALSA: hda - ignore the assoc and seq when comparing
pin configurations] intented to ignore both seq and assoc at pin
comparing, but it only ignored seq. So that commit may still fail to
match pins on some machines.
Change the bitmask to also ignore assoc.

v2: Use macro to do bit masking.

Thanks to Hui Wang for the analysis.

Fixes: 64047d7f ("ALSA: hda - ignore the assoc and seq when comparing...")
Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 16200948
...@@ -884,6 +884,8 @@ void snd_hda_apply_fixup(struct hda_codec *codec, int action) ...@@ -884,6 +884,8 @@ void snd_hda_apply_fixup(struct hda_codec *codec, int action)
} }
EXPORT_SYMBOL_GPL(snd_hda_apply_fixup); EXPORT_SYMBOL_GPL(snd_hda_apply_fixup);
#define IGNORE_SEQ_ASSOC (~(AC_DEFCFG_SEQUENCE | AC_DEFCFG_DEF_ASSOC))
static bool pin_config_match(struct hda_codec *codec, static bool pin_config_match(struct hda_codec *codec,
const struct hda_pintbl *pins) const struct hda_pintbl *pins)
{ {
...@@ -901,7 +903,7 @@ static bool pin_config_match(struct hda_codec *codec, ...@@ -901,7 +903,7 @@ static bool pin_config_match(struct hda_codec *codec,
for (; t_pins->nid; t_pins++) { for (; t_pins->nid; t_pins++) {
if (t_pins->nid == nid) { if (t_pins->nid == nid) {
found = 1; found = 1;
if ((t_pins->val & 0xfffffff0) == (cfg & 0xfffffff0)) if ((t_pins->val & IGNORE_SEQ_ASSOC) == (cfg & IGNORE_SEQ_ASSOC))
break; break;
else if ((cfg & 0xf0000000) == 0x40000000 && (t_pins->val & 0xf0000000) == 0x40000000) else if ((cfg & 0xf0000000) == 0x40000000 && (t_pins->val & 0xf0000000) == 0x40000000)
break; break;
......
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