]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.39/patches.drivers/alsa-post-ga-hda-quirk-ext
Imported linux-2.6.27.39 suse/xen patches.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.drivers / alsa-post-ga-hda-quirk-ext
CommitLineData
2cb7cef9
BS
1From: Takashi Iwai <tiwai@suse.de>
2Subject: ALSA: Backport snd_pci_quirk*() extension
3Patch-mainline:
4References: bnc#511306
5
6Backport the extension of snd_pci_quirk*() helper for updating the
7HD-audio stuff. To avoid the conflict, all renamed and localized into
8snd-hda-intel driver.
9
10Signed-off-by: Takashi Iwai <tiwai@suse.de>
11
12---
13 sound/pci/hda/hda_codec.c | 15 +++++++++++++
14 sound/pci/hda/hda_codec.h | 51 ++++++++++++++++++++++++++++++++++++++++++++++
15 2 files changed, 66 insertions(+)
16
17--- a/sound/pci/hda/hda_codec.c
18+++ b/sound/pci/hda/hda_codec.c
19@@ -3432,3 +3432,18 @@
20 buf[j] = '\0'; /* necessary when j == 0 */
21 }
22
23+/* backported */
24+const struct snd_pci_quirk *
25+snd_hda_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list)
26+{
27+ const struct snd_pci_quirk *q;
28+
29+ for (q = list; q->subvendor; q++) {
30+ if (q->subvendor != pci->subsystem_vendor)
31+ continue;
32+ if (!q->subdevice ||
33+ (pci->subsystem_device & q->subdevice_mask) == q->subdevice)
34+ return q;
35+ }
36+ return NULL;
37+}
38--- a/sound/pci/hda/hda_codec.h
39+++ b/sound/pci/hda/hda_codec.h
40@@ -26,6 +26,57 @@
41 #include <sound/pcm.h>
42 #include <sound/hwdep.h>
43
44+
45+/*
46+ * quirk with mask; backported
47+ */
48+
49+/* PCI quirk list helper */
50+struct snd_hda_quirk {
51+ unsigned short subvendor; /* PCI subvendor ID */
52+ unsigned short subdevice; /* PCI subdevice ID */
53+ unsigned short subdevice_mask; /* bitmask to match */
54+ int value; /* value */
55+#ifdef CONFIG_SND_DEBUG_VERBOSE
56+ const char *name; /* name of the device (optional) */
57+#endif
58+};
59+
60+#define snd_pci_quirk snd_hda_quirk
61+#undef _SND_PCI_QUIRK_ID_MASK
62+#undef _SND_PCI_QUIRK_ID
63+#undef SND_PCI_QUIRK_ID
64+#undef SND_PCI_QUIRK
65+#undef SND_PCI_QUIRK_MASK
66+#undef SND_PCI_QUIRK_VENDOR
67+
68+#define _SND_PCI_QUIRK_ID_MASK(vend, mask, dev) \
69+ .subvendor = (vend), .subdevice = (dev), .subdevice_mask = (mask)
70+#define _SND_PCI_QUIRK_ID(vend, dev) \
71+ _SND_PCI_QUIRK_ID_MASK(vend, 0xffff, dev)
72+#define SND_PCI_QUIRK_ID(vend,dev) {_SND_PCI_QUIRK_ID(vend, dev)}
73+#ifdef CONFIG_SND_DEBUG_VERBOSE
74+#define SND_PCI_QUIRK(vend,dev,xname,val) \
75+ {_SND_PCI_QUIRK_ID(vend, dev), .value = (val), .name = (xname)}
76+#define SND_PCI_QUIRK_VENDOR(vend, xname, val) \
77+ {_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val), .name = (xname)}
78+#define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val) \
79+ {_SND_PCI_QUIRK_ID_MASK(vend, mask, dev), \
80+ .value = (val), .name = (xname)}
81+#else
82+#define SND_PCI_QUIRK(vend,dev,xname,val) \
83+ {_SND_PCI_QUIRK_ID(vend, dev), .value = (val)}
84+#define SND_PCI_QUIRK_MASK(vend, mask, dev, xname, val) \
85+ {_SND_PCI_QUIRK_ID_MASK(vend, mask, dev), .value = (val)}
86+#define SND_PCI_QUIRK_VENDOR(vend, xname, val) \
87+ {_SND_PCI_QUIRK_ID_MASK(vend, 0, 0), .value = (val)}
88+#endif
89+
90+const struct snd_pci_quirk *
91+snd_hda_quirk_lookup(struct pci_dev *pci, const struct snd_pci_quirk *list);
92+
93+#define snd_pci_quirk_lookup snd_hda_quirk_lookup
94+
95 #if defined(CONFIG_PM) || defined(CONFIG_SND_HDA_POWER_SAVE)
96 #define SND_HDA_NEEDS_RESUME /* resume control code is required */
97 #endif