+++ /dev/null
-From 2f32c867219734b06abc980d4812f67b6d6fe517 Mon Sep 17 00:00:00 2001
-From: J. K. Cliburn <jcliburn@gmail.com>
-Date: Sat, 1 Jan 2011 05:02:12 +0000
-Subject: atl1: fix oops when changing tx/rx ring params
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-From: J. K. Cliburn <jcliburn@gmail.com>
-
-commit 2f32c867219734b06abc980d4812f67b6d6fe517 upstream.
-
-Commit 3f5a2a713aad28480d86b0add00c68484b54febc zeroes out the statistics
-message block (SMB) and coalescing message block (CMB) when adapter ring
-resources are freed. This is desirable behavior, but, as a side effect,
-the commit leads to an oops when atl1_set_ringparam() attempts to alter
-the number of rx or tx elements in the ring buffer (by using ethtool
--G, for example). We don't want SMB or CMB to change during this
-operation.
-
-Modify atl1_set_ringparam() to preserve SMB and CMB when changing ring
-parameters.
-
-Signed-off-by: Jay Cliburn <jcliburn@gmail.com>
-Reported-by: Tõnu Raitviir <jussuf@linux.ee>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
-diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c
-index 5336310..3acf512 100644
---- a/drivers/net/atlx/atl1.c
-+++ b/drivers/net/atlx/atl1.c
-@@ -3504,6 +3504,8 @@ static int atl1_set_ringparam(struct net_device *netdev,
- struct atl1_rfd_ring rfd_old, rfd_new;
- struct atl1_rrd_ring rrd_old, rrd_new;
- struct atl1_ring_header rhdr_old, rhdr_new;
-+ struct atl1_smb smb;
-+ struct atl1_cmb cmb;
- int err;
-
- tpd_old = adapter->tpd_ring;
-@@ -3544,11 +3546,19 @@ static int atl1_set_ringparam(struct net_device *netdev,
- adapter->rrd_ring = rrd_old;
- adapter->tpd_ring = tpd_old;
- adapter->ring_header = rhdr_old;
-+ /*
-+ * Save SMB and CMB, since atl1_free_ring_resources
-+ * will clear them.
-+ */
-+ smb = adapter->smb;
-+ cmb = adapter->cmb;
- atl1_free_ring_resources(adapter);
- adapter->rfd_ring = rfd_new;
- adapter->rrd_ring = rrd_new;
- adapter->tpd_ring = tpd_new;
- adapter->ring_header = rhdr_new;
-+ adapter->smb = smb;
-+ adapter->cmb = cmb;
-
- err = atl1_up(adapter);
- if (err)
usb-serial-handle-data-carrier-detect-changes.patch
usb-cp210x-add-two-device-ids.patch
usb-cp210x-removed-incorrect-device-id.patch
-atl1-fix-oops-when-changing-tx-rx-ring-params.patch
+usb-qcaux-add-pantech-uml290-device-id.patch
+usb-usb-storage-unusual_devs-update-for-cypress-atacb.patch
+usb-usb-storage-unusual_devs-update-for-trekstor-datastation-maxi-g.u-external-hard-drive-enclosure.patch
+usb-usb-storage-unusual_devs-entry-for-camsport-evo.patch
+usb-usb-storage-unusual_devs-entry-for-coby-mp3-player.patch
+usb-serial-updated-support-for-icom-devices.patch
+usb-adding-usb-support-for-cinterion-s-hc2x-eu3-and-ph8-products.patch
+usb-serial-add-missing-.usb_driver-field-in-serial-drivers.patch
+usb-ehci-aspm-quirk-of-isoc-on-amd-hudson.patch
+usb-ehci-fix-dma-deallocation-bug.patch
+usb-g_printer-fix-bug-in-unregistration.patch
+usb-g_printer-fix-bug-in-module-parameter-definitions.patch
+usb-io_edgeport-fix-the-reported-firmware-major-and-minor.patch
+usb-ti_usb-fix-module-removal.patch
+usb-storage-add-unusual_devs-entry-for-vtech-kidizoom.patch
+usb-ftdi_sio-add-st-micro-connect-lite-uart-support.patch
+usb-cdc-acm-adding-second-acm-channel-support-for-nokia-n8.patch
+usb-ftdi_sio-add-vid-0x0647-pid-0x0100-for-acton-research-spectrograph.patch
+usb-ehci-fix-scheduling-while-atomic-during-suspend.patch
+usb-prevent-buggy-hubs-from-crashing-the-usb-stack.patch
+usb-fix-race-between-root-hub-resume-and-wakeup-requests.patch
+staging-zram-fix-data-corruption-issue.patch
+staging-r8712u-add-new-device-ids.patch
+staging-comedi-add-support-for-newer-jr3-1-channel-pci-board.patch
+staging-comedi-ni_labpc-use-shared-irq-for-pcmcia-card.patch
+staging-hv-fix-sysfs-symlink-on-hv-block-device.patch
+staging-hv-fix-netvsc-sleeping-while-atomic.patch
+staging-hv-removed-unneeded-call-to-netif_stop_queue-in-hv_netvsc.patch
+staging-hv-enable-sending-garp-packet-after-live-migration.patch
+staging-rt3090-fix-rt3090-scan-ap-function.patch
+staging-rt2860-fix-previous-patch-error.patch
+staging-rt2860-fix-incorrect-netif_stop_queue-usage-warning.patch
+staging-speakup-confusion-in-silent_store.patch
+staging-brcm80211-fix-suspend-resume-issue-in-brcmsmac.patch
--- /dev/null
+From 4032ec639af9b735fdd903fab09de567bd73eaa0 Mon Sep 17 00:00:00 2001
+From: Arend van Spriel <arend@broadcom.com>
+Date: Fri, 21 Jan 2011 13:36:44 +0100
+Subject: staging: brcm80211: fix suspend/resume issue in brcmsmac
+
+From: Arend van Spriel <arend@broadcom.com>
+
+commit 4032ec639af9b735fdd903fab09de567bd73eaa0 upstream.
+
+PCI PM suspend callback took down the interface and resume brought
+it back up. In the mac80211 context this is done in subsequent calls.
+Rework implementation so that suspend only stores config, and sets
+PCI power state. The resume return to full power state (D0), restores
+the config, and brings hardware back up. Full bringup is done by
+subsequent mac80211 calls.
+
+Reviewed-by: Brett Rudley <brudley@broadcom.com>
+Signed-off-by: Arend van Spriel <arend@broadcom.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/brcm80211/sys/wl_mac80211.c | 45 ++++++++++++++--------------
+ 1 file changed, 23 insertions(+), 22 deletions(-)
+
+--- a/drivers/staging/brcm80211/sys/wl_mac80211.c
++++ b/drivers/staging/brcm80211/sys/wl_mac80211.c
+@@ -299,11 +299,8 @@ static void wl_ops_stop(struct ieee80211
+ wl_info_t *wl = hw->priv;
+ ASSERT(wl);
+ WL_LOCK(wl);
+- wl_down(wl);
+ ieee80211_stop_queues(hw);
+ WL_UNLOCK(wl);
+-
+- return;
+ }
+
+ static int
+@@ -336,7 +333,14 @@ wl_ops_add_interface(struct ieee80211_hw
+ static void
+ wl_ops_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
+ {
+- return;
++ struct wl_info *wl;
++
++ wl = HW_TO_WL(hw);
++
++ /* put driver in down state */
++ WL_LOCK(wl);
++ wl_down(wl);
++ WL_UNLOCK(wl);
+ }
+
+ static int
+@@ -972,7 +976,7 @@ static wl_info_t *wl_attach(u16 vendor,
+ wl_found++;
+ return wl;
+
+- fail:
++fail:
+ wl_free(wl);
+ fail1:
+ return NULL;
+@@ -1356,7 +1360,6 @@ wl_pci_probe(struct pci_dev *pdev, const
+ return 0;
+ }
+
+-#ifdef LINUXSTA_PS
+ static int wl_suspend(struct pci_dev *pdev, pm_message_t state)
+ {
+ wl_info_t *wl;
+@@ -1371,11 +1374,12 @@ static int wl_suspend(struct pci_dev *pd
+ return -ENODEV;
+ }
+
++ /* only need to flag hw is down for proper resume */
+ WL_LOCK(wl);
+- wl_down(wl);
+ wl->pub->hw_up = false;
+ WL_UNLOCK(wl);
+- pci_save_state(pdev, wl->pci_psstate);
++
++ pci_save_state(pdev);
+ pci_disable_device(pdev);
+ return pci_set_power_state(pdev, PCI_D3hot);
+ }
+@@ -1399,7 +1403,7 @@ static int wl_resume(struct pci_dev *pde
+ if (err)
+ return err;
+
+- pci_restore_state(pdev, wl->pci_psstate);
++ pci_restore_state(pdev);
+
+ err = pci_enable_device(pdev);
+ if (err)
+@@ -1411,13 +1415,12 @@ static int wl_resume(struct pci_dev *pde
+ if ((val & 0x0000ff00) != 0)
+ pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
+
+- WL_LOCK(wl);
+- err = wl_up(wl);
+- WL_UNLOCK(wl);
+-
++ /*
++ * done. driver will be put in up state
++ * in wl_ops_add_interface() call.
++ */
+ return err;
+ }
+-#endif /* LINUXSTA_PS */
+
+ static void wl_remove(struct pci_dev *pdev)
+ {
+@@ -1450,14 +1453,12 @@ static void wl_remove(struct pci_dev *pd
+ }
+
+ static struct pci_driver wl_pci_driver = {
+- .name = "brcm80211",
+- .probe = wl_pci_probe,
+-#ifdef LINUXSTA_PS
+- .suspend = wl_suspend,
+- .resume = wl_resume,
+-#endif /* LINUXSTA_PS */
+- .remove = __devexit_p(wl_remove),
+- .id_table = wl_id_table,
++ .name = "brcm80211",
++ .probe = wl_pci_probe,
++ .suspend = wl_suspend,
++ .resume = wl_resume,
++ .remove = __devexit_p(wl_remove),
++ .id_table = wl_id_table,
+ };
+ #endif /* !BCMSDIO */
+
--- /dev/null
+From 6292817d58637f85dd623cfe563c7f5ec4f4c470 Mon Sep 17 00:00:00 2001
+From: Ruben Smits <ruben.smits@mech.kuleuven.be>
+Date: Sat, 11 Dec 2010 08:26:18 +0100
+Subject: staging: comedi: add support for newer jr3 1-channel pci board
+
+From: Ruben Smits <ruben.smits@mech.kuleuven.be>
+
+commit 6292817d58637f85dd623cfe563c7f5ec4f4c470 upstream.
+
+add DEVICE_ID to table
+
+Signed-off-by: Ruben Smits <ruben.smits@mech.kuleuven.be>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/comedi/drivers/jr3_pci.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/staging/comedi/drivers/jr3_pci.c
++++ b/drivers/staging/comedi/drivers/jr3_pci.c
+@@ -54,6 +54,7 @@ Devices: [JR3] PCI force sensor board (j
+
+ #define PCI_VENDOR_ID_JR3 0x1762
+ #define PCI_DEVICE_ID_JR3_1_CHANNEL 0x3111
++#define PCI_DEVICE_ID_JR3_1_CHANNEL_NEW 0x1111
+ #define PCI_DEVICE_ID_JR3_2_CHANNEL 0x3112
+ #define PCI_DEVICE_ID_JR3_3_CHANNEL 0x3113
+ #define PCI_DEVICE_ID_JR3_4_CHANNEL 0x3114
+@@ -73,6 +74,8 @@ static DEFINE_PCI_DEVICE_TABLE(jr3_pci_p
+ {
+ PCI_VENDOR_ID_JR3, PCI_DEVICE_ID_JR3_1_CHANNEL,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {
++ PCI_VENDOR_ID_JR3, PCI_DEVICE_ID_JR3_1_CHANNEL_NEW,
++ PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {
+ PCI_VENDOR_ID_JR3, PCI_DEVICE_ID_JR3_2_CHANNEL,
+ PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, {
+ PCI_VENDOR_ID_JR3, PCI_DEVICE_ID_JR3_3_CHANNEL,
+@@ -807,6 +810,10 @@ static int jr3_pci_attach(struct comedi_
+ devpriv->n_channels = 1;
+ }
+ break;
++ case PCI_DEVICE_ID_JR3_1_CHANNEL_NEW:{
++ devpriv->n_channels = 1;
++ }
++ break;
+ case PCI_DEVICE_ID_JR3_2_CHANNEL:{
+ devpriv->n_channels = 2;
+ }
--- /dev/null
+From d1ce318496f5943d2cc5e20171fc383a59a1421f Mon Sep 17 00:00:00 2001
+From: Ian Abbott <abbotti@mev.co.uk>
+Date: Wed, 19 Jan 2011 11:48:44 +0000
+Subject: staging: comedi: ni_labpc: Use shared IRQ for PCMCIA card
+
+From: Ian Abbott <abbotti@mev.co.uk>
+
+commit d1ce318496f5943d2cc5e20171fc383a59a1421f upstream.
+
+The ni_labpc driver module only requests a shared IRQ for PCI devices,
+requesting a non-shared IRQ for non-PCI devices.
+As this module is also used by the ni_labpc_cs module for certain
+National Instruments PCMCIA cards, it also needs to request a shared IRQ
+for PCMCIA devices, otherwise you get a IRQ mismatch with the CardBus
+controller.
+
+Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/comedi/drivers/ni_labpc.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/staging/comedi/drivers/ni_labpc.c
++++ b/drivers/staging/comedi/drivers/ni_labpc.c
+@@ -575,7 +575,8 @@ int labpc_common_attach(struct comedi_de
+ /* grab our IRQ */
+ if (irq) {
+ isr_flags = 0;
+- if (thisboard->bustype == pci_bustype)
++ if (thisboard->bustype == pci_bustype
++ || thisboard->bustype == pcmcia_bustype)
+ isr_flags |= IRQF_SHARED;
+ if (request_irq(irq, labpc_interrupt, isr_flags,
+ driver_labpc.driver_name, dev)) {
--- /dev/null
+From 7c161d0b900ea9bd9fc5ea5d3fa9916e9eb0dd88 Mon Sep 17 00:00:00 2001
+From: Haiyang Zhang <haiyangz@microsoft.com>
+Date: Wed, 2 Feb 2011 13:42:58 -0800
+Subject: staging: hv: Enable sending GARP packet after live migration
+
+From: Haiyang Zhang <haiyangz@microsoft.com>
+
+commit 7c161d0b900ea9bd9fc5ea5d3fa9916e9eb0dd88 upstream.
+
+The hv_netvsc gets RNDIS_STATUS_MEDIA_CONNECT event after the VM
+is live migrated. Adding call to netif_notify_peers() for this event
+to send GARP (Gratuitous ARP) to notify network peers. Otherwise,
+the VM's network connection may stop after a live migration.
+
+This patch should also be applied to stable kernel 2.6.32 and later.
+
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/hv/netvsc_drv.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/staging/hv/netvsc_drv.c
++++ b/drivers/staging/hv/netvsc_drv.c
+@@ -233,6 +233,7 @@ static void netvsc_linkstatus_callback(s
+ if (status == 1) {
+ netif_carrier_on(net);
+ netif_wake_queue(net);
++ netif_notify_peers(net);
+ } else {
+ netif_carrier_off(net);
+ netif_stop_queue(net);
--- /dev/null
+From d70c673153d42e8aefd5ac296c8159ef222d076b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+Date: Fri, 17 Dec 2010 11:40:24 +0200
+Subject: staging: hv: fix netvsc sleeping while atomic
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
+
+commit d70c673153d42e8aefd5ac296c8159ef222d076b upstream.
+
+The channel callbacks are called directly from vmbus_event_dpc
+which runs in tasklet context. These callbacks need to use
+GFP_ATOMIC.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=16701
+
+Cc: Hank Janssen <hjanssen@microsoft.com>
+Cc: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: Timo Teräs <timo.teras@iki.fi>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/hv/netvsc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/staging/hv/netvsc.c
++++ b/drivers/staging/hv/netvsc.c
+@@ -1236,7 +1236,7 @@ static void NetVscOnChannelCallback(void
+ /* ASSERT(device); */
+
+ packet = kzalloc(NETVSC_PACKET_SIZE * sizeof(unsigned char),
+- GFP_KERNEL);
++ GFP_ATOMIC);
+ if (!packet)
+ return;
+ buffer = packet;
--- /dev/null
+From 268eff909afaca93188d2d14554cbf824f6a0e41 Mon Sep 17 00:00:00 2001
+From: Ky Srinivasan <ksrinivasan@novell.com>
+Date: Thu, 16 Dec 2010 18:59:19 -0700
+Subject: Staging: hv: fix sysfs symlink on hv block device
+
+From: Ky Srinivasan <ksrinivasan@novell.com>
+
+commit 268eff909afaca93188d2d14554cbf824f6a0e41 upstream.
+
+The block device does not create the proper symlink in sysfs because we
+forgot to set up the gendisk structure properly. This patch fixes the
+issue.
+
+Signed-off-by: K. Y. Srinivasan <ksrinivasan@novell.com>
+Cc: Hank Janssen <hjanssen@microsoft.com>
+Cc: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/hv/blkvsc_drv.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/staging/hv/blkvsc_drv.c
++++ b/drivers/staging/hv/blkvsc_drv.c
+@@ -368,6 +368,7 @@ static int blkvsc_probe(struct device *d
+ blkdev->gd->first_minor = 0;
+ blkdev->gd->fops = &block_ops;
+ blkdev->gd->private_data = blkdev;
++ blkdev->gd->driverfs_dev = &(blkdev->device_ctx->device);
+ sprintf(blkdev->gd->disk_name, "hd%c", 'a' + devnum);
+
+ blkvsc_do_inquiry(blkdev);
--- /dev/null
+From a786f915274ba446865a996515c7790a930f04dd Mon Sep 17 00:00:00 2001
+From: Hank Janssen <hjanssen@microsoft.com>
+Date: Fri, 7 Jan 2011 09:25:39 -0800
+Subject: staging: hv: Removed unneeded call to netif_stop_queue() in hv_netvsc
+
+From: Hank Janssen <hjanssen@microsoft.com>
+
+commit a786f915274ba446865a996515c7790a930f04dd upstream.
+
+Removed the call to netif_stop_queue() in netvsc_probe() as
+the queue is not initialized at that point and further call
+to it after queue initialization is really not necessary.
+
+This change was prompted after an upstream change went into
+2.6.37 (netif_tx_stop_queue) that now checks if netif_stop_queue
+is called before register with netdev is done.
+
+This will eliminate the warning message to the log when hv_netvsc
+driver starts up.
+
+Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
+Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
+Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/hv/netvsc_drv.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- a/drivers/staging/hv/netvsc_drv.c
++++ b/drivers/staging/hv/netvsc_drv.c
+@@ -355,7 +355,6 @@ static int netvsc_probe(struct device *d
+
+ /* Set initial state */
+ netif_carrier_off(net);
+- netif_stop_queue(net);
+
+ net_device_ctx = netdev_priv(net);
+ net_device_ctx->device_ctx = device_ctx;
--- /dev/null
+From 6b28405395f7ec492ea69f541cc774adcb9e00ca Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Axel=20K=C3=B6llhofer?= <AxelKoellhofer@web.de>
+Date: Sat, 22 Jan 2011 14:33:50 -0600
+Subject: staging: r8712u: Add new device IDs
+
+From: =?UTF-8?q?Axel=20K=C3=B6llhofer?= <AxelKoellhofer@web.de>
+
+commit 6b28405395f7ec492ea69f541cc774adcb9e00ca upstream.
+
+This patch adds several new device ids to the r8712u staging driver.
+The new ids were retrieved from latest vendor driver (v2.6.6.0.20101111)
+downloadable from www.realtek.com.tw
+
+Signed-off-by: Axel Koellhofer <AxelKoellhofer@web.de>
+Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rtl8712/usb_intf.c | 145 ++++++++++++++++++++++++++++---------
+ 1 file changed, 113 insertions(+), 32 deletions(-)
+
+--- a/drivers/staging/rtl8712/usb_intf.c
++++ b/drivers/staging/rtl8712/usb_intf.c
+@@ -47,54 +47,123 @@ static int r871xu_drv_init(struct usb_in
+ static void r871xu_dev_remove(struct usb_interface *pusb_intf);
+
+ static struct usb_device_id rtl871x_usb_id_tbl[] = {
+- /*92SU
+- * Realtek */
+- {USB_DEVICE(0x0bda, 0x8171)},
+- {USB_DEVICE(0x0bda, 0x8172)},
++
++/* RTL8188SU */
++ /* Realtek */
++ {USB_DEVICE(0x0BDA, 0x8171)},
+ {USB_DEVICE(0x0bda, 0x8173)},
+- {USB_DEVICE(0x0bda, 0x8174)},
+ {USB_DEVICE(0x0bda, 0x8712)},
+ {USB_DEVICE(0x0bda, 0x8713)},
+ {USB_DEVICE(0x0bda, 0xC512)},
+- /* Abocom */
++ /* Abocom */
+ {USB_DEVICE(0x07B8, 0x8188)},
++ /* ASUS */
++ {USB_DEVICE(0x0B05, 0x1786)},
++ {USB_DEVICE(0x0B05, 0x1791)}, /* 11n mode disable */
++ /* Belkin */
++ {USB_DEVICE(0x050D, 0x945A)},
+ /* Corega */
+- {USB_DEVICE(0x07aa, 0x0047)},
+- /* Dlink */
+- {USB_DEVICE(0x07d1, 0x3303)},
+- {USB_DEVICE(0x07d1, 0x3302)},
+- {USB_DEVICE(0x07d1, 0x3300)},
+- /* Dlink for Skyworth */
+- {USB_DEVICE(0x14b2, 0x3300)},
+- {USB_DEVICE(0x14b2, 0x3301)},
+- {USB_DEVICE(0x14b2, 0x3302)},
++ {USB_DEVICE(0x07AA, 0x0047)},
++ /* D-Link */
++ {USB_DEVICE(0x2001, 0x3306)},
++ {USB_DEVICE(0x07D1, 0x3306)}, /* 11n mode disable */
++ /* Edimax */
++ {USB_DEVICE(0x7392, 0x7611)},
+ /* EnGenius */
+ {USB_DEVICE(0x1740, 0x9603)},
+- {USB_DEVICE(0x1740, 0x9605)},
++ /* Hawking */
++ {USB_DEVICE(0x0E66, 0x0016)},
++ /* Hercules */
++ {USB_DEVICE(0x06F8, 0xE034)},
++ {USB_DEVICE(0x06F8, 0xE032)},
++ /* Logitec */
++ {USB_DEVICE(0x0789, 0x0167)},
++ /* PCI */
++ {USB_DEVICE(0x2019, 0xAB28)},
++ {USB_DEVICE(0x2019, 0xED16)},
++ /* Sitecom */
++ {USB_DEVICE(0x0DF6, 0x0057)},
++ {USB_DEVICE(0x0DF6, 0x0045)},
++ {USB_DEVICE(0x0DF6, 0x0059)}, /* 11n mode disable */
++ {USB_DEVICE(0x0DF6, 0x004B)},
++ {USB_DEVICE(0x0DF6, 0x0063)},
++ /* Sweex */
++ {USB_DEVICE(0x177F, 0x0154)},
++ /* Thinkware */
++ {USB_DEVICE(0x0BDA, 0x5077)},
++ /* Toshiba */
++ {USB_DEVICE(0x1690, 0x0752)},
++ /* - */
++ {USB_DEVICE(0x20F4, 0x646B)},
++ {USB_DEVICE(0x083A, 0xC512)},
++
++/* RTL8191SU */
++ /* Realtek */
++ {USB_DEVICE(0x0BDA, 0x8172)},
++ /* Amigo */
++ {USB_DEVICE(0x0EB0, 0x9061)},
++ /* ASUS/EKB */
++ {USB_DEVICE(0x0BDA, 0x8172)},
++ {USB_DEVICE(0x13D3, 0x3323)},
++ {USB_DEVICE(0x13D3, 0x3311)}, /* 11n mode disable */
++ {USB_DEVICE(0x13D3, 0x3342)},
++ /* ASUS/EKBLenovo */
++ {USB_DEVICE(0x13D3, 0x3333)},
++ {USB_DEVICE(0x13D3, 0x3334)},
++ {USB_DEVICE(0x13D3, 0x3335)}, /* 11n mode disable */
++ {USB_DEVICE(0x13D3, 0x3336)}, /* 11n mode disable */
++ /* ASUS/Media BOX */
++ {USB_DEVICE(0x13D3, 0x3309)},
+ /* Belkin */
+- {USB_DEVICE(0x050d, 0x815F)},
+- {USB_DEVICE(0x050d, 0x945A)},
+- {USB_DEVICE(0x050d, 0x845A)},
+- /* Guillemot */
+- {USB_DEVICE(0x06f8, 0xe031)},
++ {USB_DEVICE(0x050D, 0x815F)},
++ /* D-Link */
++ {USB_DEVICE(0x07D1, 0x3302)},
++ {USB_DEVICE(0x07D1, 0x3300)},
++ {USB_DEVICE(0x07D1, 0x3303)},
+ /* Edimax */
+- {USB_DEVICE(0x7392, 0x7611)},
+ {USB_DEVICE(0x7392, 0x7612)},
+- {USB_DEVICE(0x7392, 0x7622)},
+- /* Sitecom */
+- {USB_DEVICE(0x0DF6, 0x0045)},
++ /* EnGenius */
++ {USB_DEVICE(0x1740, 0x9605)},
++ /* Guillemot */
++ {USB_DEVICE(0x06F8, 0xE031)},
+ /* Hawking */
+ {USB_DEVICE(0x0E66, 0x0015)},
+- {USB_DEVICE(0x0E66, 0x0016)},
+- {USB_DEVICE(0x0b05, 0x1786)},
+- {USB_DEVICE(0x0b05, 0x1791)}, /* 11n mode disable */
+-
++ /* Mediao */
+ {USB_DEVICE(0x13D3, 0x3306)},
+- {USB_DEVICE(0x13D3, 0x3309)},
++ /* PCI */
++ {USB_DEVICE(0x2019, 0xED18)},
++ {USB_DEVICE(0x2019, 0x4901)},
++ /* Sitecom */
++ {USB_DEVICE(0x0DF6, 0x0058)},
++ {USB_DEVICE(0x0DF6, 0x0049)},
++ {USB_DEVICE(0x0DF6, 0x004C)},
++ {USB_DEVICE(0x0DF6, 0x0064)},
++ /* Skyworth */
++ {USB_DEVICE(0x14b2, 0x3300)},
++ {USB_DEVICE(0x14b2, 0x3301)},
++ {USB_DEVICE(0x14B2, 0x3302)},
++ /* - */
++ {USB_DEVICE(0x04F2, 0xAFF2)},
++ {USB_DEVICE(0x04F2, 0xAFF5)},
++ {USB_DEVICE(0x04F2, 0xAFF6)},
++ {USB_DEVICE(0x13D3, 0x3339)},
++ {USB_DEVICE(0x13D3, 0x3340)}, /* 11n mode disable */
++ {USB_DEVICE(0x13D3, 0x3341)}, /* 11n mode disable */
+ {USB_DEVICE(0x13D3, 0x3310)},
+- {USB_DEVICE(0x13D3, 0x3311)}, /* 11n mode disable */
+ {USB_DEVICE(0x13D3, 0x3325)},
+- {USB_DEVICE(0x083A, 0xC512)},
++
++/* RTL8192SU */
++ /* Realtek */
++ {USB_DEVICE(0x0BDA, 0x8174)},
++ {USB_DEVICE(0x0BDA, 0x8174)},
++ /* Belkin */
++ {USB_DEVICE(0x050D, 0x845A)},
++ /* Corega */
++ {USB_DEVICE(0x07AA, 0x0051)},
++ /* Edimax */
++ {USB_DEVICE(0x7392, 0x7622)},
++ /* NEC */
++ {USB_DEVICE(0x0409, 0x02B6)},
+ {}
+ };
+
+@@ -103,8 +172,20 @@ MODULE_DEVICE_TABLE(usb, rtl871x_usb_id_
+ static struct specific_device_id specific_device_id_tbl[] = {
+ {.idVendor = 0x0b05, .idProduct = 0x1791,
+ .flags = SPEC_DEV_ID_DISABLE_HT},
++ {.idVendor = 0x0df6, .idProduct = 0x0059,
++ .flags = SPEC_DEV_ID_DISABLE_HT},
++ {.idVendor = 0x13d3, .idProduct = 0x3306,
++ .flags = SPEC_DEV_ID_DISABLE_HT},
+ {.idVendor = 0x13D3, .idProduct = 0x3311,
+ .flags = SPEC_DEV_ID_DISABLE_HT},
++ {.idVendor = 0x13d3, .idProduct = 0x3335,
++ .flags = SPEC_DEV_ID_DISABLE_HT},
++ {.idVendor = 0x13d3, .idProduct = 0x3336,
++ .flags = SPEC_DEV_ID_DISABLE_HT},
++ {.idVendor = 0x13d3, .idProduct = 0x3340,
++ .flags = SPEC_DEV_ID_DISABLE_HT},
++ {.idVendor = 0x13d3, .idProduct = 0x3341,
++ .flags = SPEC_DEV_ID_DISABLE_HT},
+ {}
+ };
+
--- /dev/null
+From 9c33008412683eba91bce2dc4575f28c728b6bd1 Mon Sep 17 00:00:00 2001
+From: Denis Kirjanov <dkirjanov@kernel.org>
+Date: Mon, 10 Jan 2011 20:09:30 +0000
+Subject: staging: rt2860: Fix incorrect netif_stop_queue usage warning
+
+From: Denis Kirjanov <dkirjanov@kernel.org>
+
+commit 9c33008412683eba91bce2dc4575f28c728b6bd1 upstream.
+
+The TX queues are allocated inside register_netdev.
+It doesn't make any sense to stop the queue before
+allocation.
+
+Signed-off-by: Denis Kirjanov <dkirjanov@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rt2860/rt_main_dev.c | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- a/drivers/staging/rt2860/rt_main_dev.c
++++ b/drivers/staging/rt2860/rt_main_dev.c
+@@ -483,8 +483,6 @@ struct net_device *RtmpPhyNetDevInit(str
+ net_dev->ml_priv = (void *)pAd;
+ pAd->net_dev = net_dev;
+
+- netif_stop_queue(net_dev);
+-
+ return net_dev;
+
+ }
--- /dev/null
+From 1f0613158ea14b399fd7a16470630a729ba9d0c3 Mon Sep 17 00:00:00 2001
+From: Chen, Chien-Chia <machen@novell.com>
+Date: Thu, 9 Dec 2010 10:52:08 +0800
+Subject: Staging: rt2860: fix previous patch error
+
+From: Chen, Chien-Chia <machen@novell.com>
+
+commit 1f0613158ea14b399fd7a16470630a729ba9d0c3 upstream.
+
+Somehow Greg messed up the last patch and missed a chunk. This patch
+contains the missing chunk.
+
+Acked-by: Lee, Chun-Yi <jlee@novell.com>
+Signed-off-by: Chen, Chien-Chia <machen@novell.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rt2860/chips/rt30xx.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/staging/rt2860/chips/rt30xx.c
++++ b/drivers/staging/rt2860/chips/rt30xx.c
+@@ -441,7 +441,7 @@ void RT30xxReverseRFSleepModeSetup(struc
+
+ /* VCO_IC, RF R7 register Bit 4 & Bit 5 to 1 */
+ RT30xxReadRFRegister(pAd, RF_R07, &RFValue);
+- RFValue |= 0x30;
++ RFValue |= 0x20;
+ RT30xxWriteRFRegister(pAd, RF_R07, RFValue);
+
+ /* Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 1 */
--- /dev/null
+From 1226056d9608d241db4b558a0d88a347ad5c66ae Mon Sep 17 00:00:00 2001
+From: Chen, Chien-Chia <machen@novell.com>
+Date: Wed, 8 Dec 2010 14:20:33 -0800
+Subject: Staging: rt3090: Fix RT3090 scan AP function
+
+From: Chen, Chien-Chia <machen@novell.com>
+
+commit 1226056d9608d241db4b558a0d88a347ad5c66ae upstream.
+
+Fix RT3090 scan AP function.
+
+This patch fixes the rt3090 wireless module failed
+to scan AP around due to Windows driver causing
+rt3090 module unable to scan AP in Linux.
+
+Acked-by: Lee, Chun-Yi <jlee@novell.com>
+Signed-off-by: Chen, Chien-Chia <machen@novell.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/rt2860/chips/rt3090.c | 3 ++-
+ drivers/staging/rt2860/chips/rt30xx.c | 2 +-
+ 2 files changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/staging/rt2860/chips/rt3090.c
++++ b/drivers/staging/rt2860/chips/rt3090.c
+@@ -51,7 +51,8 @@ void NICInitRT3090RFRegisters(struct rt_
+ if (IS_RT3090(pAd)) {
+ /* Init RF calibration */
+ /* Driver should toggle RF R30 bit7 before init RF registers */
+- u32 RfReg = 0, data;
++ u8 RfReg;
++ u32 data;
+
+ RT30xxReadRFRegister(pAd, RF_R30, (u8 *)&RfReg);
+ RfReg |= 0x80;
+--- a/drivers/staging/rt2860/chips/rt30xx.c
++++ b/drivers/staging/rt2860/chips/rt30xx.c
+@@ -53,7 +53,7 @@ struct rt_reg_pair RT30xx_RFRegTable[] =
+ ,
+ {RF_R06, 0x02}
+ ,
+- {RF_R07, 0x70}
++ {RF_R07, 0x60}
+ ,
+ {RF_R09, 0x0F}
+ ,
--- /dev/null
+From e7bf352fcd85c33b0805da891fc97fea8b5e996e Mon Sep 17 00:00:00 2001
+From: roel kluin <roel.kluin@gmail.com>
+Date: Mon, 3 Jan 2011 11:59:48 -0800
+Subject: Staging: speakup: &&/|| confusion in silent_store()
+
+From: roel kluin <roel.kluin@gmail.com>
+
+commit e7bf352fcd85c33b0805da891fc97fea8b5e996e upstream.
+
+Fix test: the branch is always taken.
+
+Signed-off-by: Roel Kluin <roel.kluin@gmail.com>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/speakup/kobjects.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/staging/speakup/kobjects.c
++++ b/drivers/staging/speakup/kobjects.c
+@@ -332,7 +332,7 @@ static ssize_t silent_store(struct kobje
+ unsigned long flags;
+
+ len = strlen(buf);
+- if (len > 0 || len < 3) {
++ if (len > 0 && len < 3) {
+ ch = buf[0];
+ if (ch == '\n')
+ ch = '0';
--- /dev/null
+From 5414e557fca545614ceedc3d3496f747457e2e3b Mon Sep 17 00:00:00 2001
+From: Nitin Gupta <ngupta@vflare.org>
+Date: Sat, 5 Feb 2011 20:34:20 -0500
+Subject: staging: zram: fix data corruption issue
+
+From: Nitin Gupta <ngupta@vflare.org>
+
+commit 5414e557fca545614ceedc3d3496f747457e2e3b upstream.
+
+In zram_read() and zram_write() we were not incrementing the
+index number and thus were reading/writing values from/to
+incorrect sectors on zram disk, resulting in data corruption.
+
+Signed-off-by: Nitin Gupta <ngupta@vflare.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/staging/zram/zram_drv.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/staging/zram/zram_drv.c
++++ b/drivers/staging/zram/zram_drv.c
+@@ -227,6 +227,7 @@ static int zram_read(struct zram *zram,
+
+ if (zram_test_flag(zram, index, ZRAM_ZERO)) {
+ handle_zero_page(page);
++ index++;
+ continue;
+ }
+
+@@ -235,12 +236,14 @@ static int zram_read(struct zram *zram,
+ pr_debug("Read before write: sector=%lu, size=%u",
+ (ulong)(bio->bi_sector), bio->bi_size);
+ /* Do nothing */
++ index++;
+ continue;
+ }
+
+ /* Page is stored uncompressed since it's incompressible */
+ if (unlikely(zram_test_flag(zram, index, ZRAM_UNCOMPRESSED))) {
+ handle_uncompressed_page(zram, page, index);
++ index++;
+ continue;
+ }
+
+@@ -320,6 +323,7 @@ static int zram_write(struct zram *zram,
+ mutex_unlock(&zram->lock);
+ zram_stat_inc(&zram->stats.pages_zero);
+ zram_set_flag(zram, index, ZRAM_ZERO);
++ index++;
+ continue;
+ }
+
--- /dev/null
+From aa52b3a92918039b273fc9d1994bd34227c40269 Mon Sep 17 00:00:00 2001
+From: Nicolaus Colberg <nicolaus.colberg@cinterion.com>
+Date: Wed, 12 Jan 2011 16:30:03 +0100
+Subject: USB: adding USB support for Cinterion's HC2x, EU3 and PH8 products
+
+From: Nicolaus Colberg <nicolaus.colberg@cinterion.com>
+
+commit aa52b3a92918039b273fc9d1994bd34227c40269 upstream.
+
+/drivers/usb/serial/option.c: Adding support for Cinterion's HC25, HC28,
+HC28J, EU3-E, EU3-P and PH8 by correcting/adding Cinterion's and
+Siemens' Vendor IDs as well as Product IDs and USB_DEVICE tuples
+
+Signed-off-by: Nicolaus Colberg <nicolaus.colberg@cinterion.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 23 +++++++++++++++++++++--
+ 1 file changed, 21 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -382,7 +382,16 @@ static void option_instat_callback(struc
+ #define HAIER_VENDOR_ID 0x201e
+ #define HAIER_PRODUCT_CE100 0x2009
+
+-#define CINTERION_VENDOR_ID 0x0681
++/* Cinterion (formerly Siemens) products */
++#define SIEMENS_VENDOR_ID 0x0681
++#define CINTERION_VENDOR_ID 0x1e2d
++#define CINTERION_PRODUCT_HC25_MDM 0x0047
++#define CINTERION_PRODUCT_HC25_MDMNET 0x0040
++#define CINTERION_PRODUCT_HC28_MDM 0x004C
++#define CINTERION_PRODUCT_HC28_MDMNET 0x004A /* same for HC28J */
++#define CINTERION_PRODUCT_EU3_E 0x0051
++#define CINTERION_PRODUCT_EU3_P 0x0052
++#define CINTERION_PRODUCT_PH8 0x0053
+
+ /* Olivetti products */
+ #define OLIVETTI_VENDOR_ID 0x0b3c
+@@ -945,7 +954,17 @@ static const struct usb_device_id option
+ { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_100F) },
+ { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1011)},
+ { USB_DEVICE(PIRELLI_VENDOR_ID, PIRELLI_PRODUCT_1012)},
+- { USB_DEVICE(CINTERION_VENDOR_ID, 0x0047) },
++ /* Cinterion */
++ { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_E) },
++ { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_EU3_P) },
++ { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_PH8) },
++ { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) },
++ { USB_DEVICE(CINTERION_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
++ { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDM) },
++ { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC25_MDMNET) },
++ { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDM) }, /* HC28 enumerates with Siemens or Cinterion VID depending on FW revision */
++ { USB_DEVICE(SIEMENS_VENDOR_ID, CINTERION_PRODUCT_HC28_MDMNET) },
++
+ { USB_DEVICE(OLIVETTI_VENDOR_ID, OLIVETTI_PRODUCT_OLICARD100) },
+ { USB_DEVICE(CELOT_VENDOR_ID, CELOT_PRODUCT_CT680M) }, /* CT-650 CDMA 450 1xEVDO modem */
+ { USB_DEVICE(ONDA_VENDOR_ID, ONDA_MT825UP) }, /* ONDA MT825UP modem */
--- /dev/null
+From 721d92fc6373dee15846216f9d178ec240ec0fd7 Mon Sep 17 00:00:00 2001
+From: Arvid Ephraim Picciani <arvid.picciani@nokia.com>
+Date: Tue, 25 Jan 2011 15:58:40 +0100
+Subject: USB: cdc-acm: Adding second ACM channel support for Nokia N8
+
+From: Arvid Ephraim Picciani <arvid.picciani@nokia.com>
+
+commit 721d92fc6373dee15846216f9d178ec240ec0fd7 upstream.
+
+This adds the N8 to the list of devices in cdc-acm, in order to get the
+secondary ACM device exposed.
+
+In the spirit of:
+http://kerneltrap.org/mailarchive/linux-usb/2010/9/4/6264554
+
+Signed-off-by: Arvid Ephraim Picciani <arvid.picciani@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/class/cdc-acm.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/class/cdc-acm.c
++++ b/drivers/usb/class/cdc-acm.c
+@@ -1607,6 +1607,7 @@ static const struct usb_device_id acm_id
+ { NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
+ { NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
+ { NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
++ { NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
+ { SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
+
+ /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
--- /dev/null
+From baab93afc2844b68d57b0dcca5e1d34c5d7cf411 Mon Sep 17 00:00:00 2001
+From: Alex He <alex.he@amd.com>
+Date: Tue, 21 Dec 2010 17:45:46 +0800
+Subject: USB: EHCI: ASPM quirk of ISOC on AMD Hudson
+
+From: Alex He <alex.he@amd.com>
+
+commit baab93afc2844b68d57b0dcca5e1d34c5d7cf411 upstream.
+
+AMD Hudson also needs the same ASPM quirk as SB800
+
+Signed-off-by: Alex He <alex.he@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci-pci.c | 33 ++++++++++++++++++++-------------
+ 1 file changed, 20 insertions(+), 13 deletions(-)
+
+--- a/drivers/usb/host/ehci-pci.c
++++ b/drivers/usb/host/ehci-pci.c
+@@ -41,28 +41,35 @@ static int ehci_pci_reinit(struct ehci_h
+ return 0;
+ }
+
+-static int ehci_quirk_amd_SB800(struct ehci_hcd *ehci)
++static int ehci_quirk_amd_hudson(struct ehci_hcd *ehci)
+ {
+ struct pci_dev *amd_smbus_dev;
+ u8 rev = 0;
+
+ amd_smbus_dev = pci_get_device(PCI_VENDOR_ID_ATI, 0x4385, NULL);
+- if (!amd_smbus_dev)
+- return 0;
+-
+- pci_read_config_byte(amd_smbus_dev, PCI_REVISION_ID, &rev);
+- if (rev < 0x40) {
+- pci_dev_put(amd_smbus_dev);
+- amd_smbus_dev = NULL;
+- return 0;
++ if (amd_smbus_dev) {
++ pci_read_config_byte(amd_smbus_dev, PCI_REVISION_ID, &rev);
++ if (rev < 0x40) {
++ pci_dev_put(amd_smbus_dev);
++ amd_smbus_dev = NULL;
++ return 0;
++ }
++ } else {
++ amd_smbus_dev = pci_get_device(PCI_VENDOR_ID_AMD, 0x780b, NULL);
++ if (!amd_smbus_dev)
++ return 0;
++ pci_read_config_byte(amd_smbus_dev, PCI_REVISION_ID, &rev);
++ if (rev < 0x11 || rev > 0x18) {
++ pci_dev_put(amd_smbus_dev);
++ amd_smbus_dev = NULL;
++ return 0;
++ }
+ }
+
+ if (!amd_nb_dev)
+ amd_nb_dev = pci_get_device(PCI_VENDOR_ID_AMD, 0x1510, NULL);
+- if (!amd_nb_dev)
+- ehci_err(ehci, "QUIRK: unable to get AMD NB device\n");
+
+- ehci_info(ehci, "QUIRK: Enable AMD SB800 L1 fix\n");
++ ehci_info(ehci, "QUIRK: Enable exception for AMD Hudson ASPM\n");
+
+ pci_dev_put(amd_smbus_dev);
+ amd_smbus_dev = NULL;
+@@ -128,7 +135,7 @@ static int ehci_pci_setup(struct usb_hcd
+ /* cache this readonly data; minimize chip reads */
+ ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
+
+- if (ehci_quirk_amd_SB800(ehci))
++ if (ehci_quirk_amd_hudson(ehci))
+ ehci->amd_l1_fix = 1;
+
+ retval = ehci_halt(ehci);
--- /dev/null
+From f75593ceaa08e6d27aec1a5de31cded19e850dd1 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Thu, 6 Jan 2011 10:17:09 -0500
+Subject: USB: EHCI: fix DMA deallocation bug
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit f75593ceaa08e6d27aec1a5de31cded19e850dd1 upstream.
+
+This patch (as1440) fixes a bug in ehci-hcd. ehci->periodic_size is
+used to compute the size in a dma_alloc_coherent() call, but then it
+gets changed later on. As a result, the corresponding call to
+dma_free_coherent() passes a different size from the original
+allocation. Fix the problem by adjusting ehci->periodic_size before
+carrying out any of the memory allocations.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: Larry Finger <Larry.Finger@lwfinger.net>
+CC: David Brownell <david-b@pacbell.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci-hcd.c | 19 ++++++++++++-------
+ 1 file changed, 12 insertions(+), 7 deletions(-)
+
+--- a/drivers/usb/host/ehci-hcd.c
++++ b/drivers/usb/host/ehci-hcd.c
+@@ -572,6 +572,8 @@ static int ehci_init(struct usb_hcd *hcd
+ ehci->iaa_watchdog.function = ehci_iaa_watchdog;
+ ehci->iaa_watchdog.data = (unsigned long) ehci;
+
++ hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params);
++
+ /*
+ * hw default: 1K periodic list heads, one per frame.
+ * periodic_size can shrink by USBCMD update if hcc_params allows.
+@@ -579,11 +581,20 @@ static int ehci_init(struct usb_hcd *hcd
+ ehci->periodic_size = DEFAULT_I_TDPS;
+ INIT_LIST_HEAD(&ehci->cached_itd_list);
+ INIT_LIST_HEAD(&ehci->cached_sitd_list);
++
++ if (HCC_PGM_FRAMELISTLEN(hcc_params)) {
++ /* periodic schedule size can be smaller than default */
++ switch (EHCI_TUNE_FLS) {
++ case 0: ehci->periodic_size = 1024; break;
++ case 1: ehci->periodic_size = 512; break;
++ case 2: ehci->periodic_size = 256; break;
++ default: BUG();
++ }
++ }
+ if ((retval = ehci_mem_init(ehci, GFP_KERNEL)) < 0)
+ return retval;
+
+ /* controllers may cache some of the periodic schedule ... */
+- hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params);
+ if (HCC_ISOC_CACHE(hcc_params)) // full frame cache
+ ehci->i_thresh = 2 + 8;
+ else // N microframes cached
+@@ -637,12 +648,6 @@ static int ehci_init(struct usb_hcd *hcd
+ /* periodic schedule size can be smaller than default */
+ temp &= ~(3 << 2);
+ temp |= (EHCI_TUNE_FLS << 2);
+- switch (EHCI_TUNE_FLS) {
+- case 0: ehci->periodic_size = 1024; break;
+- case 1: ehci->periodic_size = 512; break;
+- case 2: ehci->periodic_size = 256; break;
+- default: BUG();
+- }
+ }
+ if (HCC_LPM(hcc_params)) {
+ /* support link power management EHCI 1.1 addendum */
--- /dev/null
+From 148fc55fd0449683a1d15bf219ad8d8b6fa17545 Mon Sep 17 00:00:00 2001
+From: Yin Kangkai <kangkai.yin@intel.com>
+Date: Fri, 28 Jan 2011 12:04:35 +0800
+Subject: USB: EHCI: fix scheduling while atomic during suspend
+
+From: Yin Kangkai <kangkai.yin@intel.com>
+
+commit 148fc55fd0449683a1d15bf219ad8d8b6fa17545 upstream.
+
+There is a msleep with spin lock held during ehci pci suspend, which will
+cause kernel BUG: scheduling while atomic. Fix that.
+
+[ 184.139620] BUG: scheduling while atomic: kworker/u:11/416/0x00000002
+[ 184.139632] 4 locks held by kworker/u:11/416:
+[ 184.139640] #0: (events_unbound){+.+.+.}, at: [<c104ddd4>] process_one_work+0x1b3/0x4cb
+[ 184.139669] #1: ((&entry->work)){+.+.+.}, at: [<c104ddd4>] process_one_work+0x1b3/0x4cb
+[ 184.139686] #2: (&__lockdep_no_validate__){+.+.+.}, at: [<c127cde3>] __device_suspend+0x2c/0x154
+[ 184.139706] #3: (&(&ehci->lock)->rlock){-.-...}, at: [<c132f3d8>] ehci_pci_suspend+0x35/0x7b
+[ 184.139725] Modules linked in: serio_raw pegasus joydev mrst_gfx(C) battery
+[ 184.139748] irq event stamp: 52
+[ 184.139753] hardirqs last enabled at (51): [<c14fdaac>] mutex_lock_nested+0x258/0x293
+[ 184.139766] hardirqs last disabled at (52): [<c14fe7b4>] _raw_spin_lock_irqsave+0xf/0x3e
+[ 184.139777] softirqs last enabled at (0): [<c10371c1>] copy_process+0x3d2/0x109d
+[ 184.139789] softirqs last disabled at (0): [< (null)>] (null)
+[ 184.139802] Pid: 416, comm: kworker/u:11 Tainted: G C 2.6.37-6.3-adaptation-oaktrail #37
+[ 184.139809] Call Trace:
+[ 184.139820] [<c102eeff>] __schedule_bug+0x5e/0x65
+[ 184.139829] [<c14fbca5>] schedule+0xac/0xc4c
+[ 184.139840] [<c11d4845>] ? string+0x37/0x8b
+[ 184.139853] [<c1044f21>] ? lock_timer_base+0x1f/0x3e
+[ 184.139863] [<c14fe7da>] ? _raw_spin_lock_irqsave+0x35/0x3e
+[ 184.139876] [<c1061590>] ? trace_hardirqs_off+0xb/0xd
+[ 184.139885] [<c14fccdc>] schedule_timeout+0x283/0x2d9
+[ 184.139896] [<c104516f>] ? process_timeout+0x0/0xa
+[ 184.139906] [<c14fcd47>] schedule_timeout_uninterruptible+0x15/0x17
+[ 184.139916] [<c104566a>] msleep+0x10/0x16
+[ 184.139926] [<c132f316>] ehci_adjust_port_wakeup_flags+0x69/0xf6
+[ 184.139937] [<c132f3eb>] ehci_pci_suspend+0x48/0x7b
+[ 184.139946] [<c1326587>] suspend_common+0x52/0xbb
+[ 184.139956] [<c1326625>] hcd_pci_suspend+0x26/0x28
+[ 184.139967] [<c11e7182>] pci_pm_suspend+0x5f/0xd0
+[ 184.139976] [<c127ca3a>] pm_op+0x5d/0xf0
+[ 184.139986] [<c127ceac>] __device_suspend+0xf5/0x154
+[ 184.139996] [<c127d2c8>] async_suspend+0x16/0x3a
+[ 184.140006] [<c1058f54>] async_run_entry_fn+0x89/0x111
+[ 184.140016] [<c104deb6>] process_one_work+0x295/0x4cb
+[ 184.140026] [<c1058ecb>] ? async_run_entry_fn+0x0/0x111
+[ 184.140036] [<c104e3d0>] worker_thread+0x17f/0x298
+[ 184.140045] [<c104e251>] ? worker_thread+0x0/0x298
+[ 184.140055] [<c105277f>] kthread+0x64/0x69
+[ 184.140064] [<c105271b>] ? kthread+0x0/0x69
+[ 184.140075] [<c1002efa>] kernel_thread_helper+0x6/0x1a
+
+Signed-off-by: Yin Kangkai <kangkai.yin@intel.com>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+CC: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci-au1xxx.c | 2 +-
+ drivers/usb/host/ehci-hub.c | 7 +++++++
+ drivers/usb/host/ehci-pci.c | 2 +-
+ 3 files changed, 9 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/host/ehci-au1xxx.c
++++ b/drivers/usb/host/ehci-au1xxx.c
+@@ -227,8 +227,8 @@ static int ehci_hcd_au1xxx_drv_suspend(s
+ * mark HW unaccessible. The PM and USB cores make sure that
+ * the root hub is either suspended or stopped.
+ */
+- spin_lock_irqsave(&ehci->lock, flags);
+ ehci_prepare_ports_for_controller_suspend(ehci, device_may_wakeup(dev));
++ spin_lock_irqsave(&ehci->lock, flags);
+ ehci_writel(ehci, 0, &ehci->regs->intr_enable);
+ (void)ehci_readl(ehci, &ehci->regs->intr_enable);
+
+--- a/drivers/usb/host/ehci-hub.c
++++ b/drivers/usb/host/ehci-hub.c
+@@ -111,6 +111,7 @@ static void ehci_adjust_port_wakeup_flag
+ {
+ int port;
+ u32 temp;
++ unsigned long flags;
+
+ /* If remote wakeup is enabled for the root hub but disabled
+ * for the controller, we must adjust all the port wakeup flags
+@@ -120,6 +121,8 @@ static void ehci_adjust_port_wakeup_flag
+ if (!ehci_to_hcd(ehci)->self.root_hub->do_remote_wakeup || do_wakeup)
+ return;
+
++ spin_lock_irqsave(&ehci->lock, flags);
++
+ /* clear phy low-power mode before changing wakeup flags */
+ if (ehci->has_hostpc) {
+ port = HCS_N_PORTS(ehci->hcs_params);
+@@ -131,7 +134,9 @@ static void ehci_adjust_port_wakeup_flag
+ temp = ehci_readl(ehci, hostpc_reg);
+ ehci_writel(ehci, temp & ~HOSTPC_PHCD, hostpc_reg);
+ }
++ spin_unlock_irqrestore(&ehci->lock, flags);
+ msleep(5);
++ spin_lock_irqsave(&ehci->lock, flags);
+ }
+
+ port = HCS_N_PORTS(ehci->hcs_params);
+@@ -170,6 +175,8 @@ static void ehci_adjust_port_wakeup_flag
+ /* Does the root hub have a port wakeup pending? */
+ if (!suspending && (ehci_readl(ehci, &ehci->regs->status) & STS_PCD))
+ usb_hcd_resume_root_hub(ehci_to_hcd(ehci));
++
++ spin_unlock_irqrestore(&ehci->lock, flags);
+ }
+
+ static int ehci_bus_suspend (struct usb_hcd *hcd)
+--- a/drivers/usb/host/ehci-pci.c
++++ b/drivers/usb/host/ehci-pci.c
+@@ -360,8 +360,8 @@ static int ehci_pci_suspend(struct usb_h
+ * mark HW unaccessible. The PM and USB cores make sure that
+ * the root hub is either suspended or stopped.
+ */
+- spin_lock_irqsave (&ehci->lock, flags);
+ ehci_prepare_ports_for_controller_suspend(ehci, do_wakeup);
++ spin_lock_irqsave (&ehci->lock, flags);
+ ehci_writel(ehci, 0, &ehci->regs->intr_enable);
+ (void)ehci_readl(ehci, &ehci->regs->intr_enable);
+
--- /dev/null
+From bf3d7d40e42a85ca73a34e1385ff34f092a384eb Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Wed, 2 Feb 2011 13:59:33 -0500
+Subject: USB: fix race between root-hub resume and wakeup requests
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit bf3d7d40e42a85ca73a34e1385ff34f092a384eb upstream.
+
+The USB core keeps track of pending resume requests for root hubs, in
+order to resolve races between wakeup requests and suspends. However
+the code that does this is subject to another race (between wakeup
+requests and resumes) because the WAKEUP_PENDING flag is cleared
+before the resume occurs, leaving a window in which another wakeup
+request might arrive.
+
+This patch (as1447) fixes the problem by clearing the WAKEUP_PENDING
+flag after the resume instead of before it.
+
+This fixes Bugzilla #24952.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: Paul Bender <pebender@san.rr.com>
+Tested-by: warpme <warpme@o2.pl>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/hcd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/core/hcd.c
++++ b/drivers/usb/core/hcd.c
+@@ -1956,7 +1956,6 @@ int hcd_bus_resume(struct usb_device *rh
+
+ dev_dbg(&rhdev->dev, "usb %s%s\n",
+ (msg.event & PM_EVENT_AUTO ? "auto-" : ""), "resume");
+- clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
+ if (!hcd->driver->bus_resume)
+ return -ENOENT;
+ if (hcd->state == HC_STATE_RUNNING)
+@@ -1964,6 +1963,7 @@ int hcd_bus_resume(struct usb_device *rh
+
+ hcd->state = HC_STATE_RESUMING;
+ status = hcd->driver->bus_resume(hcd);
++ clear_bit(HCD_FLAG_WAKEUP_PENDING, &hcd->flags);
+ if (status == 0) {
+ /* TRSMRCY = 10 msec */
+ msleep(10);
--- /dev/null
+From 6ec2f46c4b4abf48c88c0ae7c476f347b97e1105 Mon Sep 17 00:00:00 2001
+From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Date: Sat, 29 Jan 2011 15:32:52 +0100
+Subject: USB: ftdi_sio: add ST Micro Connect Lite uart support
+
+From: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+
+commit 6ec2f46c4b4abf48c88c0ae7c476f347b97e1105 upstream.
+
+on ST Micro Connect Lite we have 4 port
+Part A and B for the JTAG
+Port C Uart
+Port D for PIO
+
+Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c | 26 ++++++++++++++++++++++++++
+ drivers/usb/serial/ftdi_sio_ids.h | 6 ++++++
+ 2 files changed, 32 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -99,6 +99,7 @@ struct ftdi_sio_quirk {
+ static int ftdi_jtag_probe(struct usb_serial *serial);
+ static int ftdi_mtxorb_hack_setup(struct usb_serial *serial);
+ static int ftdi_NDI_device_setup(struct usb_serial *serial);
++static int ftdi_stmclite_probe(struct usb_serial *serial);
+ static void ftdi_USB_UIRT_setup(struct ftdi_private *priv);
+ static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv);
+
+@@ -122,6 +123,10 @@ static struct ftdi_sio_quirk ftdi_HE_TIR
+ .port_probe = ftdi_HE_TIRA1_setup,
+ };
+
++static struct ftdi_sio_quirk ftdi_stmclite_quirk = {
++ .probe = ftdi_stmclite_probe,
++};
++
+ /*
+ * The 8U232AM has the same API as the sio except for:
+ * - it can support MUCH higher baudrates; up to:
+@@ -809,6 +814,8 @@ static struct usb_device_id id_table_com
+ { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) },
+ { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID),
+ .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
++ { USB_DEVICE(ST_VID, ST_STMCLT1030_PID),
++ .driver_info = (kernel_ulong_t)&ftdi_stmclite_quirk },
+ { }, /* Optional parameter entry */
+ { } /* Terminating entry */
+ };
+@@ -1691,6 +1698,25 @@ static int ftdi_jtag_probe(struct usb_se
+ }
+
+ /*
++ * First and second port on STMCLiteadaptors is reserved for JTAG interface
++ * and the forth port for pio
++ */
++static int ftdi_stmclite_probe(struct usb_serial *serial)
++{
++ struct usb_device *udev = serial->dev;
++ struct usb_interface *interface = serial->interface;
++
++ dbg("%s", __func__);
++
++ if (interface == udev->actconfig->interface[2])
++ return 0;
++
++ dev_info(&udev->dev, "Ignoring serial port reserved for JTAG\n");
++
++ return -ENODEV;
++}
++
++/*
+ * The Matrix Orbital VK204-25-USB has an invalid IN endpoint.
+ * We have to correct it if we want to read from it.
+ */
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -1034,6 +1034,12 @@
+ #define WHT_PID 0x0004 /* Wireless Handheld Terminal */
+
+ /*
++ * STMicroelectonics
++ */
++#define ST_VID 0x0483
++#define ST_STMCLT1030_PID 0x3747 /* ST Micro Connect Lite STMCLT1030 */
++
++/*
+ * Papouch products (http://www.papouch.com/)
+ * Submitted by Folkert van Heusden
+ */
--- /dev/null
+From 28fe2eb0162a1d23370dd99ff7d0e35632b1ee91 Mon Sep 17 00:00:00 2001
+From: Michael Williamson <michael.h.williamson@gmail.com>
+Date: Thu, 27 Jan 2011 18:36:19 -0600
+Subject: USB: ftdi_sio: Add VID=0x0647, PID=0x0100 for Acton Research spectrograph
+
+From: Michael Williamson <michael.h.williamson@gmail.com>
+
+commit 28fe2eb0162a1d23370dd99ff7d0e35632b1ee91 upstream.
+
+Add the USB Vendor ID and Product ID for a Acton Research Corp.
+spectrograph device with a FTDI chip for serial I/O.
+
+Signed-off-by: Michael H Williamson <michael.h.williamson@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c | 1 +
+ drivers/usb/serial/ftdi_sio_ids.h | 6 ++++++
+ 2 files changed, 7 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -620,6 +620,7 @@ static struct usb_device_id id_table_com
+ { USB_DEVICE(FTDI_VID, FTDI_OCEANIC_PID) },
+ { USB_DEVICE(TTI_VID, TTI_QL355P_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_RM_CANVIEW_PID) },
++ { USB_DEVICE(ACTON_VID, ACTON_SPECTRAPRO_PID) },
+ { USB_DEVICE(CONTEC_VID, CONTEC_COM1USBH_PID) },
+ { USB_DEVICE(BANDB_VID, BANDB_USOTL4_PID) },
+ { USB_DEVICE(BANDB_VID, BANDB_USTL4_PID) },
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -518,6 +518,12 @@
+ #define RATOC_PRODUCT_ID_USB60F 0xb020
+
+ /*
++ * Acton Research Corp.
++ */
++#define ACTON_VID 0x0647 /* Vendor ID */
++#define ACTON_SPECTRAPRO_PID 0x0100
++
++/*
+ * Contec products (http://www.contec.com)
+ * Submitted by Daniel Sangorrin
+ */
--- /dev/null
+From ad84e4a9efb7c8ed322bafb6ebdb9c3a49a3d3a8 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Mon, 10 Jan 2011 11:24:14 -0500
+Subject: USB: g_printer: fix bug in module parameter definitions
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit ad84e4a9efb7c8ed322bafb6ebdb9c3a49a3d3a8 upstream.
+
+This patch (as1442) fixes a bug in g_printer: Module parameters should
+not be marked "__initdata" if they are accessible in sysfs (i.e., if
+the mode value in the module_param() macro is nonzero). Otherwise
+attempts to access the parameters will cause addressing violations.
+
+Character-string module parameters must not be marked "__initdata"
+if the module can be unloaded, because the kernel needs to access the
+parameter variable at unload time in order to free the
+dynamically-allocated string.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+CC: Roland Kletzing <devzero@web.de>
+CC: Craig W. Nadler <craig@nadler.us>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/gadget/printer.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+--- a/drivers/usb/gadget/printer.c
++++ b/drivers/usb/gadget/printer.c
+@@ -131,31 +131,31 @@ static struct printer_dev usb_printer_ga
+ * parameters are in UTF-8 (superset of ASCII's 7 bit characters).
+ */
+
+-static ushort __initdata idVendor;
++static ushort idVendor;
+ module_param(idVendor, ushort, S_IRUGO);
+ MODULE_PARM_DESC(idVendor, "USB Vendor ID");
+
+-static ushort __initdata idProduct;
++static ushort idProduct;
+ module_param(idProduct, ushort, S_IRUGO);
+ MODULE_PARM_DESC(idProduct, "USB Product ID");
+
+-static ushort __initdata bcdDevice;
++static ushort bcdDevice;
+ module_param(bcdDevice, ushort, S_IRUGO);
+ MODULE_PARM_DESC(bcdDevice, "USB Device version (BCD)");
+
+-static char *__initdata iManufacturer;
++static char *iManufacturer;
+ module_param(iManufacturer, charp, S_IRUGO);
+ MODULE_PARM_DESC(iManufacturer, "USB Manufacturer string");
+
+-static char *__initdata iProduct;
++static char *iProduct;
+ module_param(iProduct, charp, S_IRUGO);
+ MODULE_PARM_DESC(iProduct, "USB Product string");
+
+-static char *__initdata iSerialNum;
++static char *iSerialNum;
+ module_param(iSerialNum, charp, S_IRUGO);
+ MODULE_PARM_DESC(iSerialNum, "1");
+
+-static char *__initdata iPNPstring;
++static char *iPNPstring;
+ module_param(iPNPstring, charp, S_IRUGO);
+ MODULE_PARM_DESC(iPNPstring, "MFG:linux;MDL:g_printer;CLS:PRINTER;SN:1;");
+
--- /dev/null
+From d5aa475180d03d45c5dc6134aa833f1b3e89c45e Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Mon, 10 Jan 2011 11:23:05 -0500
+Subject: USB: g_printer: fix bug in unregistration
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit d5aa475180d03d45c5dc6134aa833f1b3e89c45e upstream.
+
+This patch (as1441) fixes a bug in g_printer. The gadget driver, char
+device number, and class device should be unregistered in reverse
+order of registration. As it is now, when the module is unloaded the
+class device gets unregistered first, causing a crash when the unbind
+method tries to access it.
+
+This fixes Bugzilla #25882.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+CC: Roland Kletzing <devzero@web.de>
+CC: Craig W. Nadler <craig@nadler.us>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/gadget/printer.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+--- a/drivers/usb/gadget/printer.c
++++ b/drivers/usb/gadget/printer.c
+@@ -1596,13 +1596,12 @@ cleanup(void)
+ int status;
+
+ mutex_lock(&usb_printer_gadget.lock_printer_io);
+- class_destroy(usb_gadget_class);
+- unregister_chrdev_region(g_printer_devno, 2);
+-
+ status = usb_gadget_unregister_driver(&printer_driver);
+ if (status)
+ ERROR(dev, "usb_gadget_unregister_driver %x\n", status);
+
++ unregister_chrdev_region(g_printer_devno, 2);
++ class_destroy(usb_gadget_class);
+ mutex_unlock(&usb_printer_gadget.lock_printer_io);
+ }
+ module_exit(cleanup);
--- /dev/null
+From 271c1150b4f8e1685e5a8cbf76e329ec894481da Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no>
+Date: Mon, 17 Jan 2011 14:19:37 +0100
+Subject: USB: io_edgeport: fix the reported firmware major and minor
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Bjørn Mork <bjorn@mork.no>
+
+commit 271c1150b4f8e1685e5a8cbf76e329ec894481da upstream.
+
+The major and minor number saved in the product_info structure
+were copied from the address instead of the data, causing an
+inconsistency in the reported versions during firmware loading:
+
+ usb 4-1: firmware: requesting edgeport/down.fw
+ /usr/src/linux/drivers/usb/serial/io_edgeport.c: downloading firmware version (930) 1.16.4
+ [..]
+ /usr/src/linux/drivers/usb/serial/io_edgeport.c: edge_startup - time 3 4328191260
+ /usr/src/linux/drivers/usb/serial/io_edgeport.c: FirmwareMajorVersion 0.0.4
+
+This can cause some confusion whether firmware loaded successfully
+or not.
+
+Signed-off-by: Bjørn Mork <bjorn@mork.no>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/io_edgeport.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/io_edgeport.c
++++ b/drivers/usb/serial/io_edgeport.c
+@@ -2889,8 +2889,8 @@ static void load_application_firmware(st
+
+ dbg("%s %d.%d.%d", fw_info, rec->data[0], rec->data[1], build);
+
+- edge_serial->product_info.FirmwareMajorVersion = fw->data[0];
+- edge_serial->product_info.FirmwareMinorVersion = fw->data[1];
++ edge_serial->product_info.FirmwareMajorVersion = rec->data[0];
++ edge_serial->product_info.FirmwareMinorVersion = rec->data[1];
+ edge_serial->product_info.FirmwareBuildNumber = cpu_to_le16(build);
+
+ for (rec = ihex_next_binrec(rec); rec;
--- /dev/null
+From d199c96d41d80a567493e12b8e96ea056a1350c1 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Mon, 31 Jan 2011 10:56:37 -0500
+Subject: USB: prevent buggy hubs from crashing the USB stack
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit d199c96d41d80a567493e12b8e96ea056a1350c1 upstream.
+
+If anyone comes across a high-speed hub that (by mistake or by design)
+claims to have no Transaction Translators, plugging a full- or
+low-speed device into it will cause the USB stack to crash. This
+patch (as1446) prevents the problem by ignoring such devices, since
+the kernel has no way to communicate with them.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: Perry Neben <neben@vmware.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/hub.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/usb/core/hub.c
++++ b/drivers/usb/core/hub.c
+@@ -2723,6 +2723,11 @@ hub_port_init (struct usb_hub *hub, stru
+ udev->ttport = hdev->ttport;
+ } else if (udev->speed != USB_SPEED_HIGH
+ && hdev->speed == USB_SPEED_HIGH) {
++ if (!hub->tt.hub) {
++ dev_err(&udev->dev, "parent hub has no TT\n");
++ retval = -EINVAL;
++ goto fail;
++ }
+ udev->tt = &hub->tt;
+ udev->ttport = port1;
+ }
--- /dev/null
+From a58861fbde2a350df4d27fc62fb42905669b37ce Mon Sep 17 00:00:00 2001
+From: Dan Williams <dcbw@redhat.com>
+Date: Fri, 31 Dec 2010 10:51:51 -0600
+Subject: USB: qcaux: add Pantech UML290 device ID
+
+From: Dan Williams <dcbw@redhat.com>
+
+commit a58861fbde2a350df4d27fc62fb42905669b37ce upstream.
+
+Another CDC-ACM + vendor specific interface layout for the QCDM port.
+
+Signed-off-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/qcaux.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/qcaux.c
++++ b/drivers/usb/serial/qcaux.c
+@@ -36,6 +36,7 @@
+ #define UTSTARCOM_PRODUCT_UM175_V1 0x3712
+ #define UTSTARCOM_PRODUCT_UM175_V2 0x3714
+ #define UTSTARCOM_PRODUCT_UM175_ALLTEL 0x3715
++#define PANTECH_PRODUCT_UML290_VZW 0x3718
+
+ /* CMOTECH devices */
+ #define CMOTECH_VENDOR_ID 0x16d8
+@@ -66,6 +67,7 @@ static struct usb_device_id id_table[] =
+ { USB_DEVICE_AND_INTERFACE_INFO(LG_VENDOR_ID, LG_PRODUCT_VX4400_6000, 0xff, 0xff, 0x00) },
+ { USB_DEVICE_AND_INTERFACE_INFO(SANYO_VENDOR_ID, SANYO_PRODUCT_KATANA_LX, 0xff, 0xff, 0x00) },
+ { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_U520, 0xff, 0x00, 0x00) },
++ { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, PANTECH_PRODUCT_UML290_VZW, 0xff, 0xff, 0xff) },
+ { },
+ };
+ MODULE_DEVICE_TABLE(usb, id_table);
--- /dev/null
+From 5620b5f7f19e9ee3fcf6ecf493fed7821b7b495b Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Tue, 11 Jan 2011 14:16:50 -0500
+Subject: USB serial: add missing .usb_driver field in serial drivers
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 5620b5f7f19e9ee3fcf6ecf493fed7821b7b495b upstream.
+
+This patch (as1443) fixes a bug found in many of the USB serial
+drivers: They don't set the .usb_driver field in their
+usb_serial_driver structure. This field is needed for assigning
+dynamic IDs for device matching.
+
+In addition, starting with the 2.6.37 kernel, the .usb_driver field is
+needed for proper autosuspend operation. Without it, attempts to open
+the device file will fail.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Reported-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/io_tables.h | 1 +
+ drivers/usb/serial/iuu_phoenix.c | 1 +
+ drivers/usb/serial/keyspan.h | 4 ++++
+ drivers/usb/serial/moto_modem.c | 1 +
+ drivers/usb/serial/oti6858.c | 1 +
+ drivers/usb/serial/qcaux.c | 1 +
+ drivers/usb/serial/siemens_mpi.c | 1 +
+ drivers/usb/serial/spcp8x5.c | 1 +
+ drivers/usb/serial/usb-serial.c | 8 ++++++--
+ drivers/usb/serial/usb_debug.c | 1 +
+ 10 files changed, 18 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/serial/io_tables.h
++++ b/drivers/usb/serial/io_tables.h
+@@ -199,6 +199,7 @@ static struct usb_serial_driver epic_dev
+ .name = "epic",
+ },
+ .description = "EPiC device",
++ .usb_driver = &io_driver,
+ .id_table = Epic_port_id_table,
+ .num_ports = 1,
+ .open = edge_open,
+--- a/drivers/usb/serial/iuu_phoenix.c
++++ b/drivers/usb/serial/iuu_phoenix.c
+@@ -1275,6 +1275,7 @@ static struct usb_serial_driver iuu_devi
+ .name = "iuu_phoenix",
+ },
+ .id_table = id_table,
++ .usb_driver = &iuu_driver,
+ .num_ports = 1,
+ .bulk_in_size = 512,
+ .bulk_out_size = 512,
+--- a/drivers/usb/serial/keyspan.h
++++ b/drivers/usb/serial/keyspan.h
+@@ -546,6 +546,7 @@ static struct usb_serial_driver keyspan_
+ .name = "keyspan_no_firm",
+ },
+ .description = "Keyspan - (without firmware)",
++ .usb_driver = &keyspan_driver,
+ .id_table = keyspan_pre_ids,
+ .num_ports = 1,
+ .attach = keyspan_fake_startup,
+@@ -557,6 +558,7 @@ static struct usb_serial_driver keyspan_
+ .name = "keyspan_1",
+ },
+ .description = "Keyspan 1 port adapter",
++ .usb_driver = &keyspan_driver,
+ .id_table = keyspan_1port_ids,
+ .num_ports = 1,
+ .open = keyspan_open,
+@@ -579,6 +581,7 @@ static struct usb_serial_driver keyspan_
+ .name = "keyspan_2",
+ },
+ .description = "Keyspan 2 port adapter",
++ .usb_driver = &keyspan_driver,
+ .id_table = keyspan_2port_ids,
+ .num_ports = 2,
+ .open = keyspan_open,
+@@ -601,6 +604,7 @@ static struct usb_serial_driver keyspan_
+ .name = "keyspan_4",
+ },
+ .description = "Keyspan 4 port adapter",
++ .usb_driver = &keyspan_driver,
+ .id_table = keyspan_4port_ids,
+ .num_ports = 4,
+ .open = keyspan_open,
+--- a/drivers/usb/serial/moto_modem.c
++++ b/drivers/usb/serial/moto_modem.c
+@@ -44,6 +44,7 @@ static struct usb_serial_driver moto_dev
+ .name = "moto-modem",
+ },
+ .id_table = id_table,
++ .usb_driver = &moto_driver,
+ .num_ports = 1,
+ };
+
+--- a/drivers/usb/serial/oti6858.c
++++ b/drivers/usb/serial/oti6858.c
+@@ -157,6 +157,7 @@ static struct usb_serial_driver oti6858_
+ .name = "oti6858",
+ },
+ .id_table = id_table,
++ .usb_driver = &oti6858_driver,
+ .num_ports = 1,
+ .open = oti6858_open,
+ .close = oti6858_close,
+--- a/drivers/usb/serial/qcaux.c
++++ b/drivers/usb/serial/qcaux.c
+@@ -86,6 +86,7 @@ static struct usb_serial_driver qcaux_de
+ .name = "qcaux",
+ },
+ .id_table = id_table,
++ .usb_driver = &qcaux_driver,
+ .num_ports = 1,
+ };
+
+--- a/drivers/usb/serial/siemens_mpi.c
++++ b/drivers/usb/serial/siemens_mpi.c
+@@ -42,6 +42,7 @@ static struct usb_serial_driver siemens_
+ .name = "siemens_mpi",
+ },
+ .id_table = id_table,
++ .usb_driver = &siemens_usb_mpi_driver,
+ .num_ports = 1,
+ };
+
+--- a/drivers/usb/serial/spcp8x5.c
++++ b/drivers/usb/serial/spcp8x5.c
+@@ -649,6 +649,7 @@ static struct usb_serial_driver spcp8x5_
+ .name = "SPCP8x5",
+ },
+ .id_table = id_table,
++ .usb_driver = &spcp8x5_driver,
+ .num_ports = 1,
+ .open = spcp8x5_open,
+ .dtr_rts = spcp8x5_dtr_rts,
+--- a/drivers/usb/serial/usb-serial.c
++++ b/drivers/usb/serial/usb-serial.c
+@@ -1344,11 +1344,15 @@ int usb_serial_register(struct usb_seria
+ return -ENODEV;
+
+ fixup_generic(driver);
+- if (driver->usb_driver)
+- driver->usb_driver->supports_autosuspend = 1;
+
+ if (!driver->description)
+ driver->description = driver->driver.name;
++ if (!driver->usb_driver) {
++ WARN(1, "Serial driver %s has no usb_driver\n",
++ driver->description);
++ return -EINVAL;
++ }
++ driver->usb_driver->supports_autosuspend = 1;
+
+ /* Add this device to our list of devices */
+ mutex_lock(&table_lock);
+--- a/drivers/usb/serial/usb_debug.c
++++ b/drivers/usb/serial/usb_debug.c
+@@ -75,6 +75,7 @@ static struct usb_serial_driver debug_de
+ .name = "debug",
+ },
+ .id_table = id_table,
++ .usb_driver = &debug_driver,
+ .num_ports = 1,
+ .bulk_out_size = USB_DEBUG_MAX_PACKET_SIZE,
+ .break_ctl = usb_debug_break_ctl,
--- /dev/null
+From a9d61bc49188e32d2ae9cf0f683cde3e1744feef Mon Sep 17 00:00:00 2001
+From: Pieter Maes <maescool@gmail.com>
+Date: Tue, 18 Jan 2011 00:26:16 +0100
+Subject: USB: serial: Updated support for ICOM devices
+
+From: Pieter Maes <maescool@gmail.com>
+
+commit a9d61bc49188e32d2ae9cf0f683cde3e1744feef upstream.
+
+I found the original patch on the db0fhn repeater wiki (couldn't find the email
+of the origial author) I guess it was never commited.
+I updated and added some Icom HAM-radio devices to the ftdi driver.
+Added extra comments to make clear what devices it are.
+
+Signed-off-by: Pieter Maes <maescool@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c | 12 +++++++++++-
+ drivers/usb/serial/ftdi_sio_ids.h | 20 ++++++++++++++++----
+ 2 files changed, 27 insertions(+), 5 deletions(-)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -675,7 +675,17 @@ static struct usb_device_id id_table_com
+ { USB_DEVICE(FTDI_VID, FTDI_PCDJ_DAC2_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_RRCIRKITS_LOCOBUFFER_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_ASK_RDR400_PID) },
+- { USB_DEVICE(ICOM_ID1_VID, ICOM_ID1_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_1_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_OPC_U_UC_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_RP2C1_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_RP2C2_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_RP2D_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_RP2VT_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_RP2VR_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_RP4KVT_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_RP4KVR_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_RP2KVT_PID) },
++ { USB_DEVICE(ICOM_VID, ICOM_ID_RP2KVR_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_ACG_HFDUAL_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_YEI_SERVOCENTER31_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_THORLABS_PID) },
+--- a/drivers/usb/serial/ftdi_sio_ids.h
++++ b/drivers/usb/serial/ftdi_sio_ids.h
+@@ -569,11 +569,23 @@
+ #define OCT_US101_PID 0x0421 /* OCT US101 USB to RS-232 */
+
+ /*
+- * Icom ID-1 digital transceiver
++ * Definitions for Icom Inc. devices
+ */
+-
+-#define ICOM_ID1_VID 0x0C26
+-#define ICOM_ID1_PID 0x0004
++#define ICOM_VID 0x0C26 /* Icom vendor ID */
++/* Note: ID-1 is a communications tranceiver for HAM-radio operators */
++#define ICOM_ID_1_PID 0x0004 /* ID-1 USB to RS-232 */
++/* Note: OPC is an Optional cable to connect an Icom Tranceiver */
++#define ICOM_OPC_U_UC_PID 0x0018 /* OPC-478UC, OPC-1122U cloning cable */
++/* Note: ID-RP* devices are Icom Repeater Devices for HAM-radio */
++#define ICOM_ID_RP2C1_PID 0x0009 /* ID-RP2C Asset 1 to RS-232 */
++#define ICOM_ID_RP2C2_PID 0x000A /* ID-RP2C Asset 2 to RS-232 */
++#define ICOM_ID_RP2D_PID 0x000B /* ID-RP2D configuration port*/
++#define ICOM_ID_RP2VT_PID 0x000C /* ID-RP2V Transmit config port */
++#define ICOM_ID_RP2VR_PID 0x000D /* ID-RP2V Receive config port */
++#define ICOM_ID_RP4KVT_PID 0x0010 /* ID-RP4000V Transmit config port */
++#define ICOM_ID_RP4KVR_PID 0x0011 /* ID-RP4000V Receive config port */
++#define ICOM_ID_RP2KVT_PID 0x0012 /* ID-RP2000V Transmit config port */
++#define ICOM_ID_RP2KVR_PID 0x0013 /* ID-RP2000V Receive config port */
+
+ /*
+ * GN Otometrics (http://www.otometrics.com)
--- /dev/null
+From c25f6b1591b158f7ae3b9132367d0fa6d632e70e Mon Sep 17 00:00:00 2001
+From: Nick Holloway <Nick.Holloway@pyrites.org.uk>
+Date: Wed, 26 Jan 2011 21:47:43 +0000
+Subject: USB: Storage: Add unusual_devs entry for VTech Kidizoom
+
+From: Nick Holloway <Nick.Holloway@pyrites.org.uk>
+
+commit c25f6b1591b158f7ae3b9132367d0fa6d632e70e upstream.
+
+This device suffers from the off-by-one error when reporting the capacity,
+so add entry with US_FL_FIX_CAPACITY.
+
+Signed-off-by: Nick Holloway <Nick.Holloway@pyrites.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1397,6 +1397,13 @@ UNUSUAL_DEV( 0x0f19, 0x0105, 0x0100, 0x
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+ US_FL_IGNORE_RESIDUE ),
+
++/* Submitted by Nick Holloway */
++UNUSUAL_DEV( 0x0f88, 0x042e, 0x0100, 0x0100,
++ "VTech",
++ "Kidizoom",
++ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++ US_FL_FIX_CAPACITY ),
++
+ /* Reported by Michael Stattmann <michael@stattmann.com> */
+ UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000,
+ "Sony Ericsson",
--- /dev/null
+From b14de3857227cd978f515247853fd15cc2425d3e Mon Sep 17 00:00:00 2001
+From: Ionut Nicu <ionut.nicu@gmail.com>
+Date: Tue, 28 Dec 2010 22:21:08 +0200
+Subject: USB: ti_usb: fix module removal
+
+From: Ionut Nicu <ionut.nicu@gmail.com>
+
+commit b14de3857227cd978f515247853fd15cc2425d3e upstream.
+
+If usb_deregister() is called after usb_serial_deregister() when
+the device is plugged in, the following Oops occurs:
+
+[ 95.337377] BUG: unable to handle kernel NULL pointer dereference at 00000010
+[ 95.338236] IP: [<c0776b2d>] klist_put+0x12/0x62
+[ 95.338356] *pdpt = 000000003001a001 *pde = 0000000000000000
+[ 95.338356] Oops: 0000 [#1] SMP
+[ 95.340499] last sysfs file: /sys/devices/pci0000:00/0000:00:1d.2/usb8/idVendor
+[ 95.340499] Modules linked in: ti_usb_3410_5052(-) usbserial cpufreq_ondemand acpi_cpufreq mperf iptable_nat nf_nat iptable_mangle ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 ip6table_filter ip6_tables ipv6 uinput arc4 ecb iwlagn iwlcore mac80211 cfg80211 microcode pcspkr acer_wmi joydev wmi sky2 [last unloaded: scsi_wait_scan]
+[ 95.341908]
+[ 95.341908] Pid: 1532, comm: modprobe Not tainted 2.6.37-rc7+ #6 Eiger /Aspire 5930
+[ 95.341908] EIP: 0060:[<c0776b2d>] EFLAGS: 00010246 CPU: 0
+[ 95.341908] EIP is at klist_put+0x12/0x62
+[ 95.341908] EAX: 00000000 EBX: eedc0c84 ECX: c09c21b4 EDX: 00000001
+[ 95.341908] ESI: 00000000 EDI: efaa0c1c EBP: f214fe2c ESP: f214fe1c
+[ 95.341908] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
+[ 95.341908] Process modprobe (pid: 1532, ti=f214e000 task=efaaf080 task.ti=f214e000)
+[ 95.341908] Stack:
+[ 95.341908] f214fe24 eedc0c84 efaaf080 efaa0c1c f214fe34 c0776ba8 f214fe5c c0776c76
+[ 95.341908] c09c21b4 c09c21b4 eedc0c84 efaaf080 00000000 c0634398 eafe2d1c f7b515f0
+[ 95.341908] f214fe6c c0631b5c eafe2d50 eafe2d1c f214fe7c c0631ba2 eafe2d1c eafe2c00
+[ 95.341908] Call Trace:
+[ 95.341908] [<c0776ba8>] ? klist_del+0xd/0xf
+[ 95.341908] [<c0776c76>] ? klist_remove+0x48/0x74
+[ 95.341908] [<c0634398>] ? devres_release_all+0x49/0x51
+[ 95.341908] [<c0631b5c>] ? __device_release_driver+0x7b/0xa4
+[ 95.341908] [<c0631ba2>] ? device_release_driver+0x1d/0x28
+[ 95.341908] [<c06317c4>] ? bus_remove_device+0x92/0xa1
+[ 95.341908] [<c062f3d8>] ? device_del+0xf9/0x13e
+[ 95.341908] [<f7b06146>] ? usb_serial_disconnect+0xd9/0x116 [usbserial]
+[ 95.341908] [<c0681e3f>] ? usb_disable_interface+0x32/0x40
+[ 95.341908] [<c0683972>] ? usb_unbind_interface+0x48/0xfd
+[ 95.341908] [<c0631b43>] ? __device_release_driver+0x62/0xa4
+[ 95.341908] [<c06320b9>] ? driver_detach+0x62/0x81
+[ 95.341908] [<c0631a41>] ? bus_remove_driver+0x8f/0xae
+[ 95.341908] [<c063214c>] ? driver_unregister+0x50/0x57
+[ 95.341908] [<c0682f95>] ? usb_deregister+0x77/0x84
+[ 95.341908] [<f7b505b6>] ? ti_exit+0x26/0x28 [ti_usb_3410_5052]
+[ 95.341908] [<c046a307>] ? sys_delete_module+0x181/0x1de
+[ 95.341908] [<c04e2727>] ? path_put+0x1a/0x1d
+[ 95.341908] [<c047f4c5>] ? audit_syscall_entry+0x116/0x138
+[ 95.341908] [<c04094df>] ? sysenter_do_call+0x12/0x28
+[ 95.341908] Code: 00 83 7d f0 00 74 09 85 f6 74 05 89 f0 ff 55 f0 8b 43 04 5a 5b 5e 5f 5d c3 55 89 e5 57 56 53 89 c3 83 ec 04 8b 30 83 e6 fe 89 f0 <8b> 7e 10 88 55 f0 e8 47 26 01 00 8a 55 f0 84 d2 74 17 f6 03 01
+[ 95.341908] EIP: [<c0776b2d>] klist_put+0x12/0x62 SS:ESP 0068:f214fe1c
+[ 95.341908] CR2: 0000000000000010
+[ 95.342357] ---[ end trace 8124d00ad871ad18 ]---
+
+Signed-off-by: Ionut Nicu <ionut.nicu@mindbit.ro>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ti_usb_3410_5052.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/serial/ti_usb_3410_5052.c
++++ b/drivers/usb/serial/ti_usb_3410_5052.c
+@@ -369,9 +369,9 @@ failed_1port:
+
+ static void __exit ti_exit(void)
+ {
++ usb_deregister(&ti_usb_driver);
+ usb_serial_deregister(&ti_1port_device);
+ usb_serial_deregister(&ti_2port_device);
+- usb_deregister(&ti_usb_driver);
+ }
+
+
--- /dev/null
+From 12f68c480c7155a66bd2a76ab2fef28dd5f93fa2 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Mon, 3 Jan 2011 16:47:49 -0500
+Subject: USB: usb-storage: unusual_devs entry for CamSport Evo
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 12f68c480c7155a66bd2a76ab2fef28dd5f93fa2 upstream.
+
+This patch (as1438) adds an unusual_devs entry for the MagicPixel
+FW_Omega2 chip, used in the CamSport Evo camera. The firmware
+incorrectly reports a vendor-specific bDeviceClass.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Reported-by: <ttkspam@free.fr>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1044,6 +1044,15 @@ UNUSUAL_DEV( 0x084d, 0x0011, 0x0110, 0x
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+ US_FL_BULK32),
+
++/* Reported by <ttkspam@free.fr>
++ * The device reports a vendor-specific device class, requiring an
++ * explicit vendor/product match.
++ */
++UNUSUAL_DEV( 0x0851, 0x1542, 0x0002, 0x0002,
++ "MagicPixel",
++ "FW_Omega2",
++ USB_SC_DEVICE, USB_PR_DEVICE, NULL, 0),
++
+ /* Andrew Lunn <andrew@lunn.ch>
+ * PanDigital Digital Picture Frame. Does not like ALLOW_MEDIUM_REMOVAL
+ * on LUN 4.
--- /dev/null
+From 3ea3c9b5a8464ec8223125f95e5dddb3bfd02a39 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Tue, 25 Jan 2011 13:07:04 -0500
+Subject: USB: usb-storage: unusual_devs entry for Coby MP3 player
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 3ea3c9b5a8464ec8223125f95e5dddb3bfd02a39 upstream.
+
+This patch (as1444) adds an unusual_devs entry for an MP3 player from
+Coby electronics. The device has two nasty bugs.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Tested-by: Jasper Mackenzie <scarletpimpernal@hotmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1890,6 +1890,13 @@ UNUSUAL_DEV( 0x1e68, 0x001b, 0x0000, 0x
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+ US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ),
+
++/* Reported by Jasper Mackenzie <scarletpimpernal@hotmail.com> */
++UNUSUAL_DEV( 0x1e74, 0x4621, 0x0000, 0x0000,
++ "Coby Electronics",
++ "MP3 Player",
++ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++ US_FL_BULK_IGNORE_TAG | US_FL_MAX_SECTORS_64 ),
++
+ UNUSUAL_DEV( 0x2116, 0x0320, 0x0001, 0x0001,
+ "ST",
+ "2A",
--- /dev/null
+From cae41118f50ef0c431e13159df6d7dd8bbd54004 Mon Sep 17 00:00:00 2001
+From: Richard Schütz <r.schtz@t-online.de>
+Date: Sun, 19 Dec 2010 21:18:38 +0100
+Subject: USB: usb-storage: unusual_devs update for Cypress ATACB
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Richard Schütz <r.schtz@t-online.de>
+
+commit cae41118f50ef0c431e13159df6d7dd8bbd54004 upstream.
+
+New device ID added for unusual Cypress ATACB device.
+
+Signed-off-by: Richard Schütz <r.schtz@t-online.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_cypress.h | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/usb/storage/unusual_cypress.h
++++ b/drivers/usb/storage/unusual_cypress.h
+@@ -31,4 +31,9 @@ UNUSUAL_DEV( 0x04b4, 0x6831, 0x0000, 0x
+ "Cypress ISD-300LP",
+ USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
+
++UNUSUAL_DEV( 0x14cd, 0x6116, 0x0000, 0x9999,
++ "Super Top",
++ "USB 2.0 SATA BRIDGE",
++ USB_SC_CYP_ATACB, USB_PR_DEVICE, NULL, 0),
++
+ #endif /* defined(CONFIG_USB_STORAGE_CYPRESS_ATACB) || ... */
--- /dev/null
+From 7e1e7bd9dbd469267b6e6de1bf8d71a7d65ce86a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Richard=20Sch=C3=BCtz?= <r.schtz@t-online.de>
+Date: Wed, 22 Dec 2010 14:28:56 +0100
+Subject: USB: usb-storage: unusual_devs update for TrekStor DataStation maxi g.u external hard drive enclosure
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Richard=20Sch=C3=BCtz?= <r.schtz@t-online.de>
+
+commit 7e1e7bd9dbd469267b6e6de1bf8d71a7d65ce86a upstream.
+
+The TrekStor DataStation maxi g.u external hard drive enclosure uses a
+JMicron USB to SATA chip which needs the US_FL_IGNORE_RESIDUE flag to work
+properly.
+
+Signed-off-by: Richard Schütz <r.schtz@t-online.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1872,6 +1872,15 @@ UNUSUAL_DEV( 0x1908, 0x3335, 0x0200, 0x0
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+ US_FL_NO_READ_DISC_INFO ),
+
++/* Patch by Richard Schütz <r.schtz@t-online.de>
++ * This external hard drive enclosure uses a JMicron chip which
++ * needs the US_FL_IGNORE_RESIDUE flag to work properly. */
++UNUSUAL_DEV( 0x1e68, 0x001b, 0x0000, 0x0000,
++ "TrekStor GmbH & Co. KG",
++ "DataStation maxi g.u",
++ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
++ US_FL_IGNORE_RESIDUE | US_FL_SANE_SENSE ),
++
+ UNUSUAL_DEV( 0x2116, 0x0320, 0x0001, 0x0001,
+ "ST",
+ "2A",