| From 5e0ad0d8747f3e4803a9c3d96d64dd7332506d3c Mon Sep 17 00:00:00 2001 |
| From: Kai-Heng Feng <kai.heng.feng@canonical.com> |
| Date: Tue, 6 Dec 2016 16:56:27 +0800 |
| Subject: ALSA: hda: when comparing pin configurations, ignore assoc in addition to seq |
| |
| From: Kai-Heng Feng <kai.heng.feng@canonical.com> |
| |
| commit 5e0ad0d8747f3e4803a9c3d96d64dd7332506d3c upstream. |
| |
| 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> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/pci/hda/hda_auto_parser.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- 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_code |
| } |
| 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_ |
| 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; |