ALSA: Add subdevice_mask field to quirk entries
Introduced a new field, subdevice_mask, which specifies the bitmask to match with the given subdevice ID. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Родитель
18e352e4a7
Коммит
8bd4bb7a35
|
@ -446,21 +446,33 @@ static inline int __snd_bug_on(int cond)
|
|||
struct snd_pci_quirk {
|
||||
unsigned short subvendor; /* PCI subvendor ID */
|
||||
unsigned short subdevice; /* PCI subdevice ID */
|
||||
unsigned short subdevice_mask; /* bitmask to match */
|
||||
int value; /* value */
|
||||
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
||||
const char *name; /* name of the device (optional) */
|
||||
#endif
|
||||
};
|
||||
|
||||
#define _SND_PCI_QUIRK_ID(vend,dev) \
|
||||
.subvendor = (vend), .subdevice = (dev)
|
||||
#define _SND_PCI_QUIRK_ID_MASK(vend, mask, 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)}
|
||||
#ifdef CONFIG_SND_DEBUG_VERBOSE
|
||||
#define SND_PCI_QUIRK(vend,dev,xname,val) \
|
||||
{_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
|
||||
#define SND_PCI_QUIRK(vend,dev,xname,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
|
||||
|
||||
const struct snd_pci_quirk *
|
||||
|
|
|
@ -95,12 +95,14 @@ snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list)
|
|||
{
|
||||
const struct snd_pci_quirk *q;
|
||||
|
||||
for (q = list; q->subvendor; q++)
|
||||
if (q->subvendor == pci->subsystem_vendor &&
|
||||
(!q->subdevice || q->subdevice == pci->subsystem_device))
|
||||
for (q = list; q->subvendor; q++) {
|
||||
if (q->subvendor != pci->subsystem_vendor)
|
||||
continue;
|
||||
if (!q->subdevice ||
|
||||
(pci->subsystem_device & q->subdevice_mask) == q->subdevice)
|
||||
return q;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(snd_pci_quirk_lookup);
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче