aboutsummaryrefslogtreecommitdiffstats
path: root/usb
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-04-24 15:34:09 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2006-04-24 15:34:09 -0700
commit4a076f7ffaae89e3f1c2ffecd147b79ae1e0bd9d (patch)
tree86bd89054c44670a82f2cfa1f7373cfc0898245c /usb
parent67c67eb735d985aadf3d63200ebb59147b9fa100 (diff)
downloadpatches-4a076f7ffaae89e3f1c2ffecd147b79ae1e0bd9d.tar.gz
lotsa patches added
Diffstat (limited to 'usb')
-rw-r--r--usb/usb-add-new-itegno-usb-cdma-1x-card-support-for-pl2303.patch38
-rw-r--r--usb/usb-allow-multiple-types-of-ehci-controllers-to-be-built-as-modules.patch343
-rw-r--r--usb/usb-net2280-check-for-shared-irqs.patch30
-rw-r--r--usb/usb-net2280-handle-stalls-for-0-length-control-in-requests.patch30
-rw-r--r--usb/usb-net2280-send-0-length-packets-for-ep0.patch31
-rw-r--r--usb/usb-net2280-set-driver-data-before-it-is-used.patch45
-rw-r--r--usb/usb-overrun-in-option-card-usb-driver.patch47
-rw-r--r--usb/usb-resource-leak-fix-for-whiteheat-driver.patch31
-rw-r--r--usb/usb-sisusbvga-possible-cleanups.patch225
-rw-r--r--usb/usb-storage-atmel-unusual-dev-update.patch40
-rw-r--r--usb/usb-storage-unusual-devs-update.patch32
-rw-r--r--usb/usb-use-new-pci_class_serial_usb_-defines.patch65
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 */ }
+ };