diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2008-11-12 12:23:04 -0800 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-11-12 12:23:04 -0800 |
| commit | 53adc8413ef354e1c6ac727b2f2ec62e3ddd7e33 (patch) | |
| tree | 6b3544251b9ab7161b6ee1e329d0b1dd3bc39797 /usb.current | |
| parent | 7705ce340bb55bcc18b4f68a82814738549aa18d (diff) | |
| download | patches-53adc8413ef354e1c6ac727b2f2ec62e3ddd7e33.tar.gz | |
lots of usb patches
Diffstat (limited to 'usb.current')
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); |
