summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorKai-Heng Feng <kai.heng.feng@canonical.com>2016-12-06 09:56:27 +0100
committerTakashi Iwai <tiwai@suse.de>2016-12-06 10:06:48 +0100
commit5e0ad0d8747f3e4803a9c3d96d64dd7332506d3c (patch)
tree49980578a3e75d9b2ab0486f504d75fa06bf33ba /sound
parentALSA: usb-audio: Fix race at stopping the stream (diff)
downloadlinux-5e0ad0d8747f3e4803a9c3d96d64dd7332506d3c.tar.xz
linux-5e0ad0d8747f3e4803a9c3d96d64dd7332506d3c.zip
ALSA: hda: when comparing pin configurations, ignore assoc in addition to seq
Commit [64047d7f4912 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: 64047d7f4912 ("ALSA: hda - ignore the assoc and seq when comparing...") Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com> Cc: <stable@vger.kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/hda_auto_parser.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c
index 4ad29f8d7a4a..a03cf68d0bcd 100644
--- a/sound/pci/hda/hda_auto_parser.c
+++ b/sound/pci/hda/hda_auto_parser.c
@@ -884,6 +884,8 @@ void snd_hda_apply_fixup(struct hda_codec *codec, int action)
}
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,
const struct hda_pintbl *pins)
{
@@ -901,7 +903,7 @@ static bool pin_config_match(struct hda_codec *codec,
for (; t_pins->nid; t_pins++) {
if (t_pins->nid == nid) {
found = 1;
- if ((t_pins->val & 0xfffffff0) == (cfg & 0xfffffff0))
+ if ((t_pins->val & IGNORE_SEQ_ASSOC) == (cfg & IGNORE_SEQ_ASSOC))
break;
else if ((cfg & 0xf0000000) == 0x40000000 && (t_pins->val & 0xf0000000) == 0x40000000)
break;