--- /dev/null
+From 822c18f2e38cbc775792ab65ace4f9198678dec9 Mon Sep 17 00:00:00 2001
+From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+Date: Thu, 15 Jan 2009 13:50:48 -0800
+Subject: alpha: fix vmalloc breakage
+
+From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+
+commit 822c18f2e38cbc775792ab65ace4f9198678dec9 upstream.
+
+On alpha, we have to map some stuff in the VMALLOC space very early in the
+boot process (to make SRM console callbacks work and so on, see
+arch/alpha/mm/init.c). For old VM allocator, we just manually placed a
+vm_struct onto the global vmlist and this worked for ages.
+
+Unfortunately, the new allocator isn't aware of this, so it constantly
+tries to allocate the VM space which is already in use, making vmalloc on
+alpha defunct.
+
+This patch forces KVA to import vmlist entries on init.
+
+[akpm@linux-foundation.org: remove unneeded check (per Johannes)]
+Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+Cc: Nick Piggin <npiggin@suse.de>
+Cc: Johannes Weiner <hannes@cmpxchg.org>
+Cc: Richard Henderson <rth@twiddle.net>
+Cc: Johannes Weiner <hannes@cmpxchg.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ mm/vmalloc.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+--- a/mm/vmalloc.c
++++ b/mm/vmalloc.c
+@@ -23,6 +23,7 @@
+ #include <linux/rbtree.h>
+ #include <linux/radix-tree.h>
+ #include <linux/rcupdate.h>
++#include <linux/bootmem.h>
+
+ #include <asm/atomic.h>
+ #include <asm/uaccess.h>
+@@ -960,6 +961,8 @@ EXPORT_SYMBOL(vm_map_ram);
+
+ void __init vmalloc_init(void)
+ {
++ struct vmap_area *va;
++ struct vm_struct *tmp;
+ int i;
+
+ for_each_possible_cpu(i) {
+@@ -972,6 +975,14 @@ void __init vmalloc_init(void)
+ vbq->nr_dirty = 0;
+ }
+
++ /* Import existing vmlist entries. */
++ for (tmp = vmlist; tmp; tmp = tmp->next) {
++ va = alloc_bootmem(sizeof(struct vmap_area));
++ va->flags = tmp->flags | VM_VM_AREA;
++ va->va_start = (unsigned long)tmp->addr;
++ va->va_end = va->va_start + tmp->size;
++ __insert_vmap_area(va);
++ }
+ vmap_initialized = true;
+ }
+
--- /dev/null
+From 70b66cbfd3316b792a855cb9a2574e85f1a63d0f Mon Sep 17 00:00:00 2001
+From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+Date: Thu, 15 Jan 2009 13:51:17 -0800
+Subject: alpha: nautilus - fix compile failure with gcc-4.3
+
+From: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+
+commit 70b66cbfd3316b792a855cb9a2574e85f1a63d0f upstream.
+
+init_srm_irq() deals with irq's #16 and above, but size of irq_desc
+array on nautilus and some other system types is 16. So gcc-4.3
+complains that "array subscript is above array bounds", even though
+this function is never called on those systems.
+
+This adds a check for NR_IRQS <= 16, which effectively optimizes
+init_srm_irq() code away on problematic platforms.
+
+Thanks to Daniel Drake <dsd@gentoo.org> for detailed analysis
+of the problem.
+
+Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+Cc: Richard Henderson <rth@twiddle.net>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Tobias Klausmann <klausman@schwarzvogel.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/alpha/kernel/irq_srm.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/alpha/kernel/irq_srm.c
++++ b/arch/alpha/kernel/irq_srm.c
+@@ -63,6 +63,8 @@ init_srm_irqs(long max, unsigned long ig
+ {
+ long i;
+
++ if (NR_IRQS <= 16)
++ return;
+ for (i = 16; i < max; ++i) {
+ if (i < 64 && ((ignore_mask >> i) & 1))
+ continue;
--- /dev/null
+From 1bb88edb7a3769992026f34fd648bb459b0469aa Mon Sep 17 00:00:00 2001
+From: Eric Anholt <eric@anholt.net>
+Date: Thu, 15 Jan 2009 01:16:25 -0800
+Subject: drm: stash AGP include under the do-we-have-AGP ifdef
+
+From: Eric Anholt <eric@anholt.net>
+
+commit 1bb88edb7a3769992026f34fd648bb459b0469aa upstream.
+
+This fixes the MIPS with DRM build.
+
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Tested-by: Martin Michlmayr <tbm@cyrius.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/drm_agpsupport.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/drm_agpsupport.c
++++ b/drivers/gpu/drm/drm_agpsupport.c
+@@ -33,10 +33,11 @@
+
+ #include "drmP.h"
+ #include <linux/module.h>
+-#include <asm/agp.h>
+
+ #if __OS_HAS_AGP
+
++#include <asm/agp.h>
++
+ /**
+ * Get AGP information.
+ *
--- /dev/null
+From b94b898f3107046b5c97c556e23529283ea5eadd Mon Sep 17 00:00:00 2001
+From: Brandon Philips <brandon@ifup.org>
+Date: Wed, 14 Jan 2009 19:19:02 +0100
+Subject: it821x: Add ultra_mask quirk for Vortex86SX
+
+From: Brandon Philips <brandon@ifup.org>
+
+commit b94b898f3107046b5c97c556e23529283ea5eadd upstream.
+
+On Vortex86SX with IDE controller revision 0x11 ultra DMA must be
+disabled. This patch was tested by DMP and seems to work.
+
+It is a cleaned up version of their older Kernel patch:
+ http://www.dmp.com.tw/tech/vortex86sx/patch-2.6.24-DMP.gz
+
+Tested-by: Shawn Lin <shawn@dmp.com.tw>
+Signed-off-by: Brandon Philips <bphilips@suse.de>
+Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ide/it821x.c | 12 ++++++++++++
+ include/linux/pci_ids.h | 1 +
+ 2 files changed, 13 insertions(+)
+
+--- a/drivers/ide/it821x.c
++++ b/drivers/ide/it821x.c
+@@ -68,6 +68,8 @@
+
+ #define DRV_NAME "it821x"
+
++#define QUIRK_VORTEX86 1
++
+ struct it821x_dev
+ {
+ unsigned int smart:1, /* Are we in smart raid mode */
+@@ -79,6 +81,7 @@ struct it821x_dev
+ u16 pio[2]; /* Cached PIO values */
+ u16 mwdma[2]; /* Cached MWDMA values */
+ u16 udma[2]; /* Cached UDMA values (per drive) */
++ u16 quirks;
+ };
+
+ #define ATA_66 0
+@@ -580,6 +583,12 @@ static void __devinit init_hwif_it821x(i
+
+ hwif->ultra_mask = ATA_UDMA6;
+ hwif->mwdma_mask = ATA_MWDMA2;
++
++ /* Vortex86SX quirk: prevent Ultra-DMA mode to fix BadCRC issue */
++ if (idev->quirks & QUIRK_VORTEX86) {
++ if (dev->revision == 0x11)
++ hwif->ultra_mask = 0;
++ }
+ }
+
+ static void it8212_disable_raid(struct pci_dev *dev)
+@@ -652,6 +661,8 @@ static int __devinit it821x_init_one(str
+ return -ENOMEM;
+ }
+
++ itdevs->quirks = id->driver_data;
++
+ rc = ide_pci_init_one(dev, &it821x_chipset, itdevs);
+ if (rc)
+ kfree(itdevs);
+@@ -671,6 +682,7 @@ static void __devexit it821x_remove(stru
+ static const struct pci_device_id it821x_pci_tbl[] = {
+ { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8211), 0 },
+ { PCI_VDEVICE(ITE, PCI_DEVICE_ID_ITE_8212), 0 },
++ { PCI_VDEVICE(RDC, PCI_DEVICE_ID_RDC_D1010), QUIRK_VORTEX86 },
+ { 0, },
+ };
+
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -2171,6 +2171,7 @@
+ #define PCI_DEVICE_ID_RDC_R6040 0x6040
+ #define PCI_DEVICE_ID_RDC_R6060 0x6060
+ #define PCI_DEVICE_ID_RDC_R6061 0x6061
++#define PCI_DEVICE_ID_RDC_D1010 0x1010
+
+ #define PCI_VENDOR_ID_LENOVO 0x17aa
+
--- /dev/null
+From e4d866cdea24543ee16ce6d07d80c513e86ba983 Mon Sep 17 00:00:00 2001
+From: JosephChan@via.com.tw <JosephChan@via.com.tw>
+Date: Fri, 23 Jan 2009 15:37:39 +0800
+Subject: libata: pata_via: support VX855, future chips whose IDE controller use 0x0571
+
+From: JosephChan@via.com.tw <JosephChan@via.com.tw>
+
+commit e4d866cdea24543ee16ce6d07d80c513e86ba983 upstream.
+
+It supports VX855 and future chips whose IDE controller uses PCI ID 0x0571.
+
+Signed-off-by: Joseph Chan <josephchan@via.com.tw>
+Acked-by: Tejun Heo <tj@kernel.org>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/pata_via.c | 22 +++++++++++++++++-----
+ include/linux/pci_ids.h | 4 ++++
+ 2 files changed, 21 insertions(+), 5 deletions(-)
+
+--- a/drivers/ata/pata_via.c
++++ b/drivers/ata/pata_via.c
+@@ -86,6 +86,10 @@ enum {
+ VIA_SATA_PATA = 0x800, /* SATA/PATA combined configuration */
+ };
+
++enum {
++ VIA_IDFLAG_SINGLE = (1 << 0), /* single channel controller) */
++};
++
+ /*
+ * VIA SouthBridge chips.
+ */
+@@ -97,8 +101,12 @@ static const struct via_isa_bridge {
+ u8 rev_max;
+ u16 flags;
+ } via_isa_bridges[] = {
++ { "vx855", PCI_DEVICE_ID_VIA_VX855, 0x00, 0x2f,
++ VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA },
+ { "vx800", PCI_DEVICE_ID_VIA_VX800, 0x00, 0x2f, VIA_UDMA_133 |
+ VIA_BAD_AST | VIA_SATA_PATA },
++ { "vt8261", PCI_DEVICE_ID_VIA_8261, 0x00, 0x2f,
++ VIA_UDMA_133 | VIA_BAD_AST },
+ { "vt8237s", PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
+ { "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST },
+ { "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA },
+@@ -122,6 +130,8 @@ static const struct via_isa_bridge {
+ { "vt82c586", PCI_DEVICE_ID_VIA_82C586_0, 0x00, 0x0f, VIA_UDMA_NONE | VIA_SET_FIFO },
+ { "vt82c576", PCI_DEVICE_ID_VIA_82C576, 0x00, 0x2f, VIA_UDMA_NONE | VIA_SET_FIFO | VIA_NO_UNMASK },
+ { "vt82c576", PCI_DEVICE_ID_VIA_82C576, 0x00, 0x2f, VIA_UDMA_NONE | VIA_SET_FIFO | VIA_NO_UNMASK | VIA_BAD_ID },
++ { "vtxxxx", PCI_DEVICE_ID_VIA_ANON, 0x00, 0x2f,
++ VIA_UDMA_133 | VIA_BAD_AST },
+ { NULL }
+ };
+
+@@ -460,6 +470,7 @@ static int via_init_one(struct pci_dev *
+ static int printed_version;
+ u8 enable;
+ u32 timing;
++ unsigned long flags = id->driver_data;
+ int rc;
+
+ if (!printed_version++)
+@@ -469,9 +480,13 @@ static int via_init_one(struct pci_dev *
+ if (rc)
+ return rc;
+
++ if (flags & VIA_IDFLAG_SINGLE)
++ ppi[1] = &ata_dummy_port_info;
++
+ /* To find out how the IDE will behave and what features we
+ actually have to look at the bridge not the IDE controller */
+- for (config = via_isa_bridges; config->id; config++)
++ for (config = via_isa_bridges; config->id != PCI_DEVICE_ID_VIA_ANON;
++ config++)
+ if ((isa = pci_get_device(PCI_VENDOR_ID_VIA +
+ !!(config->flags & VIA_BAD_ID),
+ config->id, NULL))) {
+@@ -482,10 +497,6 @@ static int via_init_one(struct pci_dev *
+ pci_dev_put(isa);
+ }
+
+- if (!config->id) {
+- printk(KERN_WARNING "via: Unknown VIA SouthBridge, disabling.\n");
+- return -ENODEV;
+- }
+ pci_dev_put(isa);
+
+ if (!(config->flags & VIA_NO_ENABLES)) {
+@@ -587,6 +598,7 @@ static const struct pci_device_id via[]
+ { PCI_VDEVICE(VIA, 0x1571), },
+ { PCI_VDEVICE(VIA, 0x3164), },
+ { PCI_VDEVICE(VIA, 0x5324), },
++ { PCI_VDEVICE(VIA, 0xC409), VIA_IDFLAG_SINGLE },
+
+ { },
+ };
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -1357,6 +1357,7 @@
+ #define PCI_DEVICE_ID_VIA_8783_0 0x3208
+ #define PCI_DEVICE_ID_VIA_8237 0x3227
+ #define PCI_DEVICE_ID_VIA_8251 0x3287
++#define PCI_DEVICE_ID_VIA_8261 0x3402
+ #define PCI_DEVICE_ID_VIA_8237A 0x3337
+ #define PCI_DEVICE_ID_VIA_8237S 0x3372
+ #define PCI_DEVICE_ID_VIA_SATA_EIDE 0x5324
+@@ -1366,10 +1367,13 @@
+ #define PCI_DEVICE_ID_VIA_CX700 0x8324
+ #define PCI_DEVICE_ID_VIA_CX700_IDE 0x0581
+ #define PCI_DEVICE_ID_VIA_VX800 0x8353
++#define PCI_DEVICE_ID_VIA_VX855 0x8409
+ #define PCI_DEVICE_ID_VIA_8371_1 0x8391
+ #define PCI_DEVICE_ID_VIA_82C598_1 0x8598
+ #define PCI_DEVICE_ID_VIA_838X_1 0xB188
+ #define PCI_DEVICE_ID_VIA_83_87XX_1 0xB198
++#define PCI_DEVICE_ID_VIA_C409_IDE 0XC409
++#define PCI_DEVICE_ID_VIA_ANON 0xFFFF
+
+ #define PCI_VENDOR_ID_SIEMENS 0x110A
+ #define PCI_DEVICE_ID_SIEMENS_DSCC4 0x2102
--- /dev/null
+From 3ac52669c7a24b93663acfcab606d1065ed1accd Mon Sep 17 00:00:00 2001
+From: Arjan van de Ven <arjan@linux.intel.com>
+Date: Sat, 13 Dec 2008 09:15:27 -0800
+Subject: resources: skip sanity check of busy resources
+
+From: Arjan van de Ven <arjan@linux.intel.com>
+
+commit 3ac52669c7a24b93663acfcab606d1065ed1accd upstream.
+
+Impact: reduce false positives in iomem_map_sanity_check()
+
+Some drivers (vesafb) only map/reserve a portion of a resource.
+If then some other driver comes in and maps the whole resource,
+the current code WARN_ON's. This is not the intent of the checks
+in iomem_map_sanity_check(); rather these checks want to
+warn when crossing *hardware* resources only.
+
+This patch skips BUSY resources as suggested by Linus.
+
+Note: having two drivers talk to the same hardware at the same
+time is obviously not optimal behavior, but that's a separate story.
+
+Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Kyle McMartin <kyle@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ kernel/resource.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/kernel/resource.c
++++ b/kernel/resource.c
+@@ -853,6 +853,15 @@ int iomem_map_sanity_check(resource_size
+ if (PFN_DOWN(p->start) <= PFN_DOWN(addr) &&
+ PFN_DOWN(p->end) >= PFN_DOWN(addr + size - 1))
+ continue;
++ /*
++ * if a resource is "BUSY", it's not a hardware resource
++ * but a driver mapping of such a resource; we don't want
++ * to warn for those; some drivers legitimately map only
++ * partial hardware resources. (example: vesafb)
++ */
++ if (p->flags & IORESOURCE_BUSY)
++ continue;
++
+ printk(KERN_WARNING "resource map sanity check conflict: "
+ "0x%llx 0x%llx 0x%llx 0x%llx %s\n",
+ (unsigned long long)addr,
--- /dev/null
+From 2fcbab044a3faf4d4a6e269148dd1f188303b206 Mon Sep 17 00:00:00 2001
+From: Larry Finger <Larry.Finger@lwfinger.net>
+Date: Fri, 23 Jan 2009 11:46:32 -0600
+Subject: rtl8187: Add termination packet to prevent stall
+
+From: Larry Finger <Larry.Finger@lwfinger.net>
+
+commit 2fcbab044a3faf4d4a6e269148dd1f188303b206 upstream.
+
+The RTL8187 and RTL8187B devices can stall unless an explicit termination
+packet is sent.
+
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/wireless/rtl8187_dev.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/wireless/rtl8187_dev.c
++++ b/drivers/net/wireless/rtl8187_dev.c
+@@ -263,6 +263,7 @@ static int rtl8187_tx(struct ieee80211_h
+
+ usb_fill_bulk_urb(urb, priv->udev, usb_sndbulkpipe(priv->udev, ep),
+ buf, skb->len, rtl8187_tx_cb, skb);
++ urb->transfer_flags |= URB_ZERO_PACKET;
+ rc = usb_submit_urb(urb, GFP_ATOMIC);
+ if (rc < 0) {
+ usb_free_urb(urb);
--- /dev/null
+From e65f0f8271b1b0452334e5da37fd35413a000de4 Mon Sep 17 00:00:00 2001
+From: Flavio Leitner <fleitner@redhat.com>
+Date: Fri, 2 Jan 2009 13:50:43 +0000
+Subject: serial_8250: support for Sealevel Systems Model 7803 COMM+8
+
+From: Flavio Leitner <fleitner@redhat.com>
+
+commit e65f0f8271b1b0452334e5da37fd35413a000de4 upstream.
+
+Add support for Sealevel Systems Model 7803 COMM+8
+
+Signed-off-by: Flavio Leitner <fleitner@redhat.com>
+Signed-off-by: Alan Cox <alan@redhat.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/serial/8250_pci.c | 3 +++
+ include/linux/pci_ids.h | 1 +
+ 2 files changed, 4 insertions(+)
+
+--- a/drivers/serial/8250_pci.c
++++ b/drivers/serial/8250_pci.c
+@@ -2271,6 +2271,9 @@ static struct pci_device_id serial_pci_t
+ { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_COMM8,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ pbn_b2_8_115200 },
++ { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_7803,
++ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
++ pbn_b2_8_460800 },
+ { PCI_VENDOR_ID_SEALEVEL, PCI_DEVICE_ID_SEALEVEL_UCOMM8,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0,
+ pbn_b2_8_115200 },
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -1799,6 +1799,7 @@
+ #define PCI_DEVICE_ID_SEALEVEL_UCOMM232 0x7202
+ #define PCI_DEVICE_ID_SEALEVEL_COMM4 0x7401
+ #define PCI_DEVICE_ID_SEALEVEL_COMM8 0x7801
++#define PCI_DEVICE_ID_SEALEVEL_7803 0x7803
+ #define PCI_DEVICE_ID_SEALEVEL_UCOMM8 0x7804
+
+ #define PCI_VENDOR_ID_HYPERCOPE 0x1365
sysfs-fix-problems-with-binary-files.patch
x86-fix-page-attribute-corruption-with-cpa.patch
usb-fix-toggle-mismatch-in-disable_endpoint-paths.patch
+sound-virtuoso-enable-uart-on-xonar-hdav1.3.patch
+usb-usbmon-implement-compat_ioctl.patch
+usb-fix-char-device-disconnect-handling.patch
+usb-storage-add-unusual-devs-entry.patch
+alpha-nautilus-fix-compile-failure-with-gcc-4.3.patch
+alpha-fix-vmalloc-breakage.patch
+resources-skip-sanity-check-of-busy-resources.patch
+rtl8187-add-termination-packet-to-prevent-stall.patch
+it821x-add-ultra_mask-quirk-for-vortex86sx.patch
+libata-pata_via-support-vx855-future-chips-whose-ide-controller-use-0x0571.patch
+serial_8250-support-for-sealevel-systems-model-7803-comm-8.patch
+drm-stash-agp-include-under-the-do-we-have-agp-ifdef.patch
--- /dev/null
+From 22c733788bbd4b75c00279119a83da5cd74b987a Mon Sep 17 00:00:00 2001
+From: Clemens Ladisch <clemens@ladisch.de>
+Date: Mon, 19 Jan 2009 10:07:21 +0100
+Subject: sound: virtuoso: enable UART on Xonar HDAV1.3
+
+From: Clemens Ladisch <clemens@ladisch.de>
+
+commit 22c733788bbd4b75c00279119a83da5cd74b987a upstream.
+
+This hardware has a better chance of working correctly if we don't
+forget to enable it.
+
+Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ sound/pci/oxygen/virtuoso.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/sound/pci/oxygen/virtuoso.c
++++ b/sound/pci/oxygen/virtuoso.c
+@@ -908,6 +908,7 @@ static const struct oxygen_model model_x
+ .dac_channels = 8,
+ .dac_volume_min = 0x0f,
+ .dac_volume_max = 0xff,
++ .misc_flags = OXYGEN_MISC_MIDI,
+ .function_flags = OXYGEN_FUNCTION_2WIRE,
+ .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
+ .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
--- /dev/null
+From 501950d846218ed80a776d2aae5aed9c8b92e778 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Tue, 13 Jan 2009 11:33:42 -0500
+Subject: USB: fix char-device disconnect handling
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 501950d846218ed80a776d2aae5aed9c8b92e778 upstream.
+
+This patch (as1198) fixes a conceptual bug: Somewhere along the line
+we managed to confuse USB class devices with USB char devices. As a
+result, the code to send a disconnect signal to userspace would not be
+built if both CONFIG_USB_DEVICE_CLASS and CONFIG_USB_DEVICEFS were
+disabled.
+
+The usb_fs_classdev_common_remove() routine has been renamed to
+usbdev_remove() and it is now called whenever any USB device is
+removed, not just when a class device is unregistered. The notifier
+registration and unregistration calls are no longer conditionally
+compiled. And since the common removal code will always be called as
+part of the char device interface, there's no need to call it again as
+part of the usbfs interface; thus the invocation of
+usb_fs_classdev_common_remove() has been taken out of
+usbfs_remove_device().
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Reported-by: Alon Bar-Lev <alon.barlev@gmail.com>
+Tested-by: Alon Bar-Lev <alon.barlev@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/devio.c | 20 ++++++++++++--------
+ drivers/usb/core/inode.c | 1 -
+ drivers/usb/core/usb.h | 1 -
+ 3 files changed, 12 insertions(+), 10 deletions(-)
+
+--- a/drivers/usb/core/devio.c
++++ b/drivers/usb/core/devio.c
+@@ -1703,7 +1703,7 @@ const struct file_operations usbdev_file
+ .release = usbdev_release,
+ };
+
+-void usb_fs_classdev_common_remove(struct usb_device *udev)
++static void usbdev_remove(struct usb_device *udev)
+ {
+ struct dev_state *ps;
+ struct siginfo sinfo;
+@@ -1745,10 +1745,15 @@ static void usb_classdev_remove(struct u
+ {
+ if (dev->usb_classdev)
+ device_unregister(dev->usb_classdev);
+- usb_fs_classdev_common_remove(dev);
+ }
+
+-static int usb_classdev_notify(struct notifier_block *self,
++#else
++#define usb_classdev_add(dev) 0
++#define usb_classdev_remove(dev) do {} while (0)
++
++#endif
++
++static int usbdev_notify(struct notifier_block *self,
+ unsigned long action, void *dev)
+ {
+ switch (action) {
+@@ -1758,15 +1763,15 @@ static int usb_classdev_notify(struct no
+ break;
+ case USB_DEVICE_REMOVE:
+ usb_classdev_remove(dev);
++ usbdev_remove(dev);
+ break;
+ }
+ return NOTIFY_OK;
+ }
+
+ static struct notifier_block usbdev_nb = {
+- .notifier_call = usb_classdev_notify,
++ .notifier_call = usbdev_notify,
+ };
+-#endif
+
+ static struct cdev usb_device_cdev;
+
+@@ -1801,9 +1806,8 @@ int __init usb_devio_init(void)
+ * to /sys/dev
+ */
+ usb_classdev_class->dev_kobj = NULL;
+-
+- usb_register_notify(&usbdev_nb);
+ #endif
++ usb_register_notify(&usbdev_nb);
+ out:
+ return retval;
+
+@@ -1814,8 +1818,8 @@ error_cdev:
+
+ void usb_devio_cleanup(void)
+ {
+-#ifdef CONFIG_USB_DEVICE_CLASS
+ usb_unregister_notify(&usbdev_nb);
++#ifdef CONFIG_USB_DEVICE_CLASS
+ class_destroy(usb_classdev_class);
+ #endif
+ cdev_del(&usb_device_cdev);
+--- a/drivers/usb/core/inode.c
++++ b/drivers/usb/core/inode.c
+@@ -718,7 +718,6 @@ static void usbfs_remove_device(struct u
+ fs_remove_file (dev->usbfs_dentry);
+ dev->usbfs_dentry = NULL;
+ }
+- usb_fs_classdev_common_remove(dev);
+ }
+
+ static int usbfs_notify(struct notifier_block *self, unsigned long action, void *dev)
+--- a/drivers/usb/core/usb.h
++++ b/drivers/usb/core/usb.h
+@@ -148,7 +148,6 @@ extern struct usb_driver usbfs_driver;
+ extern const struct file_operations usbfs_devices_fops;
+ extern const struct file_operations usbdev_file_operations;
+ extern void usbfs_conn_disc_event(void);
+-extern void usb_fs_classdev_common_remove(struct usb_device *udev);
+
+ extern int usb_devio_init(void);
+ extern void usb_devio_cleanup(void);
--- /dev/null
+From b90de8aea36ae6fe8050a6e91b031369c4f251b2 Mon Sep 17 00:00:00 2001
+From: Oliver Neukum <oliver@neukum.org>
+Date: Wed, 14 Jan 2009 16:17:19 +0100
+Subject: USB: storage: add unusual devs entry
+
+From: Oliver Neukum <oliver@neukum.org>
+
+commit b90de8aea36ae6fe8050a6e91b031369c4f251b2 upstream.
+
+This adds an unusual devs entry for 2116:0320
+
+Signed-off-by: Oliver Neukum <oneukum@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1970,6 +1970,12 @@ UNUSUAL_DEV( 0x19d2, 0x2000, 0x0000, 0x
+ US_SC_DEVICE, US_PR_DEVICE, NULL,
+ US_FL_IGNORE_DEVICE),
+
++UNUSUAL_DEV( 0x2116, 0x0320, 0x0001, 0x0001,
++ "ST",
++ "2A",
++ US_SC_DEVICE, US_PR_DEVICE, NULL,
++ US_FL_FIX_CAPACITY),
++
+ /* patch submitted by Davide Perini <perini.davide@dpsoftware.org>
+ * and Renato Perini <rperini@email.it>
+ */
--- /dev/null
+From 7abce6bedc118eb39fe177c2c26be5d008505c14 Mon Sep 17 00:00:00 2001
+From: Pete Zaitcev <zaitcev@redhat.com>
+Date: Sat, 20 Dec 2008 12:56:08 -0700
+Subject: USB: usbmon: Implement compat_ioctl
+
+From: Pete Zaitcev <zaitcev@redhat.com>
+
+commit 7abce6bedc118eb39fe177c2c26be5d008505c14 upstream.
+
+Running a 32-bit usbmon(8) on 2.6.28-rc9 produces the following:
+ioctl32(usbmon:28563): Unknown cmd fd(3) cmd(400c9206){t:ffffff92;sz:12} arg(ffd3f458) on /dev/usbmon0
+
+It happens because the compatibility mode was implemented for 2.6.18
+and not updated for the fsops.compat_ioctl API.
+
+This patch relocates the pieces from under #ifdef CONFIG_COMPAT into
+compat_ioctl with no other changes except one new whitespace.
+
+Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/mon/mon_bin.c | 105 ++++++++++++++++++++++++++++------------------
+ 1 file changed, 66 insertions(+), 39 deletions(-)
+
+--- a/drivers/usb/mon/mon_bin.c
++++ b/drivers/usb/mon/mon_bin.c
+@@ -37,6 +37,7 @@
+ #define MON_IOCX_GET _IOW(MON_IOC_MAGIC, 6, struct mon_bin_get)
+ #define MON_IOCX_MFETCH _IOWR(MON_IOC_MAGIC, 7, struct mon_bin_mfetch)
+ #define MON_IOCH_MFLUSH _IO(MON_IOC_MAGIC, 8)
++
+ #ifdef CONFIG_COMPAT
+ #define MON_IOCX_GET32 _IOW(MON_IOC_MAGIC, 6, struct mon_bin_get32)
+ #define MON_IOCX_MFETCH32 _IOWR(MON_IOC_MAGIC, 7, struct mon_bin_mfetch32)
+@@ -921,21 +922,6 @@ static int mon_bin_ioctl(struct inode *i
+ }
+ break;
+
+-#ifdef CONFIG_COMPAT
+- case MON_IOCX_GET32: {
+- struct mon_bin_get32 getb;
+-
+- if (copy_from_user(&getb, (void __user *)arg,
+- sizeof(struct mon_bin_get32)))
+- return -EFAULT;
+-
+- ret = mon_bin_get_event(file, rp,
+- compat_ptr(getb.hdr32), compat_ptr(getb.data32),
+- getb.alloc32);
+- }
+- break;
+-#endif
+-
+ case MON_IOCX_MFETCH:
+ {
+ struct mon_bin_mfetch mfetch;
+@@ -962,7 +948,57 @@ static int mon_bin_ioctl(struct inode *i
+ }
+ break;
+
++ case MON_IOCG_STATS: {
++ struct mon_bin_stats __user *sp;
++ unsigned int nevents;
++ unsigned int ndropped;
++
++ spin_lock_irqsave(&rp->b_lock, flags);
++ ndropped = rp->cnt_lost;
++ rp->cnt_lost = 0;
++ spin_unlock_irqrestore(&rp->b_lock, flags);
++ nevents = mon_bin_queued(rp);
++
++ sp = (struct mon_bin_stats __user *)arg;
++ if (put_user(rp->cnt_lost, &sp->dropped))
++ return -EFAULT;
++ if (put_user(nevents, &sp->queued))
++ return -EFAULT;
++
++ }
++ break;
++
++ default:
++ return -ENOTTY;
++ }
++
++ return ret;
++}
++
+ #ifdef CONFIG_COMPAT
++static long mon_bin_compat_ioctl(struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ struct mon_reader_bin *rp = file->private_data;
++ int ret;
++
++ switch (cmd) {
++
++ case MON_IOCX_GET32: {
++ struct mon_bin_get32 getb;
++
++ if (copy_from_user(&getb, (void __user *)arg,
++ sizeof(struct mon_bin_get32)))
++ return -EFAULT;
++
++ ret = mon_bin_get_event(file, rp,
++ compat_ptr(getb.hdr32), compat_ptr(getb.data32),
++ getb.alloc32);
++ if (ret < 0)
++ return ret;
++ }
++ return 0;
++
+ case MON_IOCX_MFETCH32:
+ {
+ struct mon_bin_mfetch32 mfetch;
+@@ -986,37 +1022,25 @@ static int mon_bin_ioctl(struct inode *i
+ return ret;
+ if (put_user(ret, &uptr->nfetch32))
+ return -EFAULT;
+- ret = 0;
+ }
+- break;
+-#endif
+-
+- case MON_IOCG_STATS: {
+- struct mon_bin_stats __user *sp;
+- unsigned int nevents;
+- unsigned int ndropped;
+-
+- spin_lock_irqsave(&rp->b_lock, flags);
+- ndropped = rp->cnt_lost;
+- rp->cnt_lost = 0;
+- spin_unlock_irqrestore(&rp->b_lock, flags);
+- nevents = mon_bin_queued(rp);
++ return 0;
+
+- sp = (struct mon_bin_stats __user *)arg;
+- if (put_user(rp->cnt_lost, &sp->dropped))
+- return -EFAULT;
+- if (put_user(nevents, &sp->queued))
+- return -EFAULT;
++ case MON_IOCG_STATS:
++ return mon_bin_ioctl(NULL, file, cmd,
++ (unsigned long) compat_ptr(arg));
+
+- }
+- break;
++ case MON_IOCQ_URB_LEN:
++ case MON_IOCQ_RING_SIZE:
++ case MON_IOCT_RING_SIZE:
++ case MON_IOCH_MFLUSH:
++ return mon_bin_ioctl(NULL, file, cmd, arg);
+
+ default:
+- return -ENOTTY;
++ ;
+ }
+-
+- return ret;
++ return -ENOTTY;
+ }
++#endif /* CONFIG_COMPAT */
+
+ static unsigned int
+ mon_bin_poll(struct file *file, struct poll_table_struct *wait)
+@@ -1094,6 +1118,9 @@ static const struct file_operations mon_
+ /* .write = mon_text_write, */
+ .poll = mon_bin_poll,
+ .ioctl = mon_bin_ioctl,
++#ifdef CONFIG_COMPAT
++ .compat_ioctl = mon_bin_compat_ioctl,
++#endif
+ .release = mon_bin_release,
+ .mmap = mon_bin_mmap,
+ };