aboutsummaryrefslogtreecommitdiffstats
path: root/usb.current
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2008-11-12 12:23:04 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2008-11-12 12:23:04 -0800
commit53adc8413ef354e1c6ac727b2f2ec62e3ddd7e33 (patch)
tree6b3544251b9ab7161b6ee1e329d0b1dd3bc39797 /usb.current
parent7705ce340bb55bcc18b4f68a82814738549aa18d (diff)
downloadpatches-53adc8413ef354e1c6ac727b2f2ec62e3ddd7e33.tar.gz
lots of usb patches
Diffstat (limited to 'usb.current')
-rw-r--r--usb.current/ub-stub-pre_reset-and-post_reset-to-fix-oops.patch98
-rw-r--r--usb.current/usb-cp2101-add-enfora-gsm2228.patch33
-rw-r--r--usb.current/usb-fsl_qe_udc-report-disconnect-before-unbinding-fixing-oopses.patch63
-rw-r--r--usb.current/usb-r8a66597-hcd-fix-wrong-data-access-in-superh-on-chip-usb.patch36
-rw-r--r--usb.current/usb-remove-optional-bus-bindings-in-isp1760-fixing-runtime-warning.patch165
-rw-r--r--usb.current/usb-sisusb2vga-driver-add-0x0711-0x0903.patch32
-rw-r--r--usb.current/usb-storage-adjust-comment-in-kconfig.patch36
-rw-r--r--usb.current/usb-unusual-devs-patch-for-nokia-7610-supernova.patch39
-rw-r--r--usb.current/usb-usb-storage-add-quirks-module-parameter.patch221
9 files changed, 723 insertions, 0 deletions
diff --git a/usb.current/ub-stub-pre_reset-and-post_reset-to-fix-oops.patch b/usb.current/ub-stub-pre_reset-and-post_reset-to-fix-oops.patch
new file mode 100644
index 00000000000000..9f521cae73637b
--- /dev/null
+++ b/usb.current/ub-stub-pre_reset-and-post_reset-to-fix-oops.patch
@@ -0,0 +1,98 @@
+From zaitcev@redhat.com Wed Nov 12 11:50:53 2008
+From: Pete Zaitcev <zaitcev@redhat.com>
+Date: Mon, 10 Nov 2008 21:11:11 -0700
+Subject: ub: stub pre_reset and post_reset to fix oops
+To: linux-usb@vger.kernel.org
+Cc: zaitcev@redhat.com, greg@kroah.com, Alan Stern <stern@rowland.harvard.edu>
+Message-ID: <20081110211111.587d068d.zaitcev@redhat.com>
+
+
+Due to recent changes to usb_reset_device, the following hang occurs:
+
+events/0 D 0000000000000000 0 6 2
+ ffff880037477cc0 0000000000000046 ffff880037477c50 ffffffff80237434
+ ffffffff80574c80 00000001000a015c 0000000000000286 ffff8800374757d0
+ ffff88002a31c860 ffff880037475a00 0000000036779140 ffff880037475a00
+Call Trace:
+ [<ffffffff80237434>] try_to_del_timer_sync+0x52/0x5b
+ [<ffffffff8026f86c>] dma_pool_free+0x1a7/0x1ec
+ [<ffffffffa02a928a>] ub_disconnect+0x8e/0x1ad [ub]
+ [<ffffffff802407c9>] autoremove_wake_function+0x0/0x2e
+ [<ffffffff80378959>] usb_unbind_interface+0x5c/0xb7
+ [<ffffffff8036ab70>] __device_release_driver+0x95/0xbd
+ [<ffffffff8036ac70>] device_release_driver+0x21/0x2d
+ [<ffffffff803789f8>] usb_driver_release_interface+0x44/0x83
+ [<ffffffff80378ab9>] usb_forced_unbind_intf+0x17/0x1d
+ [<ffffffff80371ba4>] usb_reset_device+0x7d/0x114
+ [<ffffffffa02aaffd>] ub_reset_task+0x0/0x293 [ub]
+ [<ffffffffa02ab1c1>] ub_reset_task+0x1c4/0x293 [ub]
+ [<ffffffff8033dd1e>] flush_to_ldisc+0x0/0x1cd
+ [<ffffffffa02aaffd>] ub_reset_task+0x0/0x293 [ub]
+ [<ffffffff8023d302>] run_workqueue+0x87/0x114
+ [<ffffffff8023d467>] worker_thread+0xd8/0xe7
+ [<ffffffff802407c9>] autoremove_wake_function+0x0/0x2e
+ [<ffffffff8023d38f>] worker_thread+0x0/0xe7
+ [<ffffffff802404c1>] kthread+0x47/0x73
+ [<ffffffff8022c8dd>] schedule_tail+0x27/0x60
+ [<ffffffff8020c249>] child_rip+0xa/0x11
+ [<ffffffff8024047a>] kthread+0x0/0x73
+ [<ffffffff8020c23f>] child_rip+0x0/0x11
+
+This is because usb_reset_device now unbinds, and that calls disconnect,
+which in case of ub waits until the reset completes... which deadlocks.
+Worse, this deadlocks keventd and this takes whole box down.
+
+I'm going to fix this properly later, but let's unbreak the driver
+quickly for non-composite devices at least.
+
+Signed-off-by: Pete Zaitcev <zaitcev@redhat.com>
+Cc: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/block/ub.c | 20 ++++++++++++++++++--
+ 1 file changed, 18 insertions(+), 2 deletions(-)
+
+--- a/drivers/block/ub.c
++++ b/drivers/block/ub.c
+@@ -1546,8 +1546,6 @@ static void ub_top_sense_done(struct ub_
+
+ /*
+ * Reset management
+- * XXX Move usb_reset_device to khubd. Hogging kevent is not a good thing.
+- * XXX Make usb_sync_reset asynchronous.
+ */
+
+ static void ub_reset_enter(struct ub_dev *sc, int try)
+@@ -1633,6 +1631,22 @@ static void ub_reset_task(struct work_st
+ }
+
+ /*
++ * XXX Reset brackets are too much hassle to implement, so just stub them
++ * in order to prevent forced unbinding (which deadlocks solid when our
++ * ->disconnect method waits for the reset to complete and this kills keventd).
++ *
++ * XXX Tell Alan to move usb_unlock_device inside of usb_reset_device,
++ * or else the post_reset is invoked, and restats I/O on a locked device.
++ */
++static int ub_pre_reset(struct usb_interface *iface) {
++ return 0;
++}
++
++static int ub_post_reset(struct usb_interface *iface) {
++ return 0;
++}
++
++/*
+ * This is called from a process context.
+ */
+ static void ub_revalidate(struct ub_dev *sc, struct ub_lun *lun)
+@@ -2446,6 +2460,8 @@ static struct usb_driver ub_driver = {
+ .probe = ub_probe,
+ .disconnect = ub_disconnect,
+ .id_table = ub_usb_ids,
++ .pre_reset = ub_pre_reset,
++ .post_reset = ub_post_reset,
+ };
+
+ static int __init ub_init(void)
diff --git a/usb.current/usb-cp2101-add-enfora-gsm2228.patch b/usb.current/usb-cp2101-add-enfora-gsm2228.patch
new file mode 100644
index 00000000000000..01c695940094ef
--- /dev/null
+++ b/usb.current/usb-cp2101-add-enfora-gsm2228.patch
@@ -0,0 +1,33 @@
+From akpm@linux-foundation.org Wed Nov 12 11:31:08 2008
+From: Damir N Abdullin <damir@mimas.ru>
+Date: Thu, 30 Oct 2008 13:52:38 -0700
+Subject: USB: cp2101: add Enfora GSM2228
+Subject: + usb-serial-cp2101-add-enfora-gsm2228.patch added to -mm tree
+To: mm-commits@vger.kernel.org
+Cc: damir@mimas.ru, greg@kroah.com
+Message-ID: <200810302052.m9UKqcAb002790@imap1.linux-foundation.org>
+
+
+From: Damir N Abdullin <damir@mimas.ru>
+
+Enfora GSM2228 based on Cygnal Integrated Products chip uses the same
+cp2101 driver.
+
+Signed-off-by: Damir N Abdullin <damir@mimas.ru>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+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
+@@ -67,6 +67,7 @@ static struct usb_device_id id_table []
+ { USB_DEVICE(0x10C4, 0x800A) }, /* SPORTident BSM7-D-USB main station */
+ { USB_DEVICE(0x10C4, 0x803B) }, /* Pololu USB-serial converter */
+ { USB_DEVICE(0x10C4, 0x8053) }, /* Enfora EDG1228 */
++ { USB_DEVICE(0x10C4, 0x8054) }, /* Enfora GSM2228 */
+ { USB_DEVICE(0x10C4, 0x8066) }, /* Argussoft In-System Programmer */
+ { USB_DEVICE(0x10C4, 0x807A) }, /* Crumb128 board */
+ { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */
diff --git a/usb.current/usb-fsl_qe_udc-report-disconnect-before-unbinding-fixing-oopses.patch b/usb.current/usb-fsl_qe_udc-report-disconnect-before-unbinding-fixing-oopses.patch
new file mode 100644
index 00000000000000..78c8da1e8afd43
--- /dev/null
+++ b/usb.current/usb-fsl_qe_udc-report-disconnect-before-unbinding-fixing-oopses.patch
@@ -0,0 +1,63 @@
+From avorontsov@ru.mvista.com Wed Nov 12 11:52:45 2008
+From: Anton Vorontsov <avorontsov@ru.mvista.com>
+Date: Wed, 12 Nov 2008 21:56:27 +0300
+Subject: USB: fsl_qe_udc: Report disconnect before unbinding fixing oopses
+To: David Brownell <dbrownell@users.sourceforge.net>
+Cc: Greg Kroah-Hartman <greg@kroah.com>, Li Yang <leoli@freescale.com>, linux-usb@vger.kernel.org, linuxppc-dev@ozlabs.org
+Message-ID: <20081112185627.GA17699@oksana.dev.rtsoft.ru>
+Content-Disposition: inline
+
+
+Gadgets disable endpoints in their disconnect callbacks, so
+we must call disconnect before unbinding. This also fixes
+muram memory leak, since we free muram in the qe_ep_disable().
+
+But mainly the patch fixes following badness:
+
+root@b1:~# insmod fsl_qe_udc.ko
+fsl_qe_udc: Freescale QE/CPM USB Device Controller driver, 1.0
+fsl_qe_udc e01006c0.usb: QE USB controller initialized as device
+root@b1:~# insmod g_ether.ko
+g_ether gadget: using random self ethernet address
+g_ether gadget: using random host ethernet address
+usb0: MAC be:2d:3c:fa:be:f0
+usb0: HOST MAC 62:b8:6a:df:38:66
+g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
+g_ether gadget: g_ether ready
+fsl_qe_udc e01006c0.usb: fsl_qe_udc bind to driver g_ether
+g_ether gadget: high speed config #1: CDC Ethernet (ECM)
+root@b1:~# rmmod g_ether.ko
+------------[ cut here ]------------
+Badness at drivers/usb/gadget/composite.c:871
+[...]
+NIP [d10c1374] composite_unbind+0x24/0x15c [g_ether]
+LR [d10a82f4] usb_gadget_unregister_driver+0x128/0x168 [fsl_qe_udc]
+Call Trace:
+[cfb93e80] [cfb1f3a0] 0xcfb1f3a0 (unreliable)
+[cfb93eb0] [d10a82f4] usb_gadget_unregister_driver+0x128/0x168 [fsl_qe_udc]
+[cfb93ed0] [d10c2a3c] usb_composite_unregister+0x3c/0x4c [g_ether]
+[cfb93ee0] [c006bde0] sys_delete_module+0x130/0x19c
+[cfb93f40] [c00142d8] ret_from_syscall+0x0/0x38
+[...]
+fsl_qe_udc e01006c0.usb: unregistered gadget driver 'g_ether'
+
+Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
+Cc: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/gadget/fsl_qe_udc.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/drivers/usb/gadget/fsl_qe_udc.c
++++ b/drivers/usb/gadget/fsl_qe_udc.c
+@@ -2363,6 +2363,9 @@ int usb_gadget_unregister_driver(struct
+ nuke(loop_ep, -ESHUTDOWN);
+ spin_unlock_irqrestore(&udc_controller->lock, flags);
+
++ /* report disconnect; the driver is already quiesced */
++ driver->disconnect(&udc_controller->gadget);
++
+ /* unbind gadget and unhook driver. */
+ driver->unbind(&udc_controller->gadget);
+ udc_controller->gadget.dev.driver = NULL;
diff --git a/usb.current/usb-r8a66597-hcd-fix-wrong-data-access-in-superh-on-chip-usb.patch b/usb.current/usb-r8a66597-hcd-fix-wrong-data-access-in-superh-on-chip-usb.patch
new file mode 100644
index 00000000000000..d5a67ad0aeba03
--- /dev/null
+++ b/usb.current/usb-r8a66597-hcd-fix-wrong-data-access-in-superh-on-chip-usb.patch
@@ -0,0 +1,36 @@
+From shimoda.yoshihiro@renesas.com Wed Nov 12 11:51:31 2008
+From: Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
+Date: Tue, 11 Nov 2008 16:47:21 +0900
+Subject: usb: r8a66597-hcd: fix wrong data access in SuperH on-chip USB
+To: greg@kroah.com
+Cc: linux-usb@vger.kernel.org, linux-sh@vger.kernel.org
+Message-ID: <49193889.1080700@renesas.com>
+
+
+When I used SuperH on-chip USB, there was the problem that accessed
+r8a66597_root_hub which was not allocated.
+
+Signed-off-by: Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/r8a66597-hcd.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/host/r8a66597-hcd.c
++++ b/drivers/usb/host/r8a66597-hcd.c
+@@ -1763,11 +1763,12 @@ static void r8a66597_timer(unsigned long
+ {
+ struct r8a66597 *r8a66597 = (struct r8a66597 *)_r8a66597;
+ unsigned long flags;
++ int port;
+
+ spin_lock_irqsave(&r8a66597->lock, flags);
+
+- r8a66597_root_hub_control(r8a66597, 0);
+- r8a66597_root_hub_control(r8a66597, 1);
++ for (port = 0; port < R8A66597_MAX_ROOT_HUB; port++)
++ r8a66597_root_hub_control(r8a66597, port);
+
+ spin_unlock_irqrestore(&r8a66597->lock, flags);
+ }
diff --git a/usb.current/usb-remove-optional-bus-bindings-in-isp1760-fixing-runtime-warning.patch b/usb.current/usb-remove-optional-bus-bindings-in-isp1760-fixing-runtime-warning.patch
new file mode 100644
index 00000000000000..63ea5f52c5b90a
--- /dev/null
+++ b/usb.current/usb-remove-optional-bus-bindings-in-isp1760-fixing-runtime-warning.patch
@@ -0,0 +1,165 @@
+From bigeasy@linutronix.de Wed Nov 12 11:38:19 2008
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Sun, 2 Nov 2008 15:25:42 +0100
+Subject: USB: remove optional bus bindings in isp1760, fixing runtime warning
+To: Greg Kroah-Hartman <gregkh@suse.de>
+Cc: Roland Kletzing <devzero@web.de>, Sam Ravnborg <sam@ravnborg.org>
+Message-ID: <20081102142542.GA29172@www.tglx.de>
+Content-Disposition: inline
+
+
+Roland Reported the following:
+| kmem_cache_create: duplicate cache isp1760_qtd
+| Pid: 461, comm: modprobe Tainted: G W 2.6.28-rc2-git3-default #4
+| Call Trace:
+| [<c017540e>] kmem_cache_create+0xc9/0x3a3
+| [<c0159a8d>] free_pages_bulk+0x16c/0x1c9
+| [<f165c05f>] isp1760_init+0x0/0xb [isp1760]
+| [<f165c018>] init_kmem_once+0x18/0x5f [isp1760]
+| [<f165c064>] isp1760_init+0x5/0xb [isp1760]
+| [<c010113d>] _stext+0x4d/0x148
+| [<c0142936>] load_module+0x12cd/0x142e
+| [<c01743c4>] kmem_cache_destroy+0x0/0xd7
+| [<c0142b1e>] sys_init_module+0x87/0x176
+| [<c01039eb>] sysenter_do_call+0x12/0x2f
+
+The reason, is that ret is initialized with ENODEV instead of 0 _or_
+the kmem cache is not freed in error case with no bus binding.
+
+The difference between OF+PCI and OF only is
+| 15148 804 32 15984 3e70 isp1760-of-pci.o
+| 13748 676 8 14432 3860 isp1760-of.o
+
+about 1.5 KiB.
+
+Until there is a checkbox where the user *must* select atleast one item,
+and may select multiple entries I don't make it selectable anymore.
+Having a driver which can't be used under any circumstances is broken
+anyway and I've seen distros shipping it that way.
+
+Reported-by: Roland Kletzing <devzero@web.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>a
+Cc: stable <stable@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/Kconfig | 23 ++++++-----------------
+ drivers/usb/host/isp1760-if.c | 22 +++++++++++-----------
+ 2 files changed, 17 insertions(+), 28 deletions(-)
+
+--- a/drivers/usb/host/isp1760-if.c
++++ b/drivers/usb/host/isp1760-if.c
+@@ -14,16 +14,16 @@
+ #include "../core/hcd.h"
+ #include "isp1760-hcd.h"
+
+-#ifdef CONFIG_USB_ISP1760_OF
++#ifdef CONFIG_PPC_OF
+ #include <linux/of.h>
+ #include <linux/of_platform.h>
+ #endif
+
+-#ifdef CONFIG_USB_ISP1760_PCI
++#ifdef CONFIG_PCI
+ #include <linux/pci.h>
+ #endif
+
+-#ifdef CONFIG_USB_ISP1760_OF
++#ifdef CONFIG_PPC_OF
+ static int of_isp1760_probe(struct of_device *dev,
+ const struct of_device_id *match)
+ {
+@@ -128,7 +128,7 @@ static struct of_platform_driver isp1760
+ };
+ #endif
+
+-#ifdef CONFIG_USB_ISP1760_PCI
++#ifdef CONFIG_PCI
+ static u32 nxp_pci_io_base;
+ static u32 iolength;
+ static u32 pci_mem_phy0;
+@@ -288,28 +288,28 @@ static struct pci_driver isp1761_pci_dri
+
+ static int __init isp1760_init(void)
+ {
+- int ret = -ENODEV;
++ int ret;
+
+ init_kmem_once();
+
+-#ifdef CONFIG_USB_ISP1760_OF
++#ifdef CONFIG_PPC_OF
+ ret = of_register_platform_driver(&isp1760_of_driver);
+ if (ret) {
+ deinit_kmem_cache();
+ return ret;
+ }
+ #endif
+-#ifdef CONFIG_USB_ISP1760_PCI
++#ifdef CONFIG_PCI
+ ret = pci_register_driver(&isp1761_pci_driver);
+ if (ret)
+ goto unreg_of;
+ #endif
+ return ret;
+
+-#ifdef CONFIG_USB_ISP1760_PCI
++#ifdef CONFIG_PCI
+ unreg_of:
+ #endif
+-#ifdef CONFIG_USB_ISP1760_OF
++#ifdef CONFIG_PPC_OF
+ of_unregister_platform_driver(&isp1760_of_driver);
+ #endif
+ deinit_kmem_cache();
+@@ -319,10 +319,10 @@ module_init(isp1760_init);
+
+ static void __exit isp1760_exit(void)
+ {
+-#ifdef CONFIG_USB_ISP1760_OF
++#ifdef CONFIG_PPC_OF
+ of_unregister_platform_driver(&isp1760_of_driver);
+ #endif
+-#ifdef CONFIG_USB_ISP1760_PCI
++#ifdef CONFIG_PCI
+ pci_unregister_driver(&isp1761_pci_driver);
+ #endif
+ deinit_kmem_cache();
+--- a/drivers/usb/host/Kconfig
++++ b/drivers/usb/host/Kconfig
+@@ -110,29 +110,18 @@ config USB_ISP116X_HCD
+
+ config USB_ISP1760_HCD
+ tristate "ISP 1760 HCD support"
+- depends on USB && EXPERIMENTAL
++ depends on USB && EXPERIMENTAL && (PCI || PPC_OF)
+ ---help---
+ The ISP1760 chip is a USB 2.0 host controller.
+
+ This driver does not support isochronous transfers or OTG.
++ This USB controller is usually attached to a non-DMA-Master
++ capable bus. NXP's eval kit brings this chip on PCI card
++ where the chip itself is behind a PLB to simulate such
++ a bus.
+
+ To compile this driver as a module, choose M here: the
+- module will be called isp1760-hcd.
+-
+-config USB_ISP1760_PCI
+- bool "Support for the PCI bus"
+- depends on USB_ISP1760_HCD && PCI
+- ---help---
+- Enables support for the device present on the PCI bus.
+- This should only be required if you happen to have the eval kit from
+- NXP and you are going to test it.
+-
+-config USB_ISP1760_OF
+- bool "Support for the OF platform bus"
+- depends on USB_ISP1760_HCD && PPC_OF
+- ---help---
+- Enables support for the device present on the PowerPC
+- OpenFirmware platform bus.
++ module will be called isp1760.
+
+ config USB_OHCI_HCD
+ tristate "OHCI HCD support"
diff --git a/usb.current/usb-sisusb2vga-driver-add-0x0711-0x0903.patch b/usb.current/usb-sisusb2vga-driver-add-0x0711-0x0903.patch
new file mode 100644
index 00000000000000..db42aee4ac650b
--- /dev/null
+++ b/usb.current/usb-sisusb2vga-driver-add-0x0711-0x0903.patch
@@ -0,0 +1,32 @@
+From akpm@linux-foundation.org Wed Nov 12 11:42:45 2008
+From: Albert Comerma <albert@ecm.ub.es>
+Date: Tue, 04 Nov 2008 10:44:01 -0800
+Subject: USB: SISUSB2VGA driver: add 0x0711, 0x0903
+To: mm-commits@vger.kernel.org
+Cc: albert@ecm.ub.es, alan@lxorguk.ukuu.org.uk, albert.comerma@gmail.com, david-b@pacbell.net, greg@kroah.com, mchehab@infradead.org
+Message-ID: <200811041844.mA4Ii14X028631@imap1.linux-foundation.org>
+
+
+From: Albert Comerma <albert@ecm.ub.es>
+
+Signed-off-by: Albert Comerma <albert.comerma@gmail.com>
+Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
+Cc: David Brownell <david-b@pacbell.net>
+Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/misc/sisusbvga/sisusb.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/usb/misc/sisusbvga/sisusb.c
++++ b/drivers/usb/misc/sisusbvga/sisusb.c
+@@ -3270,6 +3270,7 @@ static struct usb_device_id sisusb_table
+ { USB_DEVICE(0x0711, 0x0900) },
+ { USB_DEVICE(0x0711, 0x0901) },
+ { USB_DEVICE(0x0711, 0x0902) },
++ { USB_DEVICE(0x0711, 0x0903) },
+ { USB_DEVICE(0x0711, 0x0918) },
+ { USB_DEVICE(0x182d, 0x021c) },
+ { USB_DEVICE(0x182d, 0x0269) },
diff --git a/usb.current/usb-storage-adjust-comment-in-kconfig.patch b/usb.current/usb-storage-adjust-comment-in-kconfig.patch
new file mode 100644
index 00000000000000..da42a010c51f37
--- /dev/null
+++ b/usb.current/usb-storage-adjust-comment-in-kconfig.patch
@@ -0,0 +1,36 @@
+From mdharm-usb@one-eyed-alien.net Wed Nov 12 11:30:16 2008
+From: Paul Bolle <pebolle@tiscali.nl>
+Date: Thu, 30 Oct 2008 08:42:43 -0700
+Subject: USB: storage: adjust comment in Kconfig
+To: Linux USB <linux-usb@vger.kernel.org>, Greg KH <greg@kroah.com>, USB Storage List <usb-storage@lists.one-eyed-alien.net>
+Message-ID: <20081030154243.GA16166@one-eyed-alien.net>
+Content-Disposition: inline
+
+
+From: Paul Bolle <pebolle@tiscali.nl>
+
+Since commit 65934a9 ("Make USB storage depend on SCSI rather than selecting
+it [try #6]") the comment at the top of drivers/usb/storage/Kconfig is
+incorrect. Adjust it to the current situation.
+
+Signed-off-by: Paul Bolle <pebolle@tiscali.nl>
+Signed-off-by: Matthew Dharm <mdharm-usb@one-eyed-alien.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/storage/Kconfig | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/storage/Kconfig
++++ b/drivers/usb/storage/Kconfig
+@@ -2,8 +2,8 @@
+ # USB Storage driver configuration
+ #
+
+-comment "NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'"
+-comment "may also be needed; see USB_STORAGE Help for more information"
++comment "NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;"
++comment "see USB_STORAGE Help for more information"
+ depends on USB
+
+ config USB_STORAGE
diff --git a/usb.current/usb-unusual-devs-patch-for-nokia-7610-supernova.patch b/usb.current/usb-unusual-devs-patch-for-nokia-7610-supernova.patch
new file mode 100644
index 00000000000000..65f9d123541a34
--- /dev/null
+++ b/usb.current/usb-unusual-devs-patch-for-nokia-7610-supernova.patch
@@ -0,0 +1,39 @@
+From evilbladewarrior@gmail.com Wed Nov 12 11:40:02 2008
+From: Ricky Wong <evilbladewarrior@gmail.com>
+Date: Tue, 04 Nov 2008 19:13:45 +0800
+Subject: usb: unusual devs patch for Nokia 7610 Supernova
+To: phil@ipom.com
+Cc: linux-usb@vger.kernel.org, usb-storage@lists.one-eyed-alien.net
+Message-ID: <1225797225.19168.24.camel@ricky-desktop>
+
+From: Ricky Wong <evilbladewarrior@gmail.com>
+
+Additional sectors were reported by the Nokia 7610 Supernova phone in
+usb storage mode. The following patch rectifies the aforementioned
+problem.
+
+Signed-off-by: Ricky Wong Yung Fei <evilbladewarrior@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+
+---
+ drivers/usb/storage/unusual_devs.h | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/usb/storage/unusual_devs.h
++++ b/drivers/usb/storage/unusual_devs.h
+@@ -253,6 +253,14 @@ UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x
+ US_SC_DEVICE, US_PR_DEVICE, NULL,
+ US_FL_FIX_CAPACITY ),
+
++/* Submitted by Ricky Wong Yung Fei <evilbladewarrior@gmail.com> */
++/* Nokia 7610 Supernova - Too many sectors reported in usb storage mode */
++UNUSUAL_DEV( 0x0421, 0x00f5, 0x0000, 0x0470,
++ "Nokia",
++ "7610 Supernova",
++ US_SC_DEVICE, US_PR_DEVICE, NULL,
++ US_FL_FIX_CAPACITY ),
++
+ /* Reported by Olaf Hering <olh@suse.de> from novell bug #105878 */
+ UNUSUAL_DEV( 0x0424, 0x0fdc, 0x0210, 0x0210,
+ "SMSC",
diff --git a/usb.current/usb-usb-storage-add-quirks-module-parameter.patch b/usb.current/usb-usb-storage-add-quirks-module-parameter.patch
new file mode 100644
index 00000000000000..b81cd72146f238
--- /dev/null
+++ b/usb.current/usb-usb-storage-add-quirks-module-parameter.patch
@@ -0,0 +1,221 @@
+From stern@rowland.harvard.edu Wed Nov 12 11:49:45 2008
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Mon, 10 Nov 2008 14:07:45 -0500 (EST)
+Subject: USB: usb-storage: add "quirks=" module parameter
+To: Greg KH <greg@kroah.com>, Matthew Dharm <mdharm-usb@one-eyed-alien.net>
+Cc: USB Storage list <usb-storage@lists.one-eyed-alien.net>
+Message-ID: <Pine.LNX.4.44L0.0811101406380.2467-100000@iolanthe.rowland.org>
+
+From: Alan Stern <stern@rowland.harvard.edu>
+
+This patch (as1163b) adds a "quirks=" module parameter to usb-storage.
+This will allow people to make short-term changes to their
+unusual_devs list without rebuilding the entire driver. Testing will
+become much easier, and less-sophisticated users will be able to
+access their buggy devices after a simple config-file change instead
+of having to wait for a new kernel release.
+
+The patch also adds a documentation entry for usb-storage's
+"delay_use" parameter, which has been around for years but but was
+never listed among the kernel parameters.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ Documentation/kernel-parameters.txt | 29 +++++++++
+ drivers/usb/storage/usb.c | 113 ++++++++++++++++++++++++++++++++++++
+ 2 files changed, 142 insertions(+)
+
+--- a/Documentation/kernel-parameters.txt
++++ b/Documentation/kernel-parameters.txt
+@@ -90,6 +90,7 @@ parameter is applicable:
+ SWSUSP Software suspend (hibernation) is enabled.
+ SUSPEND System suspend states are enabled.
+ TS Appropriate touchscreen support is enabled.
++ UMS USB Mass Storage support is enabled.
+ USB USB support is enabled.
+ USBHID USB Human Interface Device support is enabled.
+ V4L Video For Linux support is enabled.
+@@ -2323,6 +2324,34 @@ and is between 256 and 4096 characters.
+ usbhid.mousepoll=
+ [USBHID] The interval which mice are to be polled at.
+
++ usb-storage.delay_use=
++ [UMS] The delay in seconds before a new device is
++ scanned for Logical Units (default 5).
++
++ usb-storage.quirks=
++ [UMS] A list of quirks entries to supplement or
++ override the built-in unusual_devs list. List
++ entries are separated by commas. Each entry has
++ the form VID:PID:Flags where VID and PID are Vendor
++ and Product ID values (4-digit hex numbers) and
++ Flags is a set of characters, each corresponding
++ to a common usb-storage quirk flag as follows:
++ c = FIX_CAPACITY (decrease the reported
++ device capacity by one sector);
++ i = IGNORE_DEVICE (don't bind to this
++ device);
++ l = NOT_LOCKABLE (don't try to lock and
++ unlock ejectable media);
++ m = MAX_SECTORS_64 (don't transfer more
++ than 64 sectors = 32 KB at a time);
++ r = IGNORE_RESIDUE (the device reports
++ bogus residue values);
++ s = SINGLE_LUN (the device has only one
++ Logical Unit);
++ w = NO_WP_DETECT (don't test whether the
++ medium is write-protected).
++ Example: quirks=0419:aaf5:rl,0421:0433:rc
++
+ add_efi_memmap [EFI; x86-32,X86-64] Include EFI memory map in
+ kernel's map of available physical RAM.
+
+--- a/drivers/usb/storage/usb.c
++++ b/drivers/usb/storage/usb.c
+@@ -113,6 +113,16 @@ static unsigned int delay_use = 5;
+ module_param(delay_use, uint, S_IRUGO | S_IWUSR);
+ MODULE_PARM_DESC(delay_use, "seconds to delay before using a new device");
+
++static char *quirks;
++module_param(quirks, charp, S_IRUGO);
++MODULE_PARM_DESC(quirks, "supplemental list of device IDs and their quirks");
++
++struct quirks_entry {
++ u16 vid, pid;
++ u32 fflags;
++};
++static struct quirks_entry *quirks_list, *quirks_end;
++
+
+ /*
+ * The entries in this table correspond, line for line,
+@@ -473,6 +483,30 @@ static int associate_dev(struct us_data
+ return 0;
+ }
+
++/* Adjust device flags based on the "quirks=" module parameter */
++static void adjust_quirks(struct us_data *us)
++{
++ u16 vid, pid;
++ struct quirks_entry *q;
++ unsigned int mask = (US_FL_FIX_CAPACITY | US_FL_IGNORE_DEVICE |
++ US_FL_NOT_LOCKABLE | US_FL_MAX_SECTORS_64 |
++ US_FL_IGNORE_RESIDUE | US_FL_SINGLE_LUN |
++ US_FL_NO_WP_DETECT);
++
++ vid = le16_to_cpu(us->pusb_dev->descriptor.idVendor);
++ pid = le16_to_cpu(us->pusb_dev->descriptor.idProduct);
++
++ for (q = quirks_list; q != quirks_end; ++q) {
++ if (q->vid == vid && q->pid == pid) {
++ us->fflags = (us->fflags & ~mask) | q->fflags;
++ dev_info(&us->pusb_intf->dev, "Quirks match for "
++ "vid %04x pid %04x: %x\n",
++ vid, pid, q->fflags);
++ break;
++ }
++ }
++}
++
+ /* Find an unusual_dev descriptor (always succeeds in the current code) */
+ static struct us_unusual_dev *find_unusual(const struct usb_device_id *id)
+ {
+@@ -497,6 +531,7 @@ static int get_device_info(struct us_dat
+ idesc->bInterfaceProtocol :
+ unusual_dev->useTransport;
+ us->fflags = USB_US_ORIG_FLAGS(id->driver_info);
++ adjust_quirks(us);
+
+ if (us->fflags & US_FL_IGNORE_DEVICE) {
+ printk(KERN_INFO USB_STORAGE "device ignored\n");
+@@ -1061,10 +1096,88 @@ static struct usb_driver usb_storage_dri
+ .soft_unbind = 1,
+ };
+
++/* Works only for digits and letters, but small and fast */
++#define TOLOWER(x) ((x) | 0x20)
++
++static void __init parse_quirks(void)
++{
++ int n, i;
++ char *p;
++
++ if (!quirks)
++ return;
++
++ /* Count the ':' characters to get 2 * the number of entries */
++ n = 0;
++ for (p = quirks; *p; ++p) {
++ if (*p == ':')
++ ++n;
++ }
++ n /= 2;
++ if (n == 0)
++ return; /* Don't allocate 0 bytes */
++
++ quirks_list = kmalloc(n * sizeof(*quirks_list), GFP_KERNEL);
++ if (!quirks_list)
++ return;
++
++ p = quirks;
++ quirks_end = quirks_list;
++ for (i = 0; i < n && *p; ++i) {
++ unsigned f = 0;
++
++ /* Each entry consists of VID:PID:flags */
++ quirks_end->vid = simple_strtoul(p, &p, 16);
++ if (*p != ':')
++ goto skip_to_next;
++ quirks_end->pid = simple_strtoul(p+1, &p, 16);
++ if (*p != ':')
++ goto skip_to_next;
++
++ while (*++p && *p != ',') {
++ switch (TOLOWER(*p)) {
++ case 'c':
++ f |= US_FL_FIX_CAPACITY;
++ break;
++ case 'i':
++ f |= US_FL_IGNORE_DEVICE;
++ break;
++ case 'l':
++ f |= US_FL_NOT_LOCKABLE;
++ break;
++ case 'm':
++ f |= US_FL_MAX_SECTORS_64;
++ break;
++ case 'r':
++ f |= US_FL_IGNORE_RESIDUE;
++ break;
++ case 's':
++ f |= US_FL_SINGLE_LUN;
++ break;
++ case 'w':
++ f |= US_FL_NO_WP_DETECT;
++ break;
++ /* Ignore unrecognized flag characters */
++ }
++ }
++ quirks_end->fflags = f;
++ ++quirks_end;
++
++ skip_to_next:
++ /* Entries are separated by commas */
++ while (*p) {
++ if (*p++ == ',')
++ break;
++ }
++ } /* for (i = 0; ...) */
++}
++
+ static int __init usb_stor_init(void)
+ {
+ int retval;
++
+ printk(KERN_INFO "Initializing USB Mass Storage driver...\n");
++ parse_quirks();
+
+ /* register the driver, return usb_register return code if error */
+ retval = usb_register(&usb_storage_driver);