ALSA: hda - Check bit mask for codec SSID in snd_hda_pick_fixup()
authorTakashi Iwai <tiwai@suse.de>
Tue, 11 Sep 2012 14:42:18 +0000 (16:42 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 11 Sep 2012 14:42:18 +0000 (16:42 +0200)
snd_hda_pick_fixup() didn't check the case where the device mask bits
are set, typically used for SND_PCI_QUIRK_VENDOR() entries.  Fix this.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_auto_parser.c

index 9acd5a964eb63b9d0b4f66c4b6c323a891ef693d..a98e25ebfd6371a05769d584cde647fe334a8bbc 100644 (file)
@@ -735,7 +735,8 @@ void snd_hda_pick_fixup(struct hda_codec *codec,
                for (q = quirk; q->subvendor; q++) {
                        unsigned int vendorid =
                                q->subdevice | (q->subvendor << 16);
-                       if (vendorid == codec->subsystem_id) {
+                       unsigned int mask = 0xffff0000 | q->subdevice_mask;
+                       if ((codec->subsystem_id & mask) == (vendorid & mask)) {
                                id = q->value;
 #ifdef CONFIG_SND_DEBUG_VERBOSE
                                name = q->name;