Commit bafdb727 authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'topic/quirk-cleanup' into for-linus

parents 5b56eec7 8bd4bb7a
...@@ -458,21 +458,33 @@ static inline int __snd_bug_on(int cond) ...@@ -458,21 +458,33 @@ static inline int __snd_bug_on(int cond)
struct snd_pci_quirk { struct snd_pci_quirk {
unsigned short subvendor; /* PCI subvendor ID */ unsigned short subvendor; /* PCI subvendor ID */
unsigned short subdevice; /* PCI subdevice ID */ unsigned short subdevice; /* PCI subdevice ID */
unsigned short subdevice_mask; /* bitmask to match */
int value; /* value */ int value; /* value */
#ifdef CONFIG_SND_DEBUG_VERBOSE #ifdef CONFIG_SND_DEBUG_VERBOSE
const char *name; /* name of the device (optional) */ const char *name; /* name of the device (optional) */
#endif #endif
}; };
#define _SND_PCI_QUIRK_ID(vend,dev) \ #define _SND_PCI_QUIRK_ID_MASK(vend, mask, dev) \
.subvendor = (vend), .subdevice = (dev) .subvendor = (vend), .subdevice = (dev), .subdevice_mask = (mask)
#define _SND_PCI_QUIRK_ID(vend, dev) \
_SND_PCI_QUIRK_ID_MASK(vend, 0xffff, dev)
#define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)} #define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)}
#ifdef CONFIG_SND_DEBUG_VERBOSE #ifdef CONFIG_SND_DEBUG_VERBOSE
#define SND_PCI_QUIRK(vend,dev,xname,val) \ #define SND_PCI_QUIRK(vend,dev,xname,val) \
{_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)} {_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)}
#define SND_PCI_QUIRK_VENDOR(vend, xname, val) \
{_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val), .name = (xname)}
#define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val) \
{_SND_PCI_QUIRK_ID_MASK(vend, mask, dev), \
.value = (val), .name = (xname)}
#else #else
#define SND_PCI_QUIRK(vend,dev,xname,val) \ #define SND_PCI_QUIRK(vend,dev,xname,val) \
{_SND_PCI_QUIRK_ID(vend, dev), .value = (val)} {_SND_PCI_QUIRK_ID(vend, dev), .value = (val)}
#define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val) \
{_SND_PCI_QUIRK_ID_MASK(vend, mask, dev), .value = (val)}
#define SND_PCI_QUIRK_VENDOR(vend, xname, val) \
{_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val)}
#endif #endif
const struct snd_pci_quirk * const struct snd_pci_quirk *
......
...@@ -95,12 +95,14 @@ snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list) ...@@ -95,12 +95,14 @@ snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list)
{ {
const struct snd_pci_quirk *q; const struct snd_pci_quirk *q;
for (q = list; q->subvendor; q++) for (q = list; q->subvendor; q++) {
if (q->subvendor == pci->subsystem_vendor && if (q->subvendor != pci->subsystem_vendor)
(!q->subdevice || q->subdevice == pci->subsystem_device)) continue;
if (!q->subdevice ||
(pci->subsystem_device & q->subdevice_mask) == q->subdevice)
return q; return q;
}
return NULL; return NULL;
} }
EXPORT_SYMBOL(snd_pci_quirk_lookup); EXPORT_SYMBOL(snd_pci_quirk_lookup);
#endif #endif
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