Commit d1458279 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: Add snd_pci_quirk_lookup_id()

Added a new function to look up a quirk entry with the given PCI SSID
instead of a pci device pointer.  This can be used when the searched ID
is overridden for debugging or such a purpose.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 47e91348
...@@ -458,5 +458,8 @@ struct snd_pci_quirk { ...@@ -458,5 +458,8 @@ struct snd_pci_quirk {
const struct snd_pci_quirk * const struct snd_pci_quirk *
snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list); snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list);
const struct snd_pci_quirk *
snd_pci_quirk_lookup_id(u16 vendor, u16 device,
const struct snd_pci_quirk *list);
#endif /* __SOUND_CORE_H */ #endif /* __SOUND_CORE_H */
...@@ -101,8 +101,9 @@ EXPORT_SYMBOL_GPL(__snd_printk); ...@@ -101,8 +101,9 @@ EXPORT_SYMBOL_GPL(__snd_printk);
#ifdef CONFIG_PCI #ifdef CONFIG_PCI
#include <linux/pci.h> #include <linux/pci.h>
/** /**
* snd_pci_quirk_lookup - look up a PCI SSID quirk list * snd_pci_quirk_lookup_id - look up a PCI SSID quirk list
* @pci: pci_dev handle * @vendor: PCI SSV id
* @device: PCI SSD id
* @list: quirk list, terminated by a null entry * @list: quirk list, terminated by a null entry
* *
* Look through the given quirk list and finds a matching entry * Look through the given quirk list and finds a matching entry
...@@ -112,18 +113,39 @@ EXPORT_SYMBOL_GPL(__snd_printk); ...@@ -112,18 +113,39 @@ EXPORT_SYMBOL_GPL(__snd_printk);
* Returns the matched entry pointer, or NULL if nothing matched. * Returns the matched entry pointer, or NULL if nothing matched.
*/ */
const struct snd_pci_quirk * const struct snd_pci_quirk *
snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list) snd_pci_quirk_lookup_id(u16 vendor, u16 device,
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 != vendor)
continue; continue;
if (!q->subdevice || if (!q->subdevice ||
(pci->subsystem_device & q->subdevice_mask) == q->subdevice) (device & q->subdevice_mask) == q->subdevice)
return q; return q;
} }
return NULL; return NULL;
} }
EXPORT_SYMBOL(snd_pci_quirk_lookup_id);
/**
* snd_pci_quirk_lookup - look up a PCI SSID quirk list
* @pci: pci_dev handle
* @list: quirk list, terminated by a null entry
*
* Look through the given quirk list and finds a matching entry
* with the same PCI SSID. When subdevice is 0, all subdevice
* values may match.
*
* Returns the matched entry pointer, or NULL if nothing matched.
*/
const struct snd_pci_quirk *
snd_pci_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list)
{
return snd_pci_quirk_lookup_id(pci->subsystem_vendor,
pci->subsystem_device,
list);
}
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