diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-04-24 15:34:09 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-04-24 15:34:09 -0700 |
commit | 4a076f7ffaae89e3f1c2ffecd147b79ae1e0bd9d (patch) | |
tree | 86bd89054c44670a82f2cfa1f7373cfc0898245c /usb | |
parent | 67c67eb735d985aadf3d63200ebb59147b9fa100 (diff) | |
download | patches-4a076f7ffaae89e3f1c2ffecd147b79ae1e0bd9d.tar.gz |
lotsa patches added
Diffstat (limited to 'usb')
12 files changed, 957 insertions, 0 deletions
diff --git a/usb/usb-add-new-itegno-usb-cdma-1x-card-support-for-pl2303.patch b/usb/usb-add-new-itegno-usb-cdma-1x-card-support-for-pl2303.patch new file mode 100644 index 0000000000000..6b37ac8f95b2e --- /dev/null +++ b/usb/usb-add-new-itegno-usb-cdma-1x-card-support-for-pl2303.patch @@ -0,0 +1,38 @@ +From wangjun1974@gmail.com Wed Apr 19 01:32:21 2006 +From: Wang Jun <wangjun1974@gmail.com> +Subject: USB: add new iTegno usb CDMA 1x card support for pl2303 +To: gregkh@suse.de, juwang@novell.com +Date: Wed, 19 Apr 2006 16:32:07 +0800 +Message-Id: <1145435527.11330.17.camel@sled10.site> + +Add new iTegno usb CDMA 1x card (usbid '0eba:2080') support to pl2303 driver + +Signed-off-by: Wang Jun <wangjun1974@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + + +--- + drivers/usb/serial/pl2303.c | 1 + + drivers/usb/serial/pl2303.h | 1 + + 2 files changed, 2 insertions(+) + +--- gregkh-2.6.orig/drivers/usb/serial/pl2303.c ++++ gregkh-2.6/drivers/usb/serial/pl2303.c +@@ -61,6 +61,7 @@ static struct usb_device_id id_table [] + { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) }, + { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) }, + { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) }, ++ { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) }, + { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) }, + { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) }, + { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) }, +--- gregkh-2.6.orig/drivers/usb/serial/pl2303.h ++++ gregkh-2.6/drivers/usb/serial/pl2303.h +@@ -26,6 +26,7 @@ + + #define ITEGNO_VENDOR_ID 0x0eba + #define ITEGNO_PRODUCT_ID 0x1080 ++#define ITEGNO_PRODUCT_ID_2080 0x2080 + + #define MA620_VENDOR_ID 0x0df7 + #define MA620_PRODUCT_ID 0x0620 diff --git a/usb/usb-allow-multiple-types-of-ehci-controllers-to-be-built-as-modules.patch b/usb/usb-allow-multiple-types-of-ehci-controllers-to-be-built-as-modules.patch new file mode 100644 index 0000000000000..641a4c5a81672 --- /dev/null +++ b/usb/usb-allow-multiple-types-of-ehci-controllers-to-be-built-as-modules.patch @@ -0,0 +1,343 @@ +From galak@kernel.crashing.org Tue Apr 11 08:09:45 2006 +Date: Tue, 11 Apr 2006 10:07:16 -0500 (CDT) +From: Kumar Gala <galak@kernel.crashing.org> +To: David Brownell <david-b@pacbell.net> +Subject: USB: allow multiple types of EHCI controllers to be built as modules +Message-ID: <Pine.LNX.4.44.0604111006450.25404-100000@gate.crashing.org> + +In some systems we may have both a platform EHCI controller and PCI EHCI +controller. Previously we couldn't build the EHCI support as a module due +to conflicting module_init() calls in the code. + +Signed-off-by: Kumar Gala <galak@kernel.crashing.org> +Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + arch/powerpc/sysdev/fsl_soc.c | 66 ++++++++++++++------------------------ + arch/ppc/syslib/mpc83xx_devices.c | 6 +-- + drivers/usb/host/ehci-au1xxx.c | 17 +-------- + drivers/usb/host/ehci-fsl.c | 37 +-------------------- + drivers/usb/host/ehci-hcd.c | 48 +++++++++++++++++++++++++-- + drivers/usb/host/ehci-pci.c | 20 ----------- + 6 files changed, 78 insertions(+), 116 deletions(-) + +--- gregkh-2.6.orig/arch/powerpc/sysdev/fsl_soc.c ++++ gregkh-2.6/arch/powerpc/sysdev/fsl_soc.c +@@ -372,7 +372,7 @@ static int __init fsl_usb_of_init(void) + { + struct device_node *np; + unsigned int i; +- struct platform_device *usb_dev; ++ struct platform_device *usb_dev_mph = NULL, *usb_dev_dr = NULL; + int ret; + + for (np = NULL, i = 0; +@@ -393,15 +393,15 @@ static int __init fsl_usb_of_init(void) + r[1].end = np->intrs[0].line; + r[1].flags = IORESOURCE_IRQ; + +- usb_dev = +- platform_device_register_simple("fsl-usb2-mph", i, r, 2); +- if (IS_ERR(usb_dev)) { +- ret = PTR_ERR(usb_dev); ++ usb_dev_mph = ++ platform_device_register_simple("fsl-ehci", i, r, 2); ++ if (IS_ERR(usb_dev_mph)) { ++ ret = PTR_ERR(usb_dev_mph); + goto err; + } + +- usb_dev->dev.coherent_dma_mask = 0xffffffffUL; +- usb_dev->dev.dma_mask = &usb_dev->dev.coherent_dma_mask; ++ usb_dev_mph->dev.coherent_dma_mask = 0xffffffffUL; ++ usb_dev_mph->dev.dma_mask = &usb_dev_mph->dev.coherent_dma_mask; + + usb_data.operating_mode = FSL_USB2_MPH_HOST; + +@@ -417,31 +417,14 @@ static int __init fsl_usb_of_init(void) + usb_data.phy_mode = determine_usb_phy(prop); + + ret = +- platform_device_add_data(usb_dev, &usb_data, ++ platform_device_add_data(usb_dev_mph, &usb_data, + sizeof(struct + fsl_usb2_platform_data)); + if (ret) +- goto unreg; ++ goto unreg_mph; + } + +- return 0; +- +-unreg: +- platform_device_unregister(usb_dev); +-err: +- return ret; +-} +- +-arch_initcall(fsl_usb_of_init); +- +-static int __init fsl_usb_dr_of_init(void) +-{ +- struct device_node *np; +- unsigned int i; +- struct platform_device *usb_dev; +- int ret; +- +- for (np = NULL, i = 0; ++ for (np = NULL; + (np = of_find_compatible_node(np, "usb", "fsl-usb2-dr")) != NULL; + i++) { + struct resource r[2]; +@@ -453,21 +436,21 @@ static int __init fsl_usb_dr_of_init(voi + + ret = of_address_to_resource(np, 0, &r[0]); + if (ret) +- goto err; ++ goto unreg_mph; + + r[1].start = np->intrs[0].line; + r[1].end = np->intrs[0].line; + r[1].flags = IORESOURCE_IRQ; + +- usb_dev = +- platform_device_register_simple("fsl-usb2-dr", i, r, 2); +- if (IS_ERR(usb_dev)) { +- ret = PTR_ERR(usb_dev); ++ usb_dev_dr = ++ platform_device_register_simple("fsl-ehci", i, r, 2); ++ if (IS_ERR(usb_dev_dr)) { ++ ret = PTR_ERR(usb_dev_dr); + goto err; + } + +- usb_dev->dev.coherent_dma_mask = 0xffffffffUL; +- usb_dev->dev.dma_mask = &usb_dev->dev.coherent_dma_mask; ++ usb_dev_dr->dev.coherent_dma_mask = 0xffffffffUL; ++ usb_dev_dr->dev.dma_mask = &usb_dev_dr->dev.coherent_dma_mask; + + usb_data.operating_mode = FSL_USB2_DR_HOST; + +@@ -475,19 +458,22 @@ static int __init fsl_usb_dr_of_init(voi + usb_data.phy_mode = determine_usb_phy(prop); + + ret = +- platform_device_add_data(usb_dev, &usb_data, ++ platform_device_add_data(usb_dev_dr, &usb_data, + sizeof(struct + fsl_usb2_platform_data)); + if (ret) +- goto unreg; ++ goto unreg_dr; + } +- + return 0; + +-unreg: +- platform_device_unregister(usb_dev); ++unreg_dr: ++ if (usb_dev_dr) ++ platform_device_unregister(usb_dev_dr); ++unreg_mph: ++ if (usb_dev_mph) ++ platform_device_unregister(usb_dev_mph); + err: + return ret; + } + +-arch_initcall(fsl_usb_dr_of_init); ++arch_initcall(fsl_usb_of_init); +--- gregkh-2.6.orig/arch/ppc/syslib/mpc83xx_devices.c ++++ gregkh-2.6/arch/ppc/syslib/mpc83xx_devices.c +@@ -186,7 +186,7 @@ struct platform_device ppc_sys_platform_ + }, + }, + [MPC83xx_USB2_DR] = { +- .name = "fsl-usb2-dr", ++ .name = "fsl-ehci", + .id = 1, + .num_resources = 2, + .resource = (struct resource[]) { +@@ -203,8 +203,8 @@ struct platform_device ppc_sys_platform_ + }, + }, + [MPC83xx_USB2_MPH] = { +- .name = "fsl-usb2-mph", +- .id = 1, ++ .name = "fsl-ehci", ++ .id = 2, + .num_resources = 2, + .resource = (struct resource[]) { + { +--- gregkh-2.6.orig/drivers/usb/host/ehci-au1xxx.c ++++ gregkh-2.6/drivers/usb/host/ehci-au1xxx.c +@@ -272,6 +272,8 @@ static int ehci_hcd_au1xxx_drv_resume(st + return 0; + } + */ ++MODULE_ALIAS("au1xxx-ehci"); ++/* FIXME use "struct platform_driver" */ + static struct device_driver ehci_hcd_au1xxx_driver = { + .name = "au1xxx-ehci", + .bus = &platform_bus_type, +@@ -280,18 +282,3 @@ static struct device_driver ehci_hcd_au1 + /*.suspend = ehci_hcd_au1xxx_drv_suspend, */ + /*.resume = ehci_hcd_au1xxx_drv_resume, */ + }; +- +-static int __init ehci_hcd_au1xxx_init(void) +-{ +- pr_debug(DRIVER_INFO " (Au1xxx)\n"); +- +- return driver_register(&ehci_hcd_au1xxx_driver); +-} +- +-static void __exit ehci_hcd_au1xxx_cleanup(void) +-{ +- driver_unregister(&ehci_hcd_au1xxx_driver); +-} +- +-module_init(ehci_hcd_au1xxx_init); +-module_exit(ehci_hcd_au1xxx_cleanup); +--- gregkh-2.6.orig/drivers/usb/host/ehci-fsl.c ++++ gregkh-2.6/drivers/usb/host/ehci-fsl.c +@@ -324,43 +324,12 @@ static int ehci_fsl_drv_remove(struct pl + return 0; + } + +-static struct platform_driver ehci_fsl_dr_driver = { +- .probe = ehci_fsl_drv_probe, +- .remove = ehci_fsl_drv_remove, +- .driver = { +- .name = "fsl-usb2-dr", +- }, +-}; ++MODULE_ALIAS("fsl-ehci"); + +-static struct platform_driver ehci_fsl_mph_driver = { ++static struct platform_driver ehci_fsl_driver = { + .probe = ehci_fsl_drv_probe, + .remove = ehci_fsl_drv_remove, + .driver = { +- .name = "fsl-usb2-mph", ++ .name = "fsl-ehci", + }, + }; +- +-static int __init ehci_fsl_init(void) +-{ +- int retval; +- +- pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n", +- hcd_name, +- sizeof(struct ehci_qh), sizeof(struct ehci_qtd), +- sizeof(struct ehci_itd), sizeof(struct ehci_sitd)); +- +- retval = platform_driver_register(&ehci_fsl_dr_driver); +- if (retval) +- return retval; +- +- return platform_driver_register(&ehci_fsl_mph_driver); +-} +- +-static void __exit ehci_fsl_cleanup(void) +-{ +- platform_driver_unregister(&ehci_fsl_mph_driver); +- platform_driver_unregister(&ehci_fsl_dr_driver); +-} +- +-module_init(ehci_fsl_init); +-module_exit(ehci_fsl_cleanup); +--- gregkh-2.6.orig/drivers/usb/host/ehci-hcd.c ++++ gregkh-2.6/drivers/usb/host/ehci-hcd.c +@@ -889,19 +889,59 @@ MODULE_LICENSE ("GPL"); + + #ifdef CONFIG_PCI + #include "ehci-pci.c" +-#define EHCI_BUS_GLUED ++#define PCI_DRIVER ehci_pci_driver + #endif + + #ifdef CONFIG_PPC_83xx + #include "ehci-fsl.c" +-#define EHCI_BUS_GLUED ++#define PLATFORM_DRIVER ehci_fsl_driver + #endif + + #ifdef CONFIG_SOC_AU1X00 + #include "ehci-au1xxx.c" +-#define EHCI_BUS_GLUED ++#define PLATFORM_DRIVER ehci_hcd_au1xxx_driver + #endif + +-#ifndef EHCI_BUS_GLUED ++#if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) + #error "missing bus glue for ehci-hcd" + #endif ++ ++static int __init ehci_hcd_init(void) ++{ ++ int retval = 0; ++ ++ pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n", ++ hcd_name, ++ sizeof(struct ehci_qh), sizeof(struct ehci_qtd), ++ sizeof(struct ehci_itd), sizeof(struct ehci_sitd)); ++ ++#ifdef PLATFORM_DRIVER ++ retval = platform_driver_register(&PLATFORM_DRIVER); ++ if (retval < 0) ++ return retval; ++#endif ++ ++#ifdef PCI_DRIVER ++ retval = pci_register_driver(&PCI_DRIVER); ++ if (retval < 0) { ++#ifdef PLATFORM_DRIVER ++ platform_driver_unregister(&PLATFORM_DRIVER); ++#endif ++ } ++#endif ++ ++ return retval; ++} ++module_init(ehci_hcd_init); ++ ++static void __exit ehci_hcd_cleanup(void) ++{ ++#ifdef PLATFORM_DRIVER ++ platform_driver_unregister(&PLATFORM_DRIVER); ++#endif ++#ifdef PCI_DRIVER ++ pci_unregister_driver(&PCI_DRIVER); ++#endif ++} ++module_exit(ehci_hcd_cleanup); ++ +--- gregkh-2.6.orig/drivers/usb/host/ehci-pci.c ++++ gregkh-2.6/drivers/usb/host/ehci-pci.c +@@ -370,23 +370,3 @@ static struct pci_driver ehci_pci_driver + .resume = usb_hcd_pci_resume, + #endif + }; +- +-static int __init ehci_hcd_pci_init(void) +-{ +- if (usb_disabled()) +- return -ENODEV; +- +- pr_debug("%s: block sizes: qh %Zd qtd %Zd itd %Zd sitd %Zd\n", +- hcd_name, +- sizeof(struct ehci_qh), sizeof(struct ehci_qtd), +- sizeof(struct ehci_itd), sizeof(struct ehci_sitd)); +- +- return pci_register_driver(&ehci_pci_driver); +-} +-module_init(ehci_hcd_pci_init); +- +-static void __exit ehci_hcd_pci_cleanup(void) +-{ +- pci_unregister_driver(&ehci_pci_driver); +-} +-module_exit(ehci_hcd_pci_cleanup); diff --git a/usb/usb-net2280-check-for-shared-irqs.patch b/usb/usb-net2280-check-for-shared-irqs.patch new file mode 100644 index 0000000000000..55afbbce78827 --- /dev/null +++ b/usb/usb-net2280-check-for-shared-irqs.patch @@ -0,0 +1,30 @@ +From stern@rowland.harvard.edu Fri Apr 14 13:44:21 2006 +Date: Fri, 14 Apr 2006 16:44:11 -0400 (EDT) +From: Alan Stern <stern@rowland.harvard.edu> +To: Greg KH <greg@kroah.com>, David Brownell <david-b@pacbell.net> +Subject: USB: net2280: check for shared IRQs +Message-ID: <Pine.LNX.4.44L0.0604141642030.5320-100000@iolanthe.rowland.org> + +This patch (as670) adds a check for whether a shared IRQ was actually +generated by the net2280 device. + +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/net2280.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- gregkh-2.6.orig/drivers/usb/gadget/net2280.c ++++ gregkh-2.6/drivers/usb/gadget/net2280.c +@@ -2742,6 +2742,10 @@ static irqreturn_t net2280_irq (int irq, + { + struct net2280 *dev = _dev; + ++ /* shared interrupt, not ours */ ++ if (!(readl(&dev->regs->irqstat0) & (1 << INTA_ASSERTED))) ++ return IRQ_NONE; ++ + spin_lock (&dev->lock); + + /* handle disconnect, dma, and more */ diff --git a/usb/usb-net2280-handle-stalls-for-0-length-control-in-requests.patch b/usb/usb-net2280-handle-stalls-for-0-length-control-in-requests.patch new file mode 100644 index 0000000000000..953dfb54f9dfe --- /dev/null +++ b/usb/usb-net2280-handle-stalls-for-0-length-control-in-requests.patch @@ -0,0 +1,30 @@ +From stern@rowland.harvard.edu Fri Apr 14 13:40:07 2006 +Date: Fri, 14 Apr 2006 16:40:00 -0400 (EDT) +From: Alan Stern <stern@rowland.harvard.edu> +To: Greg KH <greg@kroah.com>, David Brownell <david-b@pacbell.net> +cc: USB development list <linux-usb-devel@lists.sourceforge.net> +Subject: USB: net2280: Handle STALLs for 0-length control-IN requests +Message-ID: <Pine.LNX.4.44L0.0604141635240.5320-100000@iolanthe.rowland.org> + +This patch (as668) fixes a typo in net2280. The handler for 0-length +control-IN requests should check that the endpoint _isn't_ halted before +sending a 0-length packet. + +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/net2280.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- gregkh-2.6.orig/drivers/usb/gadget/net2280.c ++++ gregkh-2.6/drivers/usb/gadget/net2280.c +@@ -2166,7 +2166,7 @@ static void handle_ep_small (struct net2 + ep->stopped = 1; + set_halt (ep); + mode = 2; +- } else if (!req && ep->stopped) ++ } else if (!req && !ep->stopped) + write_fifo (ep, NULL); + } + } else { diff --git a/usb/usb-net2280-send-0-length-packets-for-ep0.patch b/usb/usb-net2280-send-0-length-packets-for-ep0.patch new file mode 100644 index 0000000000000..10be6dcb514f4 --- /dev/null +++ b/usb/usb-net2280-send-0-length-packets-for-ep0.patch @@ -0,0 +1,31 @@ +From stern@rowland.harvard.edu Fri Apr 14 13:42:10 2006 +Date: Fri, 14 Apr 2006 16:42:03 -0400 (EDT) +From: Alan Stern <stern@rowland.harvard.edu> +To: Greg KH <greg@kroah.com>, David Brownell <david-b@pacbell.net> +Subject: USB: net2280: send 0-length packets for ep0 +Message-ID: <Pine.LNX.4.44L0.0604141640010.5320-100000@iolanthe.rowland.org> + +This patch (as669) fixes a bug in the net2280 driver. Now it will +properly send zero-length packets on ep0 until the control status stage +occurs. + +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/net2280.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +--- gregkh-2.6.orig/drivers/usb/gadget/net2280.c ++++ gregkh-2.6/drivers/usb/gadget/net2280.c +@@ -2280,9 +2280,7 @@ static void handle_ep_small (struct net2 + /* if we wrote it all, we're usually done */ + if (req->req.actual == req->req.length) { + if (ep->num == 0) { +- /* wait for control status */ +- if (mode != 2) +- req = NULL; ++ /* send zlps until the status stage */ + } else if (!req->req.zero || len != ep->ep.maxpacket) + mode = 2; + } diff --git a/usb/usb-net2280-set-driver-data-before-it-is-used.patch b/usb/usb-net2280-set-driver-data-before-it-is-used.patch new file mode 100644 index 0000000000000..11e633f9ee09a --- /dev/null +++ b/usb/usb-net2280-set-driver-data-before-it-is-used.patch @@ -0,0 +1,45 @@ +From stern@rowland.harvard.edu Fri Apr 14 13:46:29 2006 +Date: Fri, 14 Apr 2006 16:46:28 -0400 (EDT) +From: Alan Stern <stern@rowland.harvard.edu> +To: Greg KH <greg@kroah.com>, David Brownell <david-b@pacbell.net> +Subject: USB: net2280: set driver data before it is used +Message-ID: <Pine.LNX.4.44L0.0604141644120.5320-100000@iolanthe.rowland.org> + +This patch (as671) fixes a bug in the error pathway for the net2280 +probe routine. A failure during probe will cause the driver to call +pci_get_drvdata before the corresponding pci_set_drvdata has been set. +The patch also does a kzalloc conversion. + +Signed-off-by: Alan Stern <stern@rowland.harvard.edu> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/gadget/net2280.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +--- gregkh-2.6.orig/drivers/usb/gadget/net2280.c ++++ gregkh-2.6/drivers/usb/gadget/net2280.c +@@ -2833,13 +2833,13 @@ static int net2280_probe (struct pci_dev + } + + /* alloc, and start init */ +- dev = kmalloc (sizeof *dev, SLAB_KERNEL); ++ dev = kzalloc (sizeof *dev, SLAB_KERNEL); + if (dev == NULL){ + retval = -ENOMEM; + goto done; + } + +- memset (dev, 0, sizeof *dev); ++ pci_set_drvdata (pdev, dev); + spin_lock_init (&dev->lock); + dev->pdev = pdev; + dev->gadget.ops = &net2280_ops; +@@ -2952,7 +2952,6 @@ static int net2280_probe (struct pci_dev + dev->chiprev = get_idx_reg (dev->regs, REG_CHIPREV) & 0xffff; + + /* done */ +- pci_set_drvdata (pdev, dev); + INFO (dev, "%s\n", driver_desc); + INFO (dev, "irq %s, pci mem %p, chip rev %04x\n", + bufp, base, dev->chiprev); diff --git a/usb/usb-overrun-in-option-card-usb-driver.patch b/usb/usb-overrun-in-option-card-usb-driver.patch new file mode 100644 index 0000000000000..0070ec078a6f6 --- /dev/null +++ b/usb/usb-overrun-in-option-card-usb-driver.patch @@ -0,0 +1,47 @@ +From smurf@smurf.noris.de Mon Apr 10 20:01:56 2006 +Date: Tue, 11 Apr 2006 05:01:44 +0200 +To: Greg KH <gregkh@suse.de> +Cc: akpm@osdl.org, torvalds@osdl.org +Subject: USB: Overrun in option-card USB driver +Message-ID: <20060411030144.GR18658@smurf.noris.de> +Content-Disposition: inline +From: smurf@smurf.noris.de + +Since the arrays are declared as in_urbs[N_IN_URB] +and out_urbs[N_OUT_URB], both for loops go one +over the end of the array. This fixes coverity id #555. + +Signed-off-by: Eric Sesterhenn <snakebyte@gmx.de> +Signed-Off-By: Matthias Urlichs <smurf@smurf.noris.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -24,6 +24,7 @@ + coding style clean-up + 2005-06-20 v0.4.1 add missing braces :-/ + killed end-of-line whitespace ++ 2006-04-10 v0.4.2 fixed two array overrun errors :-/ + + Work sponsored by: Sigos GmbH, Germany <info@sigos.de> + +@@ -591,14 +592,14 @@ option_setup_urbs (struct usb_serial *se + portdata = usb_get_serial_port_data(port); + + /* Do indat endpoints first */ +- for (j = 0; j <= N_IN_URB; ++j) { ++ for (j = 0; j < N_IN_URB; ++j) { + portdata->in_urbs[j] = option_setup_urb (serial, + port->bulk_in_endpointAddress, USB_DIR_IN, port, + portdata->in_buffer[j], IN_BUFLEN, option_indat_callback); + } + + /* outdat endpoints */ +- for (j = 0; j <= N_OUT_URB; ++j) { ++ for (j = 0; j < N_OUT_URB; ++j) { + portdata->out_urbs[j] = option_setup_urb (serial, + port->bulk_out_endpointAddress, USB_DIR_OUT, port, + portdata->out_buffer[j], OUT_BUFLEN, option_outdat_callback); +-- +1.3-rc1.GIT + diff --git a/usb/usb-resource-leak-fix-for-whiteheat-driver.patch b/usb/usb-resource-leak-fix-for-whiteheat-driver.patch new file mode 100644 index 0000000000000..efa6b794d31a4 --- /dev/null +++ b/usb/usb-resource-leak-fix-for-whiteheat-driver.patch @@ -0,0 +1,31 @@ +From jesper.juhl@gmail.com Sun Apr 23 10:58:42 2006 +From: Jesper Juhl <jesper.juhl@gmail.com> +To: linux-kernel@vger.kernel.org +Subject: USB: Resource leak fix for whiteheat driver +Date: Sun, 23 Apr 2006 19:59:23 +0200 +Cc: Greg Kroah-Hartman <greg@kroah.com>, Stuart MacDonald <stuartm@connecttech.com>, Jesper Juhl <jesper.juhl@gmail.com> +Content-Disposition: inline +Message-Id: <200604231959.23877.jesper.juhl@gmail.com> + +We may return from drivers/usb/serial/whiteheat.c::whiteheat_attach() +without freeing `result' if we leave via the no_firmware: label. + +Spotted by the coverity checker as #670 + +Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> +--- + + drivers/usb/serial/whiteheat.c | 1 + + 1 file changed, 1 insertion(+) + +--- gregkh-2.6.orig/drivers/usb/serial/whiteheat.c ++++ gregkh-2.6/drivers/usb/serial/whiteheat.c +@@ -508,6 +508,7 @@ no_firmware: + err("%s: Unable to retrieve firmware version, try replugging\n", serial->type->description); + err("%s: If the firmware is not running (status led not blinking)\n", serial->type->description); + err("%s: please contact support@connecttech.com\n", serial->type->description); ++ kfree(result); + return -ENODEV; + + no_command_private: diff --git a/usb/usb-sisusbvga-possible-cleanups.patch b/usb/usb-sisusbvga-possible-cleanups.patch new file mode 100644 index 0000000000000..7e462a98a4008 --- /dev/null +++ b/usb/usb-sisusbvga-possible-cleanups.patch @@ -0,0 +1,225 @@ +From bunk@stusta.de Sat Apr 15 02:17:52 2006 +Date: Sat, 15 Apr 2006 11:17:27 +0200 +From: Adrian Bunk <bunk@stusta.de> +To: <thomas@winischhofer.net> +Cc: gregkh@suse.de +Subject: USB: sisusbvga: possible cleanups +Message-ID: <20060415091726.GC15022@stusta.de> +Content-Disposition: inline + +This patch contains the following possible cleanups: +- make needlessly global functions static +- function and struct declarations belong into header files +- make SiS_VCLKData const +- #if 0 the following unused global functions: + - sisusb.c: sisusb_writew() + - sisusb.c: sisusb_readw() + - sisusb_init.c: SiSUSB_GetModeID() + +Signed-off-by: Adrian Bunk <bunk@stusta.de> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + +--- + drivers/usb/misc/sisusbvga/sisusb.c | 35 ++++------------------------- + drivers/usb/misc/sisusbvga/sisusb_con.c | 24 +------------------ + drivers/usb/misc/sisusbvga/sisusb_init.c | 4 ++- + drivers/usb/misc/sisusbvga/sisusb_init.h | 20 ++++++++++++++-- + drivers/usb/misc/sisusbvga/sisusb_struct.h | 2 - + 5 files changed, 28 insertions(+), 57 deletions(-) + +--- gregkh-2.6.orig/drivers/usb/misc/sisusbvga/sisusb.c ++++ gregkh-2.6/drivers/usb/misc/sisusbvga/sisusb.c +@@ -53,6 +53,7 @@ + #include <linux/vmalloc.h> + + #include "sisusb.h" ++#include "sisusb_init.h" + + #ifdef INCL_SISUSB_CON + #include <linux/font.h> +@@ -63,36 +64,6 @@ + /* Forward declarations / clean-up routines */ + + #ifdef INCL_SISUSB_CON +-int sisusb_setreg(struct sisusb_usb_data *sisusb, int port, u8 data); +-int sisusb_getreg(struct sisusb_usb_data *sisusb, int port, u8 *data); +-int sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 data); +-int sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port, u8 index, u8 *data); +-int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port, u8 idx, u8 myand, u8 myor); +-int sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port, u8 index, u8 myor); +-int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port, u8 idx, u8 myand); +- +-int sisusb_writeb(struct sisusb_usb_data *sisusb, u32 adr, u8 data); +-int sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 *data); +-int sisusb_writew(struct sisusb_usb_data *sisusb, u32 adr, u16 data); +-int sisusb_readw(struct sisusb_usb_data *sisusb, u32 adr, u16 *data); +-int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src, +- u32 dest, int length, size_t *bytes_written); +- +-int sisusb_reset_text_mode(struct sisusb_usb_data *sisusb, int init); +- +-extern int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo); +-extern int SiSUSBSetVESAMode(struct SiS_Private *SiS_Pr, unsigned short VModeNo); +- +-extern void sisusb_init_concode(void); +-extern int sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last); +-extern void sisusb_console_exit(struct sisusb_usb_data *sisusb); +- +-extern void sisusb_set_cursor(struct sisusb_usb_data *sisusb, unsigned int location); +- +-extern int sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot, +- u8 *arg, int cmapsz, int ch512, int dorecalc, +- struct vc_data *c, int fh, int uplock); +- + static int sisusb_first_vc = 0; + static int sisusb_last_vc = 0; + module_param_named(first, sisusb_first_vc, int, 0); +@@ -1449,6 +1420,8 @@ sisusb_readb(struct sisusb_usb_data *sis + return(sisusb_read_memio_byte(sisusb, SISUSB_TYPE_MEM, adr, data)); + } + ++#if 0 ++ + int + sisusb_writew(struct sisusb_usb_data *sisusb, u32 adr, u16 data) + { +@@ -1461,6 +1434,8 @@ sisusb_readw(struct sisusb_usb_data *sis + return(sisusb_read_memio_word(sisusb, SISUSB_TYPE_MEM, adr, data)); + } + ++#endif /* 0 */ ++ + int + sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src, + u32 dest, int length, size_t *bytes_written) +--- gregkh-2.6.orig/drivers/usb/misc/sisusbvga/sisusb_con.c ++++ gregkh-2.6/drivers/usb/misc/sisusbvga/sisusb_con.c +@@ -70,27 +70,9 @@ + #include <linux/vmalloc.h> + + #include "sisusb.h" ++#include "sisusb_init.h" + + #ifdef INCL_SISUSB_CON +-extern int sisusb_setreg(struct sisusb_usb_data *, int, u8); +-extern int sisusb_getreg(struct sisusb_usb_data *, int, u8 *); +-extern int sisusb_setidxreg(struct sisusb_usb_data *, int, u8, u8); +-extern int sisusb_getidxreg(struct sisusb_usb_data *, int, u8, u8 *); +-extern int sisusb_setidxregor(struct sisusb_usb_data *, int, u8, u8); +-extern int sisusb_setidxregand(struct sisusb_usb_data *, int, u8, u8); +-extern int sisusb_setidxregandor(struct sisusb_usb_data *, int, u8, u8, u8); +- +-extern int sisusb_writeb(struct sisusb_usb_data *sisusb, u32 adr, u8 data); +-extern int sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 *data); +-extern int sisusb_writew(struct sisusb_usb_data *sisusb, u32 adr, u16 data); +-extern int sisusb_readw(struct sisusb_usb_data *sisusb, u32 adr, u16 *data); +-extern int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src, +- u32 dest, int length, size_t *bytes_written); +- +-extern void sisusb_delete(struct kref *kref); +-extern int sisusb_reset_text_mode(struct sisusb_usb_data *sisusb, int init); +- +-extern int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo); + + #define sisusbcon_writew(val, addr) (*(addr) = (val)) + #define sisusbcon_readw(addr) (*(addr)) +@@ -103,8 +85,6 @@ static struct sisusb_usb_data *mysisusbs + /* Forward declaration */ + static const struct consw sisusb_con; + +-extern struct mutex disconnect_mutex; +- + static inline void + sisusbcon_memsetw(u16 *s, u16 c, unsigned int count) + { +@@ -1487,7 +1467,7 @@ static int sisusbdummycon_dummy(void) + + #define SISUSBCONDUMMY (void *)sisusbdummycon_dummy + +-const struct consw sisusb_dummy_con = { ++static const struct consw sisusb_dummy_con = { + .owner = THIS_MODULE, + .con_startup = sisusbdummycon_startup, + .con_init = sisusbdummycon_init, +--- gregkh-2.6.orig/drivers/usb/misc/sisusbvga/sisusb_init.c ++++ gregkh-2.6/drivers/usb/misc/sisusbvga/sisusb_init.c +@@ -74,6 +74,7 @@ SiSUSB_InitPtr(struct SiS_Private *SiS_P + /* HELPER: Get ModeID */ + /*********************************************/ + ++#if 0 + unsigned short + SiSUSB_GetModeID(int HDisplay, int VDisplay, int Depth) + { +@@ -157,6 +158,7 @@ SiSUSB_GetModeID(int HDisplay, int VDisp + + return ModeIndex; + } ++#endif /* 0 */ + + /*********************************************/ + /* HELPER: SetReg, GetReg */ +@@ -233,7 +235,7 @@ SiS_DisplayOn(struct SiS_Private *SiS_Pr + /* HELPER: Init Port Addresses */ + /*********************************************/ + +-void ++static void + SiSUSBRegInit(struct SiS_Private *SiS_Pr, unsigned long BaseAddr) + { + SiS_Pr->SiS_P3c4 = BaseAddr + 0x14; +--- gregkh-2.6.orig/drivers/usb/misc/sisusbvga/sisusb_init.h ++++ gregkh-2.6/drivers/usb/misc/sisusbvga/sisusb_init.h +@@ -690,7 +690,7 @@ static const struct SiS_CRT1Table SiSUSB + 0x41}} /* 0x54 */ + }; + +-static struct SiS_VCLKData SiSUSB_VCLKData[] = ++static const struct SiS_VCLKData SiSUSB_VCLKData[] = + { + { 0x1b,0xe1, 25}, /* 0x00 */ + { 0x4e,0xe4, 28}, /* 0x01 */ +@@ -808,8 +808,8 @@ static struct SiS_VCLKData SiSUSB_VCLKDa + { 0x2b,0xc2, 35} /* 0x71 768@576@60 */ + }; + +-void SiSUSBRegInit(struct SiS_Private *SiS_Pr, unsigned long BaseAddr); +-unsigned short SiSUSB_GetModeID(int HDisplay, int VDisplay, int Depth); ++extern struct mutex disconnect_mutex; ++ + int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo); + int SiSUSBSetVESAMode(struct SiS_Private *SiS_Pr, unsigned short VModeNo); + +@@ -826,5 +826,19 @@ extern int sisusb_setidxregor(struct sis + extern int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port, + u8 idx, u8 myand); + ++void sisusb_delete(struct kref *kref); ++int sisusb_writeb(struct sisusb_usb_data *sisusb, u32 adr, u8 data); ++int sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 *data); ++int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src, ++ u32 dest, int length, size_t *bytes_written); ++int sisusb_reset_text_mode(struct sisusb_usb_data *sisusb, int init); ++int sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot, ++ u8 *arg, int cmapsz, int ch512, int dorecalc, ++ struct vc_data *c, int fh, int uplock); ++void sisusb_set_cursor(struct sisusb_usb_data *sisusb, unsigned int location); ++int sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last); ++void sisusb_console_exit(struct sisusb_usb_data *sisusb); ++void sisusb_init_concode(void); ++ + #endif + +--- gregkh-2.6.orig/drivers/usb/misc/sisusbvga/sisusb_struct.h ++++ gregkh-2.6/drivers/usb/misc/sisusbvga/sisusb_struct.h +@@ -161,7 +161,7 @@ struct SiS_Private + const struct SiS_Ext *SiS_EModeIDTable; + const struct SiS_Ext2 *SiS_RefIndex; + const struct SiS_CRT1Table *SiS_CRT1Table; +- struct SiS_VCLKData *SiS_VCLKData; ++ const struct SiS_VCLKData *SiS_VCLKData; + const struct SiS_ModeResInfo *SiS_ModeResInfo; + }; + diff --git a/usb/usb-storage-atmel-unusual-dev-update.patch b/usb/usb-storage-atmel-unusual-dev-update.patch new file mode 100644 index 0000000000000..d299435072db8 --- /dev/null +++ b/usb/usb-storage-atmel-unusual-dev-update.patch @@ -0,0 +1,40 @@ +From phil@ipom.com Sun Apr 16 19:19:32 2006 +Message-ID: <4442FB2D.4010802@ipom.com> +Date: Sun, 16 Apr 2006 19:19:25 -0700 +From: Phil Dibowitz <phil@ipom.com> +To: Phil Dibowitz <phil@ipom.com> +Cc: Olivier Blondeau <zeitoun@gmail.com>, Greg KH <greg@kroah.com> +Subject: USB: storage: atmel unusual dev update + + +From: Olivier Blondeau <zeitoun@gmail.com> + + +Originally submitted by Olivier Blondeau <zeitoun@gmail.com>, with re-diffing +by me. Adds a new atmel unusual_dev entry. + +Signed-off-by: Phil Dibowitz <phil@ipom.com> + +--- + + +--- + drivers/usb/storage/unusual_devs.h | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- gregkh-2.6.orig/drivers/usb/storage/unusual_devs.h ++++ gregkh-2.6/drivers/usb/storage/unusual_devs.h +@@ -773,6 +773,13 @@ UNUSUAL_DEV( 0x069b, 0x3004, 0x0001, 0x + US_SC_DEVICE, US_PR_DEVICE, NULL, + US_FL_FIX_CAPACITY ), + ++/* Reported by Olivier Blondeau <zeitoun@gmail.com> */ ++UNUSUAL_DEV( 0x0727, 0x0306, 0x0100, 0x0100, ++ "ATMEL", ++ "SND1 Storage", ++ US_SC_DEVICE, US_PR_DEVICE, NULL, ++ US_FL_IGNORE_RESIDUE), ++ + /* Submitted by Roman Hodek <roman@hodek.net> */ + UNUSUAL_DEV( 0x0781, 0x0001, 0x0200, 0x0200, + "Sandisk", diff --git a/usb/usb-storage-unusual-devs-update.patch b/usb/usb-storage-unusual-devs-update.patch new file mode 100644 index 0000000000000..d335e837cfec2 --- /dev/null +++ b/usb/usb-storage-unusual-devs-update.patch @@ -0,0 +1,32 @@ +From linux-usb-devel-admin@lists.sourceforge.net Sun Apr 16 19:19:07 2006 +Message-ID: <4442FAFC.3070802@ipom.com> +From: Phil Dibowitz <phil@ipom.com> +To: Kenneth Crudup <kenny@panix.com> +Cc: linux-usb-devel@lists.sourceforge.net +Subject: USB: Storage: unusual devs update +Date: Sun, 16 Apr 2006 19:18:36 -0700 + +This patch removes the Protocol portion of the Iomega Click! device as it's not +needed. Not-needed message reported by Kenneth Crudup <kenny@panix.com> + +Signed-off-by: Phil Dibowitz <phil@ipom.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + + +--- + drivers/usb/storage/unusual_devs.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- gregkh-2.6.orig/drivers/usb/storage/unusual_devs.h ++++ gregkh-2.6/drivers/usb/storage/unusual_devs.h +@@ -411,7 +411,7 @@ UNUSUAL_DEV( 0x050d, 0x0115, 0x0133, 0x + UNUSUAL_DEV( 0x0525, 0xa140, 0x0100, 0x0100, + "Iomega", + "USB Clik! 40", +- US_SC_8070, US_PR_BULK, NULL, ++ US_SC_8070, US_PR_DEVICE, NULL, + US_FL_FIX_INQUIRY ), + + /* Yakumo Mega Image 37 diff --git a/usb/usb-use-new-pci_class_serial_usb_-defines.patch b/usb/usb-use-new-pci_class_serial_usb_-defines.patch new file mode 100644 index 0000000000000..47238adc9895e --- /dev/null +++ b/usb/usb-use-new-pci_class_serial_usb_-defines.patch @@ -0,0 +1,65 @@ +From khali@linux-fr.org Sun Apr 9 11:07:51 2006 +Date: Sun, 9 Apr 2006 20:07:35 +0200 +From: Jean Delvare <khali@linux-fr.org> +To: Greg KH <gregkh@suse.de> +Subject: USB: Use new PCI_CLASS_SERIAL_USB_* defines +Message-Id: <20060409200735.822a1c30.khali@linux-fr.org> + +We could use the recently added PCI_CLASS_SERIAL_USB_UHCI, +PCI_CLASS_SERIAL_USB_OHCI and PCI_CLASS_SERIAL_USB_EHCI defines in +more places, for slightly shorter and clearer code. + +Signed-off-by: Jean Delvare <khali@linux-fr.org> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + arch/powerpc/platforms/powermac/pci.c | 2 +- + drivers/usb/host/ehci-pci.c | 2 +- + drivers/usb/host/ohci-pci.c | 2 +- + drivers/usb/host/uhci-hcd.c | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +--- gregkh-2.6.orig/arch/powerpc/platforms/powermac/pci.c ++++ gregkh-2.6/arch/powerpc/platforms/powermac/pci.c +@@ -1098,7 +1098,7 @@ pmac_pci_enable_device_hook(struct pci_d + * (iBook second controller) + */ + if (dev->vendor == PCI_VENDOR_ID_APPLE +- && (dev->class == ((PCI_CLASS_SERIAL_USB << 8) | 0x10)) ++ && dev->class == PCI_CLASS_SERIAL_USB_OHCI + && !node) { + printk(KERN_INFO "Apple USB OHCI %s disabled by firmware\n", + pci_name(dev)); +--- gregkh-2.6.orig/drivers/usb/host/ehci-pci.c ++++ gregkh-2.6/drivers/usb/host/ehci-pci.c +@@ -350,7 +350,7 @@ static const struct hc_driver ehci_pci_h + /* PCI driver selection metadata; PCI hotplugging uses this */ + static const struct pci_device_id pci_ids [] = { { + /* handle any USB 2.0 EHCI controller */ +- PCI_DEVICE_CLASS(((PCI_CLASS_SERIAL_USB << 8) | 0x20), ~0), ++ PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_EHCI, ~0), + .driver_data = (unsigned long) &ehci_pci_hc_driver, + }, + { /* end: all zeroes */ } +--- gregkh-2.6.orig/drivers/usb/host/ohci-pci.c ++++ gregkh-2.6/drivers/usb/host/ohci-pci.c +@@ -206,7 +206,7 @@ static const struct hc_driver ohci_pci_h + + static const struct pci_device_id pci_ids [] = { { + /* handle any USB OHCI controller */ +- PCI_DEVICE_CLASS((PCI_CLASS_SERIAL_USB << 8) | 0x10, ~0), ++ PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_OHCI, ~0), + .driver_data = (unsigned long) &ohci_pci_hc_driver, + }, { /* end: all zeroes */ } + }; +--- gregkh-2.6.orig/drivers/usb/host/uhci-hcd.c ++++ gregkh-2.6/drivers/usb/host/uhci-hcd.c +@@ -858,7 +858,7 @@ static const struct hc_driver uhci_drive + + static const struct pci_device_id uhci_pci_ids[] = { { + /* handle any USB UHCI controller */ +- PCI_DEVICE_CLASS(((PCI_CLASS_SERIAL_USB << 8) | 0x00), ~0), ++ PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_UHCI, ~0), + .driver_data = (unsigned long) &uhci_driver, + }, { /* end: all zeroes */ } + }; |