ALSA: hda - Check subdevice mask in snd_hda_check_board_codec_sid_config()
authorTakashi Iwai <tiwai@suse.de>
Tue, 22 Nov 2011 18:58:56 +0000 (19:58 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 23 Nov 2011 06:31:36 +0000 (07:31 +0100)
In snd_hda_check_board_codec_sid_config(), not only comparing with the
exact value but allow the bit-mask comparison for vendor-only, etc.

Tested-by: Linus Torvalds <torvalds@linux-foundation.org>
Tested-by: Dirk Hohndel <hohndel@infradead.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_codec.c

index e44b107fdc7594c47df5458b7acc0c6440454561..4562e9de6a1ab0dc7015e28d7be14c2eafa5a6b3 100644 (file)
@@ -4046,9 +4046,9 @@ int snd_hda_check_board_codec_sid_config(struct hda_codec *codec,
 
        /* Search for codec ID */
        for (q = tbl; q->subvendor; q++) {
-               unsigned long vendorid = (q->subdevice) | (q->subvendor << 16);
-
-               if (vendorid == codec->subsystem_id)
+               unsigned int mask = 0xffff0000 | q->subdevice_mask;
+               unsigned int id = (q->subdevice | (q->subvendor << 16)) & mask;
+               if ((codec->subsystem_id & mask) == id)
                        break;
        }