From 1e52ebbec797772e365e31424b9ea3217edf72c2 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 20 Mar 2009 14:22:48 -0700 Subject: [PATCH] more .28 patches --- ...jects-to-get-bound-while-vt-switched.patch | 71 ++++++++++++++++ ...we-take-a-signal-in-evict_everything.patch | 31 +++++++ ...n-t-enable-vblanks-on-disabled-pipes.patch | 37 +++++++++ ...when-taking-signal-during-object_pin.patch | 43 ++++++++++ ...rrectly-across-irq-install-uninstall.patch | 72 ++++++++++++++++ ...-remove-extra-semicolon-in-fsl_soc.c.patch | 36 ++++++++ queue-2.6.28/series | 21 +++++ ...d-for-option-gtm380-to-option-driver.patch | 37 +++++++++ ...d-for-new-cdma-u727-to-option-driver.patch | 38 +++++++++ ...links-when-the-root-hub-is-suspended.patch | 42 ++++++++++ .../usb-ehci-fix-isochronous-urb-leak.patch | 80 ++++++++++++++++++ ...andle-sony-ericsson-f3507g-dell-5530.patch | 50 +++++++++++ ...sb-option.c-add-zte-622-modem-device.patch | 37 +++++++++ ...dd-ftdi-usb-serial-converter-devices.patch | 64 ++++++++++++++ ...e-jtag-adaptors-blacklist-interface0.patch | 46 ++++++++++ .../usb-serial-new-cp2101-device-id.patch | 26 ++++++ ...device-prolific-2507-variation-added.patch | 48 +++++++++++ ...upport-for-gi-0431-sd-card-interface.patch | 83 +++++++++++++++++++ ...y-for-usb-mass-storage-on-nokia-6233.patch | 34 ++++++++ ...urbs-until-the-device-file-is-closed.patch | 69 +++++++++++++++ .../usb-usbtmc-add-protocol-1-support.patch | 34 ++++++++ .../usb-usbtmc-fix-stupid-bug-in-open.patch | 38 +++++++++ 22 files changed, 1037 insertions(+) create mode 100644 queue-2.6.28/drm-i915-don-t-allow-objects-to-get-bound-while-vt-switched.patch create mode 100644 queue-2.6.28/drm-i915-don-t-double-unpin-buffers-if-we-take-a-signal-in-evict_everything.patch create mode 100644 queue-2.6.28/drm-i915-don-t-enable-vblanks-on-disabled-pipes.patch create mode 100644 queue-2.6.28/drm-i915-don-t-print-to-dmesg-when-taking-signal-during-object_pin.patch create mode 100644 queue-2.6.28/drm-i915-set-vblank-enabled-flag-correctly-across-irq-install-uninstall.patch create mode 100644 queue-2.6.28/powerpc-remove-extra-semicolon-in-fsl_soc.c.patch create mode 100644 queue-2.6.28/usb-add-device-id-for-option-gtm380-to-option-driver.patch create mode 100644 queue-2.6.28/usb-add-vendor-product-id-for-new-cdma-u727-to-option-driver.patch create mode 100644 queue-2.6.28/usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch create mode 100644 queue-2.6.28/usb-ehci-fix-isochronous-urb-leak.patch create mode 100644 queue-2.6.28/usb-option-let-cdc-acm-handle-sony-ericsson-f3507g-dell-5530.patch create mode 100644 queue-2.6.28/usb-option.c-add-zte-622-modem-device.patch create mode 100644 queue-2.6.28/usb-serial-add-ftdi-usb-serial-converter-devices.patch create mode 100644 queue-2.6.28/usb-serial-ftdi-enable-uart-detection-on-gnice-jtag-adaptors-blacklist-interface0.patch create mode 100644 queue-2.6.28/usb-serial-new-cp2101-device-id.patch create mode 100644 queue-2.6.28/usb-storage-unusual-usb-device-prolific-2507-variation-added.patch create mode 100644 queue-2.6.28/usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.patch create mode 100644 queue-2.6.28/usb-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch create mode 100644 queue-2.6.28/usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch create mode 100644 queue-2.6.28/usb-usbtmc-add-protocol-1-support.patch create mode 100644 queue-2.6.28/usb-usbtmc-fix-stupid-bug-in-open.patch diff --git a/queue-2.6.28/drm-i915-don-t-allow-objects-to-get-bound-while-vt-switched.patch b/queue-2.6.28/drm-i915-don-t-allow-objects-to-get-bound-while-vt-switched.patch new file mode 100644 index 00000000000..861e7207668 --- /dev/null +++ b/queue-2.6.28/drm-i915-don-t-allow-objects-to-get-bound-while-vt-switched.patch @@ -0,0 +1,71 @@ +From 9bb2d6f94aeb9a185d69aedbd19421b6da4e3309 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Tue, 23 Dec 2008 18:42:32 -0800 +Subject: drm/i915: Don't allow objects to get bound while VT switched. + +From: Eric Anholt + +commit 9bb2d6f94aeb9a185d69aedbd19421b6da4e3309 upstream. + +This avoids a BUG_ON in the enter_vt path due to objects being in the GTT +when we shouldn't have ever let them be (as we're not supposed to touch the +device during that time). + +This was triggered by a change in the 2D driver to use the GTT mapping of +objects after pinning them to improve software fallback performance. + +Signed-off-by: Eric Anholt +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_gem.c | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +--- a/drivers/gpu/drm/i915/i915_gem.c ++++ b/drivers/gpu/drm/i915/i915_gem.c +@@ -1161,6 +1161,8 @@ i915_gem_object_bind_to_gtt(struct drm_g + struct drm_mm_node *free_space; + int page_count, ret; + ++ if (dev_priv->mm.suspended) ++ return -EBUSY; + if (alignment == 0) + alignment = PAGE_SIZE; + if (alignment & (PAGE_SIZE - 1)) { +@@ -2180,7 +2182,7 @@ i915_gem_object_pin(struct drm_gem_objec + if (obj_priv->gtt_space == NULL) { + ret = i915_gem_object_bind_to_gtt(obj, alignment); + if (ret != 0) { +- if (ret != -ERESTARTSYS) ++ if (ret != -EBUSY && ret != -ERESTARTSYS) + DRM_ERROR("Failure to bind: %d", ret); + return ret; + } +@@ -2703,20 +2705,21 @@ i915_gem_entervt_ioctl(struct drm_device + dev_priv->mm.wedged = 0; + } + +- ret = i915_gem_init_ringbuffer(dev); +- if (ret != 0) +- return ret; +- + dev_priv->mm.gtt_mapping = io_mapping_create_wc(dev->agp->base, + dev->agp->agp_info.aper_size + * 1024 * 1024); + + mutex_lock(&dev->struct_mutex); ++ dev_priv->mm.suspended = 0; ++ ++ ret = i915_gem_init_ringbuffer(dev); ++ if (ret != 0) ++ return ret; ++ + BUG_ON(!list_empty(&dev_priv->mm.active_list)); + BUG_ON(!list_empty(&dev_priv->mm.flushing_list)); + BUG_ON(!list_empty(&dev_priv->mm.inactive_list)); + BUG_ON(!list_empty(&dev_priv->mm.request_list)); +- dev_priv->mm.suspended = 0; + mutex_unlock(&dev->struct_mutex); + + drm_irq_install(dev); diff --git a/queue-2.6.28/drm-i915-don-t-double-unpin-buffers-if-we-take-a-signal-in-evict_everything.patch b/queue-2.6.28/drm-i915-don-t-double-unpin-buffers-if-we-take-a-signal-in-evict_everything.patch new file mode 100644 index 00000000000..93a0fae6a54 --- /dev/null +++ b/queue-2.6.28/drm-i915-don-t-double-unpin-buffers-if-we-take-a-signal-in-evict_everything.patch @@ -0,0 +1,31 @@ +From b117763627ef4d24086801dd5f74c9eb2f487790 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 10 Dec 2008 10:09:41 -0800 +Subject: drm/i915: Don't double-unpin buffers if we take a signal in evict_everything(). + +From: Eric Anholt + +commit b117763627ef4d24086801dd5f74c9eb2f487790 upstream. + +We haven't seen this in practice, but it was visible when looking at a bug +report from when i915_gem_evict_everything() was broken and would always +return error. + +Signed-off-by: Eric Anholt +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_gem.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/gpu/drm/i915/i915_gem.c ++++ b/drivers/gpu/drm/i915/i915_gem.c +@@ -2036,6 +2036,7 @@ i915_gem_execbuffer(struct drm_device *d + /* unpin all of our buffers */ + for (i = 0; i < pinned; i++) + i915_gem_object_unpin(object_list[i]); ++ pinned = 0; + + /* evict everyone we can from the aperture */ + ret = i915_gem_evict_everything(dev); diff --git a/queue-2.6.28/drm-i915-don-t-enable-vblanks-on-disabled-pipes.patch b/queue-2.6.28/drm-i915-don-t-enable-vblanks-on-disabled-pipes.patch new file mode 100644 index 00000000000..2a0863a0519 --- /dev/null +++ b/queue-2.6.28/drm-i915-don-t-enable-vblanks-on-disabled-pipes.patch @@ -0,0 +1,37 @@ +From 71e0ffa599f54058d9b8724b4b14d0486751681d Mon Sep 17 00:00:00 2001 +From: Jesse Barnes +Date: Thu, 8 Jan 2009 10:42:15 -0800 +Subject: drm/i915: don't enable vblanks on disabled pipes + +From: Jesse Barnes + +commit 71e0ffa599f54058d9b8724b4b14d0486751681d upstream. + +In some cases userland may be confused and try to wait on vblank events from +pipes that aren't actually enabled. We shouldn't allow this, so return +-EINVAL if the pipe isn't on. + +Signed-off-by: Jesse Barnes +Signed-off-by: Eric Anholt +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_irq.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/gpu/drm/i915/i915_irq.c ++++ b/drivers/gpu/drm/i915/i915_irq.c +@@ -400,6 +400,12 @@ int i915_enable_vblank(struct drm_device + { + drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; + unsigned long irqflags; ++ int pipeconf_reg = (pipe == 0) ? PIPEACONF : PIPEBCONF; ++ u32 pipeconf; ++ ++ pipeconf = I915_READ(pipeconf_reg); ++ if (!(pipeconf & PIPEACONF_ENABLE)) ++ return -EINVAL; + + spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); + if (IS_I965G(dev)) diff --git a/queue-2.6.28/drm-i915-don-t-print-to-dmesg-when-taking-signal-during-object_pin.patch b/queue-2.6.28/drm-i915-don-t-print-to-dmesg-when-taking-signal-during-object_pin.patch new file mode 100644 index 00000000000..dde30a8776e --- /dev/null +++ b/queue-2.6.28/drm-i915-don-t-print-to-dmesg-when-taking-signal-during-object_pin.patch @@ -0,0 +1,43 @@ +From f1acec933848219c402c165686677b1c307407f8 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Fri, 19 Dec 2008 14:47:48 -0800 +Subject: drm/i915: Don't print to dmesg when taking signal during object_pin. + +From: Eric Anholt + +commit f1acec933848219c402c165686677b1c307407f8 upstream. + +This showed up in logs where people had a hung chip, so pinning was blocked +on the chip unpinning other buffers, and the X Server took its scheduler +signal during that time. + +Signed-off-by: Eric Anholt +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_gem.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/i915/i915_gem.c ++++ b/drivers/gpu/drm/i915/i915_gem.c +@@ -2029,7 +2029,8 @@ i915_gem_execbuffer(struct drm_device *d + + /* error other than GTT full, or we've already tried again */ + if (ret != -ENOMEM || pin_tries >= 1) { +- DRM_ERROR("Failed to pin buffers %d\n", ret); ++ if (ret != -ERESTARTSYS) ++ DRM_ERROR("Failed to pin buffers %d\n", ret); + goto err; + } + +@@ -2179,7 +2180,8 @@ i915_gem_object_pin(struct drm_gem_objec + if (obj_priv->gtt_space == NULL) { + ret = i915_gem_object_bind_to_gtt(obj, alignment); + if (ret != 0) { +- DRM_ERROR("Failure to bind: %d", ret); ++ if (ret != -ERESTARTSYS) ++ DRM_ERROR("Failure to bind: %d", ret); + return ret; + } + } diff --git a/queue-2.6.28/drm-i915-set-vblank-enabled-flag-correctly-across-irq-install-uninstall.patch b/queue-2.6.28/drm-i915-set-vblank-enabled-flag-correctly-across-irq-install-uninstall.patch new file mode 100644 index 00000000000..b24af2c603f --- /dev/null +++ b/queue-2.6.28/drm-i915-set-vblank-enabled-flag-correctly-across-irq-install-uninstall.patch @@ -0,0 +1,72 @@ +From dc1336ff4fe08ae7cfe8301bfd7f0b2cfd31d20a Mon Sep 17 00:00:00 2001 +From: Jesse Barnes +Date: Tue, 6 Jan 2009 10:21:24 -0800 +Subject: drm/i915: set vblank enabled flag correctly across IRQ install/uninstall + +From: Jesse Barnes + +commit dc1336ff4fe08ae7cfe8301bfd7f0b2cfd31d20a upstream. + +In the absence of kernel mode setting, many drivers disable IRQs across VT +switch. The core DRM vblank code is missing a check for this case however; +even after IRQ disable, the vblank code will still have the vblank_enabled +flag set, so unless we track the fact that they're disabled at IRQ uninstall +time, when we VT switch back in we won't actually re-enable them, which means +any apps waiting on vblank before the switch will hang. + +This patch does that and also adds a sanity check to the wait condition to +look for the irq_enabled flag in general, as well as adding a wakeup to the +IRQ uninstall path. + +Fixes fdo bug #18879 with compiz hangs at VT switch. + +Signed-off-by: Jesse Barnes +Signed-off-by: Eric Anholt +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/drm_irq.c | 18 +++++++++++++++--- + 1 file changed, 15 insertions(+), 3 deletions(-) + +--- a/drivers/gpu/drm/drm_irq.c ++++ b/drivers/gpu/drm/drm_irq.c +@@ -259,7 +259,8 @@ EXPORT_SYMBOL(drm_irq_install); + */ + int drm_irq_uninstall(struct drm_device * dev) + { +- int irq_enabled; ++ unsigned long irqflags; ++ int irq_enabled, i; + + if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ)) + return -EINVAL; +@@ -269,6 +270,16 @@ int drm_irq_uninstall(struct drm_device + dev->irq_enabled = 0; + mutex_unlock(&dev->struct_mutex); + ++ /* ++ * Wake up any waiters so they don't hang. ++ */ ++ spin_lock_irqsave(&dev->vbl_lock, irqflags); ++ for (i = 0; i < dev->num_crtcs; i++) { ++ DRM_WAKEUP(&dev->vbl_queue[i]); ++ dev->vblank_enabled[i] = 0; ++ } ++ spin_unlock_irqrestore(&dev->vbl_lock, irqflags); ++ + if (!irq_enabled) + return -EINVAL; + +@@ -617,8 +628,9 @@ int drm_wait_vblank(struct drm_device *d + DRM_DEBUG("waiting on vblank count %d, crtc %d\n", + vblwait->request.sequence, crtc); + DRM_WAIT_ON(ret, dev->vbl_queue[crtc], 3 * DRM_HZ, +- ((drm_vblank_count(dev, crtc) +- - vblwait->request.sequence) <= (1 << 23))); ++ (((drm_vblank_count(dev, crtc) - ++ vblwait->request.sequence) <= (1 << 23)) || ++ !dev->irq_enabled)); + + if (ret != -EINTR) { + struct timeval now; diff --git a/queue-2.6.28/powerpc-remove-extra-semicolon-in-fsl_soc.c.patch b/queue-2.6.28/powerpc-remove-extra-semicolon-in-fsl_soc.c.patch new file mode 100644 index 00000000000..e8179d57de4 --- /dev/null +++ b/queue-2.6.28/powerpc-remove-extra-semicolon-in-fsl_soc.c.patch @@ -0,0 +1,36 @@ +From jdaniel@computer.org Fri Mar 20 14:18:34 2009 +From: Johns Daniel +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 + +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 +Acked-by: Grant Likely +Signed-off-by: Greg Kroah-Hartman + + +--- + 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 +@@ -257,7 +257,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; diff --git a/queue-2.6.28/series b/queue-2.6.28/series index 81151e74816..c5b501469a0 100644 --- a/queue-2.6.28/series +++ b/queue-2.6.28/series @@ -19,3 +19,24 @@ v4l-dvb-cx23885-fix-oops-for-mixed-install-of-analog-and-digital-only-cards.patc thinkpad-acpi-fix-module-autoloading-for-older-models.patch add-fwrapv-to-gcc-cflags.patch move-cc-option-to-below-arch-specific-setup.patch +usb-storage-unusual-usb-device-prolific-2507-variation-added.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-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch +usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.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-usbtmc-fix-stupid-bug-in-open.patch +usb-usbtmc-add-protocol-1-support.patch +usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch +usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch +usb-ehci-fix-isochronous-urb-leak.patch +powerpc-remove-extra-semicolon-in-fsl_soc.c.patch +drm-i915-set-vblank-enabled-flag-correctly-across-irq-install-uninstall.patch +drm-i915-don-t-enable-vblanks-on-disabled-pipes.patch +drm-i915-don-t-double-unpin-buffers-if-we-take-a-signal-in-evict_everything.patch +drm-i915-don-t-print-to-dmesg-when-taking-signal-during-object_pin.patch +drm-i915-don-t-allow-objects-to-get-bound-while-vt-switched.patch diff --git a/queue-2.6.28/usb-add-device-id-for-option-gtm380-to-option-driver.patch b/queue-2.6.28/usb-add-device-id-for-option-gtm380-to-option-driver.patch new file mode 100644 index 00000000000..61194bf59da --- /dev/null +++ b/queue-2.6.28/usb-add-device-id-for-option-gtm380-to-option-driver.patch @@ -0,0 +1,37 @@ +From e7f2f0d77a7b483a26054f29ba8393831b25a8a4 Mon Sep 17 00:00:00 2001 +From: Achilleas Kotsis +Date: Mon, 16 Mar 2009 16:35:02 +0200 +Subject: USB: Add device id for Option GTM380 to option driver + +From: Achilleas Kotsis + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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) }, diff --git a/queue-2.6.28/usb-add-vendor-product-id-for-new-cdma-u727-to-option-driver.patch b/queue-2.6.28/usb-add-vendor-product-id-for-new-cdma-u727-to-option-driver.patch new file mode 100644 index 00000000000..6004e9ce979 --- /dev/null +++ b/queue-2.6.28/usb-add-vendor-product-id-for-new-cdma-u727-to-option-driver.patch @@ -0,0 +1,38 @@ +From 56a21827439a4d715b510bfaf488534e6f4ad2f8 Mon Sep 17 00:00:00 2001 +From: Dirk Hohndel +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 + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 */ diff --git a/queue-2.6.28/usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch b/queue-2.6.28/usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch new file mode 100644 index 00000000000..f3d8f7526d6 --- /dev/null +++ b/queue-2.6.28/usb-ehci-expedite-unlinks-when-the-root-hub-is-suspended.patch @@ -0,0 +1,42 @@ +From 391016f6e2fe3b9979b4c6880a76e5e434d6947c Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Mon, 16 Mar 2009 14:21:56 -0400 +Subject: USB: EHCI: expedite unlinks when the root hub is suspended + +From: Alan Stern + +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 +Reported-by: Brandon Philips +Tested-by: Brandon Philips +Acked-by: David Brownell +Signed-off-by: Greg Kroah-Hartman + +--- + 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 + */ diff --git a/queue-2.6.28/usb-ehci-fix-isochronous-urb-leak.patch b/queue-2.6.28/usb-ehci-fix-isochronous-urb-leak.patch new file mode 100644 index 00000000000..17a993f489d --- /dev/null +++ b/queue-2.6.28/usb-ehci-fix-isochronous-urb-leak.patch @@ -0,0 +1,80 @@ +From 508db8c954d55ed30f870d2c24d741ba6269d13c Mon Sep 17 00:00:00 2001 +From: Karsten Wiese +Date: Thu, 26 Feb 2009 01:47:48 +0100 +Subject: USB: EHCI: Fix isochronous URB leak + +From: Karsten Wiese + +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 +Cc: David Brownell +Signed-off-by: Greg Kroah-Hartman + +--- + 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); diff --git a/queue-2.6.28/usb-option-let-cdc-acm-handle-sony-ericsson-f3507g-dell-5530.patch b/queue-2.6.28/usb-option-let-cdc-acm-handle-sony-ericsson-f3507g-dell-5530.patch new file mode 100644 index 00000000000..3a283aa829b --- /dev/null +++ b/queue-2.6.28/usb-option-let-cdc-acm-handle-sony-ericsson-f3507g-dell-5530.patch @@ -0,0 +1,50 @@ +From 0cc6bfe901b946df125d8e37186d8e45f876457d Mon Sep 17 00:00:00 2001 +From: Dan Williams +Date: Thu, 12 Mar 2009 06:53:00 -0400 +Subject: USB: Option: let cdc-acm handle Sony Ericsson F3507g / Dell 5530 + +From: Dan Williams + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 */ diff --git a/queue-2.6.28/usb-option.c-add-zte-622-modem-device.patch b/queue-2.6.28/usb-option.c-add-zte-622-modem-device.patch new file mode 100644 index 00000000000..1a1212a0619 --- /dev/null +++ b/queue-2.6.28/usb-option.c-add-zte-622-modem-device.patch @@ -0,0 +1,37 @@ +From 9ea19b82f3126da4e47d6b94563a3c2cd586f6e2 Mon Sep 17 00:00:00 2001 +From: Albert Pauw +Date: Sun, 1 Mar 2009 09:37:52 +0100 +Subject: USB: option.c: add ZTE 622 modem device + +From: Albert Pauw + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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) }, diff --git a/queue-2.6.28/usb-serial-add-ftdi-usb-serial-converter-devices.patch b/queue-2.6.28/usb-serial-add-ftdi-usb-serial-converter-devices.patch new file mode 100644 index 00000000000..1d80ef6da4b --- /dev/null +++ b/queue-2.6.28/usb-serial-add-ftdi-usb-serial-converter-devices.patch @@ -0,0 +1,64 @@ +From 7f82b6dd7015aabca2fd55fb690248f742cd67f3 Mon Sep 17 00:00:00 2001 +From: Axel Wachtler +Date: Thu, 5 Mar 2009 14:09:22 -0800 +Subject: USB: serial: add FTDI USB/Serial converter devices + +From: Axel Wachtler + +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 +Signed-off-by: Robert Richter +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -660,6 +660,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 +@@ -881,6 +881,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 diff --git a/queue-2.6.28/usb-serial-ftdi-enable-uart-detection-on-gnice-jtag-adaptors-blacklist-interface0.patch b/queue-2.6.28/usb-serial-ftdi-enable-uart-detection-on-gnice-jtag-adaptors-blacklist-interface0.patch new file mode 100644 index 00000000000..ce812b1bcfe --- /dev/null +++ b/queue-2.6.28/usb-serial-ftdi-enable-uart-detection-on-gnice-jtag-adaptors-blacklist-interface0.patch @@ -0,0 +1,46 @@ +From b0d659002168146ec6b03d1ef062d8dcf05ff510 Mon Sep 17 00:00:00 2001 +From: Michael Hennerich +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 + +commit b0d659002168146ec6b03d1ef062d8dcf05ff510 upstream. + +Signed-off-by: Michael Hennerich +Signed-off-by: Bryan Wu +Signed-off-by: Andrew Morton +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -663,6 +663,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 +@@ -894,6 +894,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 diff --git a/queue-2.6.28/usb-serial-new-cp2101-device-id.patch b/queue-2.6.28/usb-serial-new-cp2101-device-id.patch new file mode 100644 index 00000000000..717277afbd3 --- /dev/null +++ b/queue-2.6.28/usb-serial-new-cp2101-device-id.patch @@ -0,0 +1,26 @@ +From c6535668798b0644e1af5934c2aec0e912280449 Mon Sep 17 00:00:00 2001 +From: Robert M. Kenney +Date: Thu, 26 Feb 2009 14:58:39 -0500 +Subject: USB: serial: new cp2101 device id + +From: Robert M. Kenney + +commit c6535668798b0644e1af5934c2aec0e912280449 upstream. + +From: Robert M. Kenney +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/cp2101.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/serial/cp2101.c ++++ b/drivers/usb/serial/cp2101.c +@@ -79,6 +79,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 */ diff --git a/queue-2.6.28/usb-storage-unusual-usb-device-prolific-2507-variation-added.patch b/queue-2.6.28/usb-storage-unusual-usb-device-prolific-2507-variation-added.patch new file mode 100644 index 00000000000..77c4c44cdf8 --- /dev/null +++ b/queue-2.6.28/usb-storage-unusual-usb-device-prolific-2507-variation-added.patch @@ -0,0 +1,48 @@ +From 8a0845c51b2e300f5204a323b874f7f58ea0eff7 Mon Sep 17 00:00:00 2001 +From: Thomas Bartosik +Date: Mon, 16 Mar 2009 16:04:38 +0100 +Subject: USB: storage: Unusual USB device Prolific 2507 variation added + +From: Thomas Bartosik + +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 +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -913,7 +913,9 @@ UNUSUAL_DEV( 0x066f, 0x8000, 0x0001, 0x0 + US_FL_FIX_CAPACITY ), + + /* Reported by Richard -=[]=- */ +-UNUSUAL_DEV( 0x067b, 0x2507, 0x0100, 0x0100, ++/* Change to bcdDeviceMin (0x0100 to 0x0001) reported by ++ * Thomas Bartosik */ ++UNUSUAL_DEV( 0x067b, 0x2507, 0x0001, 0x0100, + "Prolific Technology Inc.", + "Mass Storage Device", + US_SC_DEVICE, US_PR_DEVICE, NULL, diff --git a/queue-2.6.28/usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.patch b/queue-2.6.28/usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.patch new file mode 100644 index 00000000000..b7a62fcead8 --- /dev/null +++ b/queue-2.6.28/usb-unusual_devs-add-support-for-gi-0431-sd-card-interface.patch @@ -0,0 +1,83 @@ +From c497e715f93d148d751c055401568684eea0bf6b Mon Sep 17 00:00:00 2001 +From: Jan Dumon +Date: Tue, 10 Mar 2009 17:29:47 +0100 +Subject: USB: unusual_devs: Add support for GI 0431 SD-Card interface + +From: Jan Dumon + +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 +Signed-off-by: Phil Dibowitz +Signed-off-by: Greg Kroah-Hartman + +--- + 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 +@@ -1330,6 +1330,16 @@ UNUSUAL_DEV( 0x0af0, 0x7401, 0x0000, 0x0 + US_SC_DEVICE, US_PR_DEVICE, NULL, + 0 ), + ++/* Reported by Jan Dumon ++ * 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", diff --git a/queue-2.6.28/usb-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch b/queue-2.6.28/usb-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch new file mode 100644 index 00000000000..c0421d398af --- /dev/null +++ b/queue-2.6.28/usb-updated-unusual-devs-entry-for-usb-mass-storage-on-nokia-6233.patch @@ -0,0 +1,34 @@ +From 716a9c8561d9c50ec454f4fbd39a265892feda2c Mon Sep 17 00:00:00 2001 +From: Moritz Muehlenhoff +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 + +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 +Tested-by: Jan Heitkoetter +Signed-off-by: Phil Dibowitz +Signed-off-by: Greg Kroah-Hartman + +--- + 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 */ +-UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x0452, ++UNUSUAL_DEV( 0x0421, 0x0492, 0x0452, 0x9999, + "Nokia", + "Nokia 6233", + US_SC_DEVICE, US_PR_DEVICE, NULL, diff --git a/queue-2.6.28/usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch b/queue-2.6.28/usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch new file mode 100644 index 00000000000..358c1cf8115 --- /dev/null +++ b/queue-2.6.28/usb-usbfs-keep-async-urbs-until-the-device-file-is-closed.patch @@ -0,0 +1,69 @@ +From 6ff10464096540e14d7575a72c50d0316d003714 Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Mon, 9 Mar 2009 13:44:02 -0400 +Subject: USB: usbfs: keep async URBs until the device file is closed + +From: Alan Stern + +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 +Signed-off-by: Alan Stern +Signed-off-by: Greg Kroah-Hartman + +--- + 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, +@@ -642,6 +637,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); + +@@ -660,6 +656,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; + } diff --git a/queue-2.6.28/usb-usbtmc-add-protocol-1-support.patch b/queue-2.6.28/usb-usbtmc-add-protocol-1-support.patch new file mode 100644 index 00000000000..922d2e303ff --- /dev/null +++ b/queue-2.6.28/usb-usbtmc-add-protocol-1-support.patch @@ -0,0 +1,34 @@ +From 228dd05dbfdd0fced8ab1a28ed73b500ba6bb0a6 Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Wed, 11 Mar 2009 13:51:42 -0700 +Subject: USB: usbtmc: add protocol 1 support +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: 8bit + +From: Greg Kroah-Hartman + +commit 228dd05dbfdd0fced8ab1a28ed73b500ba6bb0a6 upstream. + +The driver already supports the 1 protocol support, so just add it to +the MODULE_DEVICE_TABLE entry so it properly picks up these devices. + +Thanks to Jouni Rynö for pointing this out. + +Reported-by: Jouni Ryno +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/class/usbtmc.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/class/usbtmc.c ++++ b/drivers/usb/class/usbtmc.c +@@ -49,6 +49,7 @@ + + static struct usb_device_id usbtmc_devices[] = { + { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), }, ++ { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 1), }, + { 0, } /* terminating entry */ + }; + MODULE_DEVICE_TABLE(usb, usbtmc_devices); diff --git a/queue-2.6.28/usb-usbtmc-fix-stupid-bug-in-open.patch b/queue-2.6.28/usb-usbtmc-fix-stupid-bug-in-open.patch new file mode 100644 index 00000000000..508db564c08 --- /dev/null +++ b/queue-2.6.28/usb-usbtmc-fix-stupid-bug-in-open.patch @@ -0,0 +1,38 @@ +From 5b10916ea0a62920204517e1c4ce14560b4f96ab Mon Sep 17 00:00:00 2001 +From: Greg Kroah-Hartman +Date: Tue, 10 Mar 2009 20:42:55 -0700 +Subject: USB: usbtmc: fix stupid bug in open() + +From: Greg Kroah-Hartman + +commit 5b10916ea0a62920204517e1c4ce14560b4f96ab upstream. + +open() will never succeed, as we always return -ENODEV. Fix this +obvious bug. + +Thanks to Jouni Ryno for reporting it. + +Reported-by: Jouni Ryno +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/class/usbtmc.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/usb/class/usbtmc.c ++++ b/drivers/usb/class/usbtmc.c +@@ -105,12 +105,13 @@ static int usbtmc_open(struct inode *ino + { + struct usb_interface *intf; + struct usbtmc_device_data *data; +- int retval = -ENODEV; ++ int retval = 0; + + intf = usb_find_interface(&usbtmc_driver, iminor(inode)); + if (!intf) { + printk(KERN_ERR KBUILD_MODNAME + ": can not find device for minor %d", iminor(inode)); ++ retval = -ENODEV; + goto exit; + } + -- 2.47.3