--- /dev/null
+From joe.korty@ccur.com Fri Mar 20 14:26:10 2009
+From: Joe Korty <joe.korty@ccur.com>
+Date: Thu, 19 Mar 2009 13:27:44 -0400
+Subject: Fix misreporting of #cores as #hyperthreads for Q9550
+To: stable@kernel.org
+Cc: Ingo Molnar <mingo@elte.hu>, "H. Peter Anvin" <hpa@linux.intel.com>
+Message-ID: <20090319172744.GA2600@tsunami.ccur.com>
+
+From: Joe Korty <joe.korty@ccur.com>
+
+Fix misreporting of #cores for the Intel Quad Core Q9550.
+
+For the Q9550, in x86_64 mode, /proc/cpuinfo mistakenly
+reports the #cores present as the #hyperthreads present.
+i386 mode was not examined but is assumed to have the
+same problem.
+
+A backport of the following three 2.6.29-rc1 patches
+fixes the problem:
+ 066941bd4eeb159307a5d7d795100d0887c00442:
+ [PATCH] x86: unmask CPUID levels on Intel CPUs
+ 99fb4d349db7e7dacb2099c5cc320a9e2d31c1ef:
+ [PATCH] x86: unmask CPUID levels on Intel CPUs, fix
+ bdf21a49bab28f0d9613e8d8724ef9c9168b61b9:
+ [PATCH] x86: add MSR_IA32_MISC_ENABLE bits to <asm/msr-index.h>
+
+From the first patch: "If the CPUID limit bit in
+MSR_IA32_MISC_ENABLE is set, clear it to make all CPUID
+information available. This is required for some features
+to work, in particular XSAVE."
+
+Originally-Developed-by: H. Peter Anvin <hpa@linux.intel.com>
+Backported-by: Joe Korty <joe.korty@ccur.com>
+Cc: Ingo Molnar <mingo@elte.hu>
+Signed-off-by: Joe Korty <joe.korty@ccur.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/x86/kernel/cpu/intel.c | 13 +++++++++++++
+ arch/x86/kernel/cpu/intel_64.c | 13 +++++++++++++
+ include/asm-x86/msr-index.h | 29 +++++++++++++++++++++++++++++
+ 3 files changed, 55 insertions(+)
+
+--- a/arch/x86/kernel/cpu/intel_64.c
++++ b/arch/x86/kernel/cpu/intel_64.c
+@@ -9,6 +9,19 @@
+
+ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
+ {
++ /* Unmask CPUID levels if masked: */
++ if (c->x86 == 6 && c->x86_model >= 15) {
++ u64 misc_enable;
++
++ rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable);
++
++ if (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) {
++ misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID;
++ wrmsrl(MSR_IA32_MISC_ENABLE, misc_enable);
++ c->cpuid_level = cpuid_eax(0);
++ }
++ }
++
+ if ((c->x86 == 0xf && c->x86_model >= 0x03) ||
+ (c->x86 == 0x6 && c->x86_model >= 0x0e))
+ set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);
+--- a/arch/x86/kernel/cpu/intel.c
++++ b/arch/x86/kernel/cpu/intel.c
+@@ -32,6 +32,19 @@ struct movsl_mask movsl_mask __read_most
+
+ static void __cpuinit early_init_intel(struct cpuinfo_x86 *c)
+ {
++ /* Unmask CPUID levels if masked: */
++ if (c->x86 == 6 && c->x86_model >= 15) {
++ u64 misc_enable;
++
++ rdmsrl(MSR_IA32_MISC_ENABLE, misc_enable);
++
++ if (misc_enable & MSR_IA32_MISC_ENABLE_LIMIT_CPUID) {
++ misc_enable &= ~MSR_IA32_MISC_ENABLE_LIMIT_CPUID;
++ wrmsrl(MSR_IA32_MISC_ENABLE, misc_enable);
++ c->cpuid_level = cpuid_eax(0);
++ }
++ }
++
+ /* Netburst reports 64 bytes clflush size, but does IO in 128 bytes */
+ if (c->x86 == 15 && c->x86_cache_alignment == 64)
+ c->x86_cache_alignment = 128;
+--- a/include/asm-x86/msr-index.h
++++ b/include/asm-x86/msr-index.h
+@@ -196,6 +196,35 @@
+ #define MSR_IA32_THERM_STATUS 0x0000019c
+ #define MSR_IA32_MISC_ENABLE 0x000001a0
+
++/* MISC_ENABLE bits: architectural */
++#define MSR_IA32_MISC_ENABLE_FAST_STRING (1ULL << 0)
++#define MSR_IA32_MISC_ENABLE_TCC (1ULL << 1)
++#define MSR_IA32_MISC_ENABLE_EMON (1ULL << 7)
++#define MSR_IA32_MISC_ENABLE_BTS_UNAVAIL (1ULL << 11)
++#define MSR_IA32_MISC_ENABLE_PEBS_UNAVAIL (1ULL << 12)
++#define MSR_IA32_MISC_ENABLE_ENHANCED_SPEEDSTEP (1ULL << 16)
++#define MSR_IA32_MISC_ENABLE_MWAIT (1ULL << 18)
++#define MSR_IA32_MISC_ENABLE_LIMIT_CPUID (1ULL << 22)
++#define MSR_IA32_MISC_ENABLE_XTPR_DISABLE (1ULL << 23)
++#define MSR_IA32_MISC_ENABLE_XD_DISABLE (1ULL << 34)
++
++/* MISC_ENABLE bits: model-specific, meaning may vary from core to core */
++#define MSR_IA32_MISC_ENABLE_X87_COMPAT (1ULL << 2)
++#define MSR_IA32_MISC_ENABLE_TM1 (1ULL << 3)
++#define MSR_IA32_MISC_ENABLE_SPLIT_LOCK_DISABLE (1ULL << 4)
++#define MSR_IA32_MISC_ENABLE_L3CACHE_DISABLE (1ULL << 6)
++#define MSR_IA32_MISC_ENABLE_SUPPRESS_LOCK (1ULL << 8)
++#define MSR_IA32_MISC_ENABLE_PREFETCH_DISABLE (1ULL << 9)
++#define MSR_IA32_MISC_ENABLE_FERR (1ULL << 10)
++#define MSR_IA32_MISC_ENABLE_FERR_MULTIPLEX (1ULL << 10)
++#define MSR_IA32_MISC_ENABLE_TM2 (1ULL << 13)
++#define MSR_IA32_MISC_ENABLE_ADJ_PREF_DISABLE (1ULL << 19)
++#define MSR_IA32_MISC_ENABLE_SPEEDSTEP_LOCK (1ULL << 20)
++#define MSR_IA32_MISC_ENABLE_L1D_CONTEXT (1ULL << 24)
++#define MSR_IA32_MISC_ENABLE_DCU_PREF_DISABLE (1ULL << 37)
++#define MSR_IA32_MISC_ENABLE_TURBO_DISABLE (1ULL << 38)
++#define MSR_IA32_MISC_ENABLE_IP_PREF_DISABLE (1ULL << 39)
++
+ /* Intel Model 6 */
+ #define MSR_P6_EVNTSEL0 0x00000186
+ #define MSR_P6_EVNTSEL1 0x00000187
--- /dev/null
+From jdaniel@computer.org Fri Mar 20 14:18:34 2009
+From: Johns Daniel <jdaniel@computer.org>
+Date: Sat, 14 Mar 2009 10:03:51 -0500
+Subject: powerpc: Remove extra semicolon in fsl_soc.c
+To: greg@kroah.com
+Cc: grant.likely@secretlab.ca, afleming@freescale.com, linuxppc-dev@ozlabs.org, stable@kernel.org
+Message-ID: <49BBC757.7090001@computer.org>
+
+From: Johns Daniel <jdaniel@computer.org>
+
+TSEC/MDIO will not work with older device trees because of a semicolon
+at the end of a macro resulting in an empty for loop body.
+
+This fix only applies to 2.6.28; this code is gone in 2.6.29, according
+to Grant Likely!
+
+Signed-off-by: Johns Daniel <johns.daniel@gmail.com>
+Acked-by: Grant Likely <grant.likely@secretlab.ca>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ arch/powerpc/sysdev/fsl_soc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/powerpc/sysdev/fsl_soc.c
++++ b/arch/powerpc/sysdev/fsl_soc.c
+@@ -255,7 +255,7 @@ static int __init gfar_mdio_of_init(void
+ gfar_mdio_of_init_one(np);
+
+ /* try the deprecated version */
+- for_each_compatible_node(np, "mdio", "gianfar");
++ for_each_compatible_node(np, "mdio", "gianfar")
+ gfar_mdio_of_init_one(np);
+
+ return 0;
s390-__div64_31-broken-for-config_march_g5.patch
thinkpad-acpi-fix-module-autoloading-for-older-models.patch
v4l-dvb-cx23885-fix-oops-for-mixed-install-of-analog-and-digital-only-cards.patch
+fix-misreporting-of-cores-as-hyperthreads-for-q9550.patch
+powerpc-remove-extra-semicolon-in-fsl_soc.c.patch
+usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch
+usb-ehci-fix-isochronous-urb-leak.patch
+usb-add-vendor-product-id-for-new-cdma-u727-to-option-driver.patch
+usb-option.c-add-zte-622-modem-device.patch
+usb-add-device-id-for-option-gtm380-to-option-driver.patch
+usb-option-let-cdc-acm-handle-sony-ericsson-f3507g-dell-5530.patch
+usb-serial-add-ftdi-usb-serial-converter-devices.patch
+usb-serial-ftdi-enable-uart-detection-on-gnice-jtag-adaptors-blacklist-interface0.patch
+usb-serial-new-cp2101-device-id.patch
+usb-storage-unusual-usb-device-prolific-2507-variation-added.patch
+usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.patch
+usb-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch
+usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch
--- /dev/null
+From e7f2f0d77a7b483a26054f29ba8393831b25a8a4 Mon Sep 17 00:00:00 2001
+From: Achilleas Kotsis <akots@exponent.gr>
+Date: Mon, 16 Mar 2009 16:35:02 +0200
+Subject: USB: Add device id for Option GTM380 to option driver
+
+From: Achilleas Kotsis <akots@exponent.gr>
+
+commit e7f2f0d77a7b483a26054f29ba8393831b25a8a4 upstream.
+
+Option GTM380 in Modem mode uses Product ID 0x7201. This has been tested and works
+on production systems for over 6 months.
+
+Signed-off-by: Achilleas Kotsis <akots@exponent.gr>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -89,6 +89,7 @@ static int option_send_setup(struct tty
+ #define OPTION_PRODUCT_ETNA_MODEM_GT 0x7041
+ #define OPTION_PRODUCT_ETNA_MODEM_EX 0x7061
+ #define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100
++#define OPTION_PRODUCT_GTM380_MODEM 0x7201
+
+ #define HUAWEI_VENDOR_ID 0x12D1
+ #define HUAWEI_PRODUCT_E600 0x1001
+@@ -319,6 +320,7 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) },
+ { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) },
+ { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) },
++ { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GTM380_MODEM) },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) },
--- /dev/null
+From 56a21827439a4d715b510bfaf488534e6f4ad2f8 Mon Sep 17 00:00:00 2001
+From: Dirk Hohndel <hohndel@infradead.org>
+Date: Sat, 14 Mar 2009 20:47:39 -0700
+Subject: USB: Add Vendor/Product ID for new CDMA U727 to option driver
+
+From: Dirk Hohndel <hohndel@infradead.org>
+
+commit 56a21827439a4d715b510bfaf488534e6f4ad2f8 upstream.
+
+* newer versions of the Novatel Wireless U727 CDMA 3G USB stick
+ have a different Product ID (0x5010); adding this ID makes them
+ work just fine with the option driver
+
+Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -190,6 +190,7 @@ static int option_send_setup(struct tty
+ /* OVATION PRODUCTS */
+ #define NOVATELWIRELESS_PRODUCT_MC727 0x4100
+ #define NOVATELWIRELESS_PRODUCT_MC950D 0x4400
++#define NOVATELWIRELESS_PRODUCT_U727 0x5010
+
+ /* FUTURE NOVATEL PRODUCTS */
+ #define NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED 0X6000
+@@ -402,6 +403,7 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */
++ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U727) }, /* Novatel MC727/U727/USB727 */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_FULLSPEED) }, /* Novatel EVDO product */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_FULLSPEED) }, /* Novatel HSPA product */
+ { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_EMBEDDED_FULLSPEED) }, /* Novatel EVDO Embedded product */
--- /dev/null
+From 391016f6e2fe3b9979b4c6880a76e5e434d6947c Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Mon, 16 Mar 2009 14:21:56 -0400
+Subject: USB: EHCI: expedite unlinks when the root hub is suspended
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 391016f6e2fe3b9979b4c6880a76e5e434d6947c upstream.
+
+This patch (as1225) fixes a bug in ehci-hcd. The condition for
+whether unlinked QHs can become IDLE should not be that the controller
+is halted, but rather that the controller isn't running. In other
+words when the root hub is suspended, the hardware doesn't own any
+QHs.
+
+This fixes a problem that can show up during hibernation: If a QH is
+only partially unlinked when the root hub is frozen, then when the
+root hub is thawed the QH won't be in the IDLE state. As a result it
+can't be used properly for new URB submissions.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Reported-by: Brandon Philips <brandon@ifup.org>
+Tested-by: Brandon Philips <brandon@ifup.org>
+Acked-by: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci-q.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/host/ehci-q.c
++++ b/drivers/usb/host/ehci-q.c
+@@ -1095,7 +1095,8 @@ static void start_unlink_async (struct e
+ prev->qh_next = qh->qh_next;
+ wmb ();
+
+- if (unlikely (ehci_to_hcd(ehci)->state == HC_STATE_HALT)) {
++ /* If the controller isn't running, we don't have to wait for it */
++ if (unlikely(!HC_IS_RUNNING(ehci_to_hcd(ehci)->state))) {
+ /* if (unlikely (qh->reclaim != 0))
+ * this will recurse, probably not much
+ */
--- /dev/null
+From 508db8c954d55ed30f870d2c24d741ba6269d13c Mon Sep 17 00:00:00 2001
+From: Karsten Wiese <fzuuzf@googlemail.com>
+Date: Thu, 26 Feb 2009 01:47:48 +0100
+Subject: USB: EHCI: Fix isochronous URB leak
+
+From: Karsten Wiese <fzuuzf@googlemail.com>
+
+commit 508db8c954d55ed30f870d2c24d741ba6269d13c upstream.
+
+ehci-hcd uses usb_get_urb() and usb_put_urb() in an unbalanced way causing
+isochronous URB's kref.counts incrementing once per usb_submit_urb() call.
+The culprit is *usb being set to NULL when usb_put_urb() is called after URB
+is given back.
+Due to other fixes there is no need for ehci-hcd to deal with usb_get_urb()
+nor usb_put_urb() anymore, so patch removes their usages in ehci-hcd.
+Patch also makes ehci_to_hcd(ehci)->self.bandwidth_allocated adjust, if a
+stream finishes.
+
+Signed-off-by: Karsten Wiese <fzu@wemgehoertderstaat.de>
+Cc: David Brownell <david-b@pacbell.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ehci-sched.c | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+--- a/drivers/usb/host/ehci-sched.c
++++ b/drivers/usb/host/ehci-sched.c
+@@ -1536,7 +1536,7 @@ itd_link_urb (
+ struct ehci_itd, itd_list);
+ list_move_tail (&itd->itd_list, &stream->td_list);
+ itd->stream = iso_stream_get (stream);
+- itd->urb = usb_get_urb (urb);
++ itd->urb = urb;
+ itd_init (ehci, stream, itd);
+ }
+
+@@ -1645,7 +1645,7 @@ itd_complete (
+ (void) disable_periodic(ehci);
+ ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
+
+- if (unlikely (list_empty (&stream->td_list))) {
++ if (unlikely(list_is_singular(&stream->td_list))) {
+ ehci_to_hcd(ehci)->self.bandwidth_allocated
+ -= stream->bandwidth;
+ ehci_vdbg (ehci,
+@@ -1656,7 +1656,6 @@ itd_complete (
+ iso_stream_put (ehci, stream);
+
+ done:
+- usb_put_urb(urb);
+ itd->urb = NULL;
+ if (ehci->clock_frame != itd->frame || itd->index[7] != -1) {
+ /* OK to recycle this ITD now. */
+@@ -1949,7 +1948,7 @@ sitd_link_urb (
+ struct ehci_sitd, sitd_list);
+ list_move_tail (&sitd->sitd_list, &stream->td_list);
+ sitd->stream = iso_stream_get (stream);
+- sitd->urb = usb_get_urb (urb);
++ sitd->urb = urb;
+
+ sitd_patch(ehci, stream, sitd, sched, packet);
+ sitd_link (ehci, (next_uframe >> 3) % ehci->periodic_size,
+@@ -2034,7 +2033,7 @@ sitd_complete (
+ (void) disable_periodic(ehci);
+ ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
+
+- if (list_empty (&stream->td_list)) {
++ if (list_is_singular(&stream->td_list)) {
+ ehci_to_hcd(ehci)->self.bandwidth_allocated
+ -= stream->bandwidth;
+ ehci_vdbg (ehci,
+@@ -2045,7 +2044,6 @@ sitd_complete (
+ iso_stream_put (ehci, stream);
+ /* OK to recycle this SITD now that its completion callback ran. */
+ done:
+- usb_put_urb(urb);
+ sitd->urb = NULL;
+ sitd->stream = NULL;
+ list_move(&sitd->sitd_list, &stream->free_list);
--- /dev/null
+From 0cc6bfe901b946df125d8e37186d8e45f876457d Mon Sep 17 00:00:00 2001
+From: Dan Williams <dcbw@redhat.com>
+Date: Thu, 12 Mar 2009 06:53:00 -0400
+Subject: USB: Option: let cdc-acm handle Sony Ericsson F3507g / Dell 5530
+
+From: Dan Williams <dcbw@redhat.com>
+
+commit 0cc6bfe901b946df125d8e37186d8e45f876457d upstream.
+
+The generic cdc-acm driver is now the best one to handle Sony Ericsson
+F3507g-based devices (which the Dell 5530 is a rebrand of), now that all
+the pieces are in place (ie, cac477e8f1038c41b6f29d3161ce351462ef3df7).
+Removing the IDs from option allows cdc-acm to handle the device.
+
+Signed-off-by: Dan Williams <dcbw@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 6 ------
+ 1 file changed, 6 deletions(-)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -288,10 +288,6 @@ static int option_send_setup(struct tty
+ #define ZTE_PRODUCT_MF626 0x0031
+ #define ZTE_PRODUCT_CDMA_TECH 0xfffe
+
+-/* Ericsson products */
+-#define ERICSSON_VENDOR_ID 0x0bdb
+-#define ERICSSON_PRODUCT_F3507G 0x1900
+-
+ #define BENQ_VENDOR_ID 0x04a5
+ #define BENQ_PRODUCT_H10 0x4068
+
+@@ -434,7 +430,6 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_CINGULAR) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */
+ { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_L) }, /* Dell Wireless HSDPA 5520 */
+ { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5520_MINICARD_GENERIC_I) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */
+- { USB_DEVICE(DELL_VENDOR_ID, 0x8147) }, /* Dell Wireless 5530 Mobile Broadband (3G HSPA) Mini-Card */
+ { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_SPRINT) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
+ { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_TELUS) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
+ { USB_DEVICE(DELL_VENDOR_ID, DELL_PRODUCT_5730_MINICARD_VZW) }, /* Dell Wireless 5730 Mobile Broadband EVDO/HSPA Mini-Card */
+@@ -506,7 +501,6 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) },
+ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) },
+ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
+- { USB_DEVICE(ERICSSON_VENDOR_ID, ERICSSON_PRODUCT_F3507G) },
+ { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_H10) },
+ { USB_DEVICE(0x1da5, 0x4515) }, /* BenQ H20 */
+ { } /* Terminating entry */
--- /dev/null
+From 9ea19b82f3126da4e47d6b94563a3c2cd586f6e2 Mon Sep 17 00:00:00 2001
+From: Albert Pauw <albert.pauw@gmail.com>
+Date: Sun, 1 Mar 2009 09:37:52 +0100
+Subject: USB: option.c: add ZTE 622 modem device
+
+From: Albert Pauw <albert.pauw@gmail.com>
+
+commit 9ea19b82f3126da4e47d6b94563a3c2cd586f6e2 upstream.
+
+Please consider this small patch for the usb option-card driver.
+This patch adds the ZTE 622 usb modem device.
+
+Signed-off-by: Albert Pauw <albert.pauw@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -282,6 +282,7 @@ static int option_send_setup(struct tty
+
+ /* ZTE PRODUCTS */
+ #define ZTE_VENDOR_ID 0x19d2
++#define ZTE_PRODUCT_MF622 0x0001
+ #define ZTE_PRODUCT_MF628 0x0015
+ #define ZTE_PRODUCT_MF626 0x0031
+ #define ZTE_PRODUCT_CDMA_TECH 0xfffe
+@@ -499,6 +500,7 @@ static struct usb_device_id option_ids[]
+ { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */
+ { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
+ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
++ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622) },
+ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF626) },
+ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_MF628) },
+ { USB_DEVICE(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH) },
--- /dev/null
+From 7f82b6dd7015aabca2fd55fb690248f742cd67f3 Mon Sep 17 00:00:00 2001
+From: Axel Wachtler <axel.wachtler@atmel.com>
+Date: Thu, 5 Mar 2009 14:09:22 -0800
+Subject: USB: serial: add FTDI USB/Serial converter devices
+
+From: Axel Wachtler <axel.wachtler@atmel.com>
+
+commit 7f82b6dd7015aabca2fd55fb690248f742cd67f3 upstream.
+
+Add the following devices to the USB FTDI SIO device table:
+
+ Bus 001 Device 009: ID 03eb:2109 Atmel Corp.
+ http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4187
+
+ Bus 001 Device 008: ID 1cf1:0001
+ http://www.dresden-elektronik.de/shop/prod75.html
+
+ Bus 001 Device 007: ID 1c1f:0004
+ http://www.dresden-elektronik.de/shop/prod64.html
+
+Signed-off-by: Axel Wachtler <axel.wachtler@atmel.com>
+Signed-off-by: Robert Richter <robert.richter@amd.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c | 3 +++
+ drivers/usb/serial/ftdi_sio.h | 13 +++++++++++++
+ 2 files changed, 16 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -657,6 +657,9 @@ static struct usb_device_id id_table_com
+ { USB_DEVICE(PAPOUCH_VID, PAPOUCH_QUIDO4x4_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DGQG_PID) },
+ { USB_DEVICE(FTDI_VID, FTDI_DOMINTELL_DUSB_PID) },
++ { USB_DEVICE(ATMEL_VID, STK541_PID) },
++ { USB_DEVICE(DE_VID, STB_PID) },
++ { USB_DEVICE(DE_VID, WHT_PID) },
+ { }, /* Optional parameter entry */
+ { } /* Terminating entry */
+ };
+--- a/drivers/usb/serial/ftdi_sio.h
++++ b/drivers/usb/serial/ftdi_sio.h
+@@ -870,6 +870,19 @@
+ #define RATOC_PRODUCT_ID_USB60F 0xb020
+
+ /*
++ * Atmel STK541
++ */
++#define ATMEL_VID 0x03eb /* Vendor ID */
++#define STK541_PID 0x2109 /* Zigbee Controller */
++
++/*
++ * Dresden Elektronic Sensor Terminal Board
++ */
++#define DE_VID 0x1cf1 /* Vendor ID */
++#define STB_PID 0x0001 /* Sensor Terminal Board */
++#define WHT_PID 0x0004 /* Wireless Handheld Terminal */
++
++/*
+ * BmRequestType: 1100 0000b
+ * bRequest: FTDI_E2_READ
+ * wValue: 0
--- /dev/null
+From b0d659002168146ec6b03d1ef062d8dcf05ff510 Mon Sep 17 00:00:00 2001
+From: Michael Hennerich <michael.hennerich@analog.com>
+Date: Fri, 6 Mar 2009 14:07:43 -0800
+Subject: USB: serial: ftdi: enable UART detection on gnICE JTAG adaptors blacklist interface0
+
+From: Michael Hennerich <michael.hennerich@analog.com>
+
+commit b0d659002168146ec6b03d1ef062d8dcf05ff510 upstream.
+
+Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
+Signed-off-by: Bryan Wu <cooloney@kernel.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/ftdi_sio.c | 2 ++
+ drivers/usb/serial/ftdi_sio.h | 7 +++++++
+ 2 files changed, 9 insertions(+)
+
+--- a/drivers/usb/serial/ftdi_sio.c
++++ b/drivers/usb/serial/ftdi_sio.c
+@@ -660,6 +660,8 @@ static struct usb_device_id id_table_com
+ { USB_DEVICE(ATMEL_VID, STK541_PID) },
+ { USB_DEVICE(DE_VID, STB_PID) },
+ { USB_DEVICE(DE_VID, WHT_PID) },
++ { USB_DEVICE(ADI_VID, ADI_GNICE_PID),
++ .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
+ { }, /* Optional parameter entry */
+ { } /* Terminating entry */
+ };
+--- a/drivers/usb/serial/ftdi_sio.h
++++ b/drivers/usb/serial/ftdi_sio.h
+@@ -883,6 +883,13 @@
+ #define WHT_PID 0x0004 /* Wireless Handheld Terminal */
+
+ /*
++ * Blackfin gnICE JTAG
++ * http://docs.blackfin.uclinux.org/doku.php?id=hw:jtag:gnice
++ */
++#define ADI_VID 0x0456
++#define ADI_GNICE_PID 0xF000
++
++/*
+ * BmRequestType: 1100 0000b
+ * bRequest: FTDI_E2_READ
+ * wValue: 0
--- /dev/null
+From c6535668798b0644e1af5934c2aec0e912280449 Mon Sep 17 00:00:00 2001
+From: Robert M. Kenney <rmk@unh.edu>
+Date: Thu, 26 Feb 2009 14:58:39 -0500
+Subject: USB: serial: new cp2101 device id
+
+From: Robert M. Kenney <rmk@unh.edu>
+
+commit c6535668798b0644e1af5934c2aec0e912280449 upstream.
+
+From: Robert M. Kenney <rmk@unh.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/cp2101.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/serial/cp2101.c
++++ b/drivers/usb/serial/cp2101.c
+@@ -77,6 +77,7 @@ static struct usb_device_id id_table []
+ { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */
+ { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */
+ { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
++ { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */
+ { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */
+ { USB_DEVICE(0x10C4, 0x81AC) }, /* MSD Dash Hawk */
+ { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */
--- /dev/null
+From 8a0845c51b2e300f5204a323b874f7f58ea0eff7 Mon Sep 17 00:00:00 2001
+From: Thomas Bartosik <tbartdev@gmx-topmail.de>
+Date: Mon, 16 Mar 2009 16:04:38 +0100
+Subject: USB: storage: Unusual USB device Prolific 2507 variation added
+
+From: Thomas Bartosik <tbartdev@gmx-topmail.de>
+
+commit 8a0845c51b2e300f5204a323b874f7f58ea0eff7 upstream.
+
+The "c-enter" USB to Toshiba 1.8" IDE enclosure needs special treatment
+to work flawlessly. This patch is absolutely trivial, as the integrated
+USB-IDE bridge is already identified to be an "unusual" device, only the
+bcdDevice is different (lower) to the bcdDeviceMin already included in
+the kernel.
+It is a Prolific 2507 bridge.
+
+T: Bus=02 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 4 Spd=480 MxCh= 0
+D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
+P: Vendor=067b ProdID=2507 Rev= 0.01
+S: Manufacturer=Prolific Technology Inc.
+S: Product=ATAPI-6 Bridge Controller
+S: SerialNumber=00000272
+C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
+I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
+E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+
+
+Signed-off-by: Thomas Bartosik <tbartdev@gmx-topmail.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -990,7 +990,9 @@ UNUSUAL_DEV( 0x066f, 0x8000, 0x0001, 0x0
+ US_FL_FIX_CAPACITY ),
+
+ /* Reported by Richard -=[]=- <micro_flyer@hotmail.com> */
+-UNUSUAL_DEV( 0x067b, 0x2507, 0x0100, 0x0100,
++/* Change to bcdDeviceMin (0x0100 to 0x0001) reported by
++ * Thomas Bartosik <tbartdev@gmx-topmail.de> */
++UNUSUAL_DEV( 0x067b, 0x2507, 0x0001, 0x0100,
+ "Prolific Technology Inc.",
+ "Mass Storage Device",
+ US_SC_DEVICE, US_PR_DEVICE, NULL,
--- /dev/null
+From c497e715f93d148d751c055401568684eea0bf6b Mon Sep 17 00:00:00 2001
+From: Jan Dumon <j.dumon@option.com>
+Date: Tue, 10 Mar 2009 17:29:47 +0100
+Subject: USB: unusual_devs: Add support for GI 0431 SD-Card interface
+
+From: Jan Dumon <j.dumon@option.com>
+
+commit c497e715f93d148d751c055401568684eea0bf6b upstream.
+
+Enable the SD-Card interface on the GI 0431 HSUPA stick from Option.
+
+The unusual_devs.h entry is necessary because the device descriptor is
+vendor-specific. That prevents usb-storage from binding to it as an
+interface driver.
+
+T: Bus=07 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 15 Spd=480 MxCh= 0
+D: Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs= 1
+P: Vendor=0af0 ProdID=7501 Rev= 0.00
+S: Manufacturer=Option N.V.
+S: Product=Globetrotter HSUPA Modem
+C:* #Ifs=11 Cfg#= 1 Atr=a0 MxPwr=500mA
+I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso
+E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso
+E: Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso
+E: Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso
+E: Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
+E: Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#= 9 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=hso
+E: Ad=8a(I) Atr=03(Int.) MxPS= 64 Ivl=2ms
+E: Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=0a(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
+I:* If#=10 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
+E: Ad=0b(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+E: Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
+
+Signed-off-by: Jan Dumon <j.dumon@option.com>
+Signed-off-by: Phil Dibowitz <phil@ipom.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -1407,6 +1407,16 @@ UNUSUAL_DEV( 0x0af0, 0x7401, 0x0000, 0x0
+ US_SC_DEVICE, US_PR_DEVICE, NULL,
+ 0 ),
+
++/* Reported by Jan Dumon <j.dumon@option.com>
++ * This device (wrongly) has a vendor-specific device descriptor.
++ * The entry is needed so usb-storage can bind to it's mass-storage
++ * interface as an interface driver */
++UNUSUAL_DEV( 0x0af0, 0x7501, 0x0000, 0x0000,
++ "Option",
++ "GI 0431 SD-Card",
++ US_SC_DEVICE, US_PR_DEVICE, NULL,
++ 0 ),
++
+ #ifdef CONFIG_USB_STORAGE_ISD200
+ UNUSUAL_DEV( 0x0bf6, 0xa001, 0x0100, 0x0110,
+ "ATI",
--- /dev/null
+From 716a9c8561d9c50ec454f4fbd39a265892feda2c Mon Sep 17 00:00:00 2001
+From: Moritz Muehlenhoff <jmm@debian.org>
+Date: Sat, 14 Mar 2009 00:43:21 +0100
+Subject: USB: Updated unusual-devs entry for USB mass storage on Nokia 6233
+
+From: Moritz Muehlenhoff <jmm@debian.org>
+
+commit 716a9c8561d9c50ec454f4fbd39a265892feda2c upstream.
+
+Current firmware revision 5.60 still behaves the same,
+so update the quirk up a (non-existing) 99.99 revision.
+
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=493415
+
+Signed-off-by: Moritz Muehlenhoff <jmm@debian.org>
+Tested-by: Jan Heitkoetter <devnull@heitkoetter.net>
+Signed-off-by: Phil Dibowitz <phil@ipom.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/unusual_devs.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -219,7 +219,7 @@ UNUSUAL_DEV( 0x0421, 0x047c, 0x0370, 0x
+ US_FL_MAX_SECTORS_64 ),
+
+ /* Reported by Manuel Osdoba <manuel.osdoba@tu-ilmenau.de> */
+-UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x0452,
++UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x9999,
+ "Nokia",
+ "Nokia 6233",
+ US_SC_DEVICE, US_PR_DEVICE, NULL,
--- /dev/null
+From 6ff10464096540e14d7575a72c50d0316d003714 Mon Sep 17 00:00:00 2001
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Mon, 9 Mar 2009 13:44:02 -0400
+Subject: USB: usbfs: keep async URBs until the device file is closed
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+commit 6ff10464096540e14d7575a72c50d0316d003714 upstream.
+
+The usbfs driver manages a list of completed asynchronous URBs. But
+it is too eager to free the entries on this list: destroy_async() gets
+called whenever an interface is unbound or a device is removed, and it
+deallocates the outstanding struct async entries for all URBs on that
+interface or device. This is wrong; the user program should be able
+to reap an URB any time after it has completed, regardless of whether
+or not the interface is still bound or the device is still present.
+
+This patch (as1222) moves the code for deallocating the completed list
+entries from destroy_async() to usbdev_release(). The outstanding
+entries won't be freed until the user program has closed the device
+file, thereby eliminating any possibility that the remaining URBs
+might still be reaped.
+
+This fixes a bug in which a program can hang in the USBDEVFS_REAPURB
+ioctl when the device is unplugged.
+
+Reported-and-tested-by: Martin Poupe <martin.poupe@upek.com>
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/core/devio.c | 12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+--- a/drivers/usb/core/devio.c
++++ b/drivers/usb/core/devio.c
+@@ -359,11 +359,6 @@ static void destroy_async(struct dev_sta
+ spin_lock_irqsave(&ps->lock, flags);
+ }
+ spin_unlock_irqrestore(&ps->lock, flags);
+- as = async_getcompleted(ps);
+- while (as) {
+- free_async(as);
+- as = async_getcompleted(ps);
+- }
+ }
+
+ static void destroy_async_on_interface(struct dev_state *ps,
+@@ -639,6 +634,7 @@ static int usbdev_release(struct inode *
+ struct dev_state *ps = file->private_data;
+ struct usb_device *dev = ps->dev;
+ unsigned int ifnum;
++ struct async *as;
+
+ usb_lock_device(dev);
+
+@@ -657,6 +653,12 @@ static int usbdev_release(struct inode *
+ usb_unlock_device(dev);
+ usb_put_dev(dev);
+ put_pid(ps->disc_pid);
++
++ as = async_getcompleted(ps);
++ while (as) {
++ free_async(as);
++ as = async_getcompleted(ps);
++ }
+ kfree(ps);
+ return 0;
+ }