aboutsummaryrefslogtreecommitdiffstats
path: root/usb
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-05-01 22:35:35 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2006-05-01 22:35:35 -0700
commit0122ac03f9cea48e9120a796d1a315bd833adc7e (patch)
tree92e3582a1ecb13a40eb08e1acf338dc40eb08ff1 /usb
parent2cdd2bd9854b9b39cc785426f77e7e71622a9a16 (diff)
downloadpatches-0122ac03f9cea48e9120a796d1a315bd833adc7e.tar.gz
usb patches added
Diffstat (limited to 'usb')
-rw-r--r--usb/usb-clean-out-an-unnecessary-null-check-from-ub.patch2
-rw-r--r--usb/usb-console-fix-disconnection-issues.patch145
-rw-r--r--usb/usb-fix-bug-in-ohci-hcd.c-ohci_restart.patch31
-rw-r--r--usb/usb-pegasus-fixes.patch113
-rw-r--r--usb/usb-serial-dynamic-id.patch8
-rw-r--r--usb/usbatm-change-the-default-speedtouch-iso-altsetting.patch34
-rw-r--r--usb/usbatm-fix-modinfo-output.patch47
-rw-r--r--usb/usbatm-remove-no-longer-needed-include.patch29
-rw-r--r--usb/usbatm-remove-pointless-inline.patch29
9 files changed, 433 insertions, 5 deletions
diff --git a/usb/usb-clean-out-an-unnecessary-null-check-from-ub.patch b/usb/usb-clean-out-an-unnecessary-null-check-from-ub.patch
index 059bf6df4ceeb7..2b01544d264415 100644
--- a/usb/usb-clean-out-an-unnecessary-null-check-from-ub.patch
+++ b/usb/usb-clean-out-an-unnecessary-null-check-from-ub.patch
@@ -17,7 +17,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- gregkh-2.6.orig/drivers/block/ub.c
+++ gregkh-2.6/drivers/block/ub.c
-@@ -1646,15 +1646,11 @@ static void ub_revalidate(struct ub_dev
+@@ -1648,15 +1648,11 @@ static void ub_revalidate(struct ub_dev
static int ub_bd_open(struct inode *inode, struct file *filp)
{
struct gendisk *disk = inode->i_bdev->bd_disk;
diff --git a/usb/usb-console-fix-disconnection-issues.patch b/usb/usb-console-fix-disconnection-issues.patch
new file mode 100644
index 00000000000000..55fc79b559eb07
--- /dev/null
+++ b/usb/usb-console-fix-disconnection-issues.patch
@@ -0,0 +1,145 @@
+From g.liakhovetski@gmx.de Mon Apr 24 22:46:27 2006
+Date: Tue, 25 Apr 2006 07:46:17 +0200 (CEST)
+From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+To: Greg KH <greg@kroah.com>
+cc: Paul Fulghum <paulkf@microgate.com>
+Subject: USB console: fix disconnection issues
+Message-ID: <Pine.LNX.4.60.0604250744480.3932@poirot.grange>
+
+Prevent sending further output to a USB-serial console after the dongle is
+disconnected, take care not to leak kref.
+
+Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/console.c | 17 +++++++++++++++--
+ drivers/usb/serial/usb-serial.c | 16 +++++++++++-----
+ drivers/usb/serial/usb-serial.h | 3 +++
+ 3 files changed, 29 insertions(+), 7 deletions(-)
+
+--- gregkh-2.6.orig/drivers/usb/serial/console.c
++++ gregkh-2.6/drivers/usb/serial/console.c
+@@ -202,7 +202,7 @@ static void usb_console_write(struct con
+ struct usb_serial *serial;
+ int retval = -ENODEV;
+
+- if (!port)
++ if (!port || port->serial->dev->state == USB_STATE_NOTATTACHED)
+ return;
+ serial = port->serial;
+
+@@ -255,6 +255,14 @@ static struct console usbcons = {
+ .index = -1,
+ };
+
++void usb_serial_console_disconnect(struct usb_serial *serial)
++{
++ if (serial && serial->port && serial->port[0] && serial->port[0] == usbcons_info.port) {
++ usb_serial_console_exit();
++ usb_serial_put(serial);
++ }
++}
++
+ void usb_serial_console_init (int serial_debug, int minor)
+ {
+ debug = serial_debug;
+@@ -280,6 +288,11 @@ void usb_serial_console_init (int serial
+
+ void usb_serial_console_exit (void)
+ {
+- unregister_console(&usbcons);
++ if (usbcons_info.port) {
++ unregister_console(&usbcons);
++ if (usbcons_info.port->open_count)
++ usbcons_info.port->open_count--;
++ usbcons_info.port = NULL;
++ }
+ }
+
+--- gregkh-2.6.orig/drivers/usb/serial/usb-serial.c
++++ gregkh-2.6/drivers/usb/serial/usb-serial.c
+@@ -168,6 +168,11 @@ static void destroy_serial(struct kref *
+ kfree (serial);
+ }
+
++void usb_serial_put(struct usb_serial *serial)
++{
++ kref_put(&serial->kref, destroy_serial);
++}
++
+ /*****************************************************************************
+ * Driver tty interface functions
+ *****************************************************************************/
+@@ -225,7 +230,7 @@ static int serial_open (struct tty_struc
+ bailout_module_put:
+ module_put(serial->type->driver.owner);
+ bailout_kref_put:
+- kref_put(&serial->kref, destroy_serial);
++ usb_serial_put(serial);
+ port->open_count = 0;
+ mutex_unlock(&port->mutex);
+ return retval;
+@@ -263,7 +268,7 @@ static void serial_close(struct tty_stru
+ }
+
+ mutex_unlock(&port->mutex);
+- kref_put(&port->serial->kref, destroy_serial);
++ usb_serial_put(port->serial);
+ }
+
+ static int serial_write (struct tty_struct * tty, const unsigned char *buf, int count)
+@@ -271,7 +276,7 @@ static int serial_write (struct tty_stru
+ struct usb_serial_port *port = tty->driver_data;
+ int retval = -EINVAL;
+
+- if (!port)
++ if (!port || port->serial->dev->state == USB_STATE_NOTATTACHED)
+ goto exit;
+
+ dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count);
+@@ -468,7 +473,7 @@ static int serial_read_proc (char *page,
+ begin += length;
+ length = 0;
+ }
+- kref_put(&serial->kref, destroy_serial);
++ usb_serial_put(serial);
+ }
+ *eof = 1;
+ done:
+@@ -980,6 +985,7 @@ void usb_serial_disconnect(struct usb_in
+ struct device *dev = &interface->dev;
+ struct usb_serial_port *port;
+
++ usb_serial_console_disconnect(serial);
+ dbg ("%s", __FUNCTION__);
+
+ usb_set_intfdata (interface, NULL);
+@@ -991,7 +997,7 @@ void usb_serial_disconnect(struct usb_in
+ }
+ /* let the last holder of this object
+ * cause it to be cleaned up */
+- kref_put(&serial->kref, destroy_serial);
++ usb_serial_put(serial);
+ }
+ dev_info(dev, "device disconnected\n");
+ }
+--- gregkh-2.6.orig/drivers/usb/serial/usb-serial.h
++++ gregkh-2.6/drivers/usb/serial/usb-serial.h
+@@ -248,13 +248,16 @@ extern int ezusb_set_reset (struct usb_s
+ #ifdef CONFIG_USB_SERIAL_CONSOLE
+ extern void usb_serial_console_init (int debug, int minor);
+ extern void usb_serial_console_exit (void);
++extern void usb_serial_console_disconnect(struct usb_serial *serial);
+ #else
+ static inline void usb_serial_console_init (int debug, int minor) { }
+ static inline void usb_serial_console_exit (void) { }
++static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
+ #endif
+
+ /* Functions needed by other parts of the usbserial core */
+ extern struct usb_serial *usb_serial_get_by_index (unsigned int minor);
++extern void usb_serial_put(struct usb_serial *serial);
+ extern int usb_serial_generic_open (struct usb_serial_port *port, struct file *filp);
+ extern int usb_serial_generic_write (struct usb_serial_port *port, const unsigned char *buf, int count);
+ extern void usb_serial_generic_close (struct usb_serial_port *port, struct file *filp);
diff --git a/usb/usb-fix-bug-in-ohci-hcd.c-ohci_restart.patch b/usb/usb-fix-bug-in-ohci-hcd.c-ohci_restart.patch
new file mode 100644
index 00000000000000..a2b8af371bf87e
--- /dev/null
+++ b/usb/usb-fix-bug-in-ohci-hcd.c-ohci_restart.patch
@@ -0,0 +1,31 @@
+From david-b@pacbell.net Wed Apr 26 15:02:08 2006
+From: David Brownell <david-b@pacbell.net>
+To: Greg KH <greg@kroah.com>
+Subject: USB: fix bug in ohci-hcd.c ohci_restart()
+Date: Wed, 26 Apr 2006 14:39:11 -0700
+Cc: Andreas Mohr <andi@rhlx01.fht-esslingen.de>
+Message-Id: <200604261439.11444.david-b@pacbell.net>
+
+
+A loop on a power-lost resume path used the wrong index.
+I suspect khubd has been working around such bugs.
+Noticed by Andreas Mohr <andi@rhlx01.fht-esslingen.de>.
+
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/host/ohci-hcd.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- gregkh-2.6.orig/drivers/usb/host/ohci-hcd.c
++++ gregkh-2.6/drivers/usb/host/ohci-hcd.c
+@@ -863,7 +863,7 @@ static int ohci_restart (struct ohci_hcd
+ i = ohci->num_ports;
+ while (i--)
+ ohci_writel (ohci, RH_PS_PSS,
+- &ohci->regs->roothub.portstatus [temp]);
++ &ohci->regs->roothub.portstatus [i]);
+ ohci_dbg (ohci, "restart complete\n");
+ }
+ return 0;
diff --git a/usb/usb-pegasus-fixes.patch b/usb/usb-pegasus-fixes.patch
new file mode 100644
index 00000000000000..cfffde2f57aca4
--- /dev/null
+++ b/usb/usb-pegasus-fixes.patch
@@ -0,0 +1,113 @@
+From david-b@pacbell.net Mon May 1 14:05:11 2006
+From: David Brownell <david-b@pacbell.net>
+To: Greg KH <greg@kroah.com>
+Subject: USB: pegasus fixes (logstorm, suspend)
+Date: Mon, 1 May 2006 14:02:45 -0700
+Cc: linux-usb-devel@lists.sourceforge.net
+Message-Id: <200605011402.45618.david-b@pacbell.net>
+
+Teach "pegasus" to handle a few of the disconnect fault paths
+without hundreds of usless syslog messages.
+
+Handle the carrier check workqueue entry even if the driver has
+not been opened.
+
+Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/net/pegasus.c | 20 +++++++++++++++-----
+ 1 file changed, 15 insertions(+), 5 deletions(-)
+
+--- gregkh-2.6.orig/drivers/usb/net/pegasus.c
++++ gregkh-2.6/drivers/usb/net/pegasus.c
+@@ -318,6 +318,8 @@ static int read_mii_word(pegasus_t * peg
+ set_register(pegasus, PhyCtrl, (indx | PHY_READ));
+ for (i = 0; i < REG_TIMEOUT; i++) {
+ ret = get_registers(pegasus, PhyCtrl, 1, data);
++ if (ret == -ESHUTDOWN)
++ goto fail;
+ if (data[0] & PHY_DONE)
+ break;
+ }
+@@ -326,6 +328,7 @@ static int read_mii_word(pegasus_t * peg
+ *regd = le16_to_cpu(regdi);
+ return ret;
+ }
++fail:
+ if (netif_msg_drv(pegasus))
+ dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__);
+
+@@ -354,12 +357,15 @@ static int write_mii_word(pegasus_t * pe
+ set_register(pegasus, PhyCtrl, (indx | PHY_WRITE));
+ for (i = 0; i < REG_TIMEOUT; i++) {
+ ret = get_registers(pegasus, PhyCtrl, 1, data);
++ if (ret == -ESHUTDOWN)
++ goto fail;
+ if (data[0] & PHY_DONE)
+ break;
+ }
+ if (i < REG_TIMEOUT)
+ return ret;
+
++fail:
+ if (netif_msg_drv(pegasus))
+ dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__);
+ return -ETIMEDOUT;
+@@ -387,6 +393,8 @@ static int read_eprom_word(pegasus_t * p
+ ret = get_registers(pegasus, EpromCtrl, 1, &tmp);
+ if (tmp & EPROM_DONE)
+ break;
++ if (ret == -ESHUTDOWN)
++ goto fail;
+ }
+ if (i < REG_TIMEOUT) {
+ ret = get_registers(pegasus, EpromData, 2, &retdatai);
+@@ -394,6 +402,7 @@ static int read_eprom_word(pegasus_t * p
+ return ret;
+ }
+
++fail:
+ if (netif_msg_drv(pegasus))
+ dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__);
+ return -ETIMEDOUT;
+@@ -433,12 +442,15 @@ static int write_eprom_word(pegasus_t *
+
+ for (i = 0; i < REG_TIMEOUT; i++) {
+ ret = get_registers(pegasus, EpromCtrl, 1, &tmp);
++ if (ret == -ESHUTDOWN)
++ goto fail;
+ if (tmp & EPROM_DONE)
+ break;
+ }
+ disable_eprom_write(pegasus);
+ if (i < REG_TIMEOUT)
+ return ret;
++fail:
+ if (netif_msg_drv(pegasus))
+ dev_warn(&pegasus->intf->dev, "fail %s\n", __FUNCTION__);
+ return -ETIMEDOUT;
+@@ -1378,9 +1390,8 @@ static int pegasus_suspend (struct usb_i
+ struct pegasus *pegasus = usb_get_intfdata(intf);
+
+ netif_device_detach (pegasus->net);
++ cancel_delayed_work(&pegasus->carrier_check);
+ if (netif_running(pegasus->net)) {
+- cancel_delayed_work(&pegasus->carrier_check);
+-
+ usb_kill_urb(pegasus->rx_urb);
+ usb_kill_urb(pegasus->intr_urb);
+ }
+@@ -1400,10 +1411,9 @@ static int pegasus_resume (struct usb_in
+ pegasus->intr_urb->status = 0;
+ pegasus->intr_urb->actual_length = 0;
+ intr_callback(pegasus->intr_urb, NULL);
+-
+- queue_delayed_work(pegasus_workqueue, &pegasus->carrier_check,
+- CARRIER_CHECK_DELAY);
+ }
++ queue_delayed_work(pegasus_workqueue, &pegasus->carrier_check,
++ CARRIER_CHECK_DELAY);
+ return 0;
+ }
+
diff --git a/usb/usb-serial-dynamic-id.patch b/usb/usb-serial-dynamic-id.patch
index 879186b0076cc9..37a9a2ef35e994 100644
--- a/usb/usb-serial-dynamic-id.patch
+++ b/usb/usb-serial-dynamic-id.patch
@@ -201,7 +201,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
.name = "usbserial",
.probe = usb_serial_probe,
.disconnect = usb_serial_disconnect,
-@@ -577,6 +577,39 @@ static struct usb_serial * create_serial
+@@ -582,6 +582,39 @@ static struct usb_serial * create_serial
return serial;
}
@@ -241,7 +241,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
static struct usb_serial_driver *search_serial_device(struct usb_interface *iface)
{
struct list_head *p;
-@@ -586,11 +619,9 @@ static struct usb_serial_driver *search_
+@@ -591,11 +624,9 @@ static struct usb_serial_driver *search_
/* Check if the usb id matches a known device */
list_for_each(p, &usb_serial_driver_list) {
t = list_entry(p, struct usb_serial_driver, driver_list);
@@ -255,7 +255,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
}
return NULL;
-@@ -642,7 +673,7 @@ int usb_serial_probe(struct usb_interfac
+@@ -647,7 +678,7 @@ int usb_serial_probe(struct usb_interfac
return -EIO;
}
@@ -274,7 +274,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
int (*probe) (struct usb_serial *serial, const struct usb_device_id *id);
int (*attach) (struct usb_serial *serial);
-@@ -270,6 +271,7 @@ extern int usb_serial_bus_register (stru
+@@ -273,6 +274,7 @@ extern int usb_serial_bus_register (stru
extern void usb_serial_bus_deregister (struct usb_serial_driver *device);
extern struct usb_serial_driver usb_serial_generic_device;
diff --git a/usb/usbatm-change-the-default-speedtouch-iso-altsetting.patch b/usb/usbatm-change-the-default-speedtouch-iso-altsetting.patch
new file mode 100644
index 00000000000000..cbc3bbc054f9f7
--- /dev/null
+++ b/usb/usbatm-change-the-default-speedtouch-iso-altsetting.patch
@@ -0,0 +1,34 @@
+From duncan.sands@math.u-psud.fr Fri Apr 28 09:44:22 2006
+From: Duncan Sands <duncan.sands@math.u-psud.fr>
+To: Greg KH <greg@kroah.com>
+Subject: USBATM: change the default speedtouch iso altsetting
+Date: Fri, 28 Apr 2006 18:44:06 +0200
+Cc: linux-usb-devel@lists.sourceforge.net
+Content-Disposition: inline
+Message-Id: <200604281844.06681.duncan.sands@math.u-psud.fr>
+
+The maximum possible bandwidth for a speedtouch modem is about 7Mbaud.
+You can only get this by using isochronous urbs (enable_isoc=1) and
+altsetting 3. With the current default altsetting of 2, the modem
+maxes out at about 4Mbaud. So change the default altsetting to 3
+when using isochronous urbs. It would be nice to base the altsetting
+on the detected line speed, but that's hard given the current design.
+
+Signed-off-by: Duncan Sands <baldrick@free.fr>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/atm/speedtch.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- gregkh-2.6.orig/drivers/usb/atm/speedtch.c
++++ gregkh-2.6/drivers/usb/atm/speedtch.c
+@@ -69,7 +69,7 @@ static const char speedtch_driver_name[]
+ #define RESUBMIT_DELAY 1000 /* milliseconds */
+
+ #define DEFAULT_BULK_ALTSETTING 1
+-#define DEFAULT_ISOC_ALTSETTING 2
++#define DEFAULT_ISOC_ALTSETTING 3
+ #define DEFAULT_DL_512_FIRST 0
+ #define DEFAULT_ENABLE_ISOC 0
+ #define DEFAULT_SW_BUFFERING 0
diff --git a/usb/usbatm-fix-modinfo-output.patch b/usb/usbatm-fix-modinfo-output.patch
new file mode 100644
index 00000000000000..72a954cf208b9e
--- /dev/null
+++ b/usb/usbatm-fix-modinfo-output.patch
@@ -0,0 +1,47 @@
+From duncan.sands@math.u-psud.fr Fri Apr 28 09:52:25 2006
+From: Duncan Sands <duncan.sands@math.u-psud.fr>
+To: Greg KH <greg@kroah.com>
+Subject: USBATM: fix modinfo output
+Cc: linux-usb-devel@lists.sourceforge.net
+Content-Disposition: inline
+Date: Fri, 28 Apr 2006 18:52:16 +0200
+Message-Id: <200604281852.17214.duncan.sands@math.u-psud.fr>
+
+Because of the way stringify works, using an expression
+like 64 * 1024 for UDSL_MAX_BUF_SIZE results in 64 * 1024
+turning up in the modinfo output instead of 65536. So use
+65536 directly (this was the only way I found of fixing this).
+
+Signed-off-by: Duncan Sands <baldrick@free.fr>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/atm/usbatm.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- gregkh-2.6.orig/drivers/usb/atm/usbatm.c
++++ gregkh-2.6/drivers/usb/atm/usbatm.c
+@@ -99,11 +99,11 @@ static const char usbatm_driver_name[] =
+
+ #define UDSL_MAX_RCV_URBS 16
+ #define UDSL_MAX_SND_URBS 16
+-#define UDSL_MAX_BUF_SIZE 64 * 1024 /* bytes */
++#define UDSL_MAX_BUF_SIZE 65536
+ #define UDSL_DEFAULT_RCV_URBS 4
+ #define UDSL_DEFAULT_SND_URBS 4
+-#define UDSL_DEFAULT_RCV_BUF_SIZE 64 * ATM_CELL_SIZE /* bytes */
+-#define UDSL_DEFAULT_SND_BUF_SIZE 64 * ATM_CELL_SIZE /* bytes */
++#define UDSL_DEFAULT_RCV_BUF_SIZE 3392 /* 64 * ATM_CELL_SIZE */
++#define UDSL_DEFAULT_SND_BUF_SIZE 3392 /* 64 * ATM_CELL_SIZE */
+
+ #define ATM_CELL_HEADER (ATM_CELL_SIZE - ATM_CELL_PAYLOAD)
+
+@@ -135,7 +135,7 @@ MODULE_PARM_DESC(rcv_buf_bytes,
+ module_param(snd_buf_bytes, uint, S_IRUGO);
+ MODULE_PARM_DESC(snd_buf_bytes,
+ "Size of the buffers used for transmission, in bytes (range: 1-"
+- __MODULE_STRING(UDSL_MAX_SND_BUF_SIZE) ", default: "
++ __MODULE_STRING(UDSL_MAX_BUF_SIZE) ", default: "
+ __MODULE_STRING(UDSL_DEFAULT_SND_BUF_SIZE) ")");
+
+
diff --git a/usb/usbatm-remove-no-longer-needed-include.patch b/usb/usbatm-remove-no-longer-needed-include.patch
new file mode 100644
index 00000000000000..eaf5cb91e277ee
--- /dev/null
+++ b/usb/usbatm-remove-no-longer-needed-include.patch
@@ -0,0 +1,29 @@
+From duncan.sands@math.u-psud.fr Fri Apr 28 09:59:04 2006
+From: Duncan Sands <duncan.sands@math.u-psud.fr>
+To: Greg KH <greg@kroah.com>
+Subject: USBATM: remove no-longer needed #include
+Cc: linux-usb-devel@lists.sourceforge.net
+Content-Disposition: inline
+Date: Fri, 28 Apr 2006 18:58:57 +0200
+Message-Id: <200604281858.57636.duncan.sands@math.u-psud.fr>
+
+We #include <linux/netdevice.h> only because <linux/etherdevice.h>
+needed it, but didn't #include it itself. But that's been fixed now.
+
+Signed-off-by: Duncan Sands <baldrick@free.fr>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/atm/xusbatm.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+--- gregkh-2.6.orig/drivers/usb/atm/xusbatm.c
++++ gregkh-2.6/drivers/usb/atm/xusbatm.c
+@@ -20,7 +20,6 @@
+ ******************************************************************************/
+
+ #include <linux/module.h>
+-#include <linux/netdevice.h> /* FIXME: required by linux/etherdevice.h */
+ #include <linux/etherdevice.h> /* for random_ether_addr() */
+
+ #include "usbatm.h"
diff --git a/usb/usbatm-remove-pointless-inline.patch b/usb/usbatm-remove-pointless-inline.patch
new file mode 100644
index 00000000000000..2b7b2b9987f612
--- /dev/null
+++ b/usb/usbatm-remove-pointless-inline.patch
@@ -0,0 +1,29 @@
+From duncan.sands@math.u-psud.fr Fri Apr 28 09:53:53 2006
+From: Duncan Sands <duncan.sands@math.u-psud.fr>
+To: Greg KH <greg@kroah.com>
+Subject: USBATM: remove pointless inline
+Cc: linux-usb-devel@lists.sourceforge.net
+Content-Disposition: inline
+Date: Fri, 28 Apr 2006 18:53:45 +0200
+Message-Id: <200604281853.45650.duncan.sands@math.u-psud.fr>
+
+Remove pointless inline.
+
+Signed-off-by: Duncan Sands <baldrick@free.fr>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/atm/usbatm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- gregkh-2.6.orig/drivers/usb/atm/usbatm.c
++++ gregkh-2.6/drivers/usb/atm/usbatm.c
+@@ -1039,7 +1039,7 @@ static void usbatm_tasklet_schedule(unsi
+ tasklet_schedule((struct tasklet_struct *) data);
+ }
+
+-static inline void usbatm_init_channel(struct usbatm_channel *channel)
++static void usbatm_init_channel(struct usbatm_channel *channel)
+ {
+ spin_lock_init(&channel->lock);
+ INIT_LIST_HEAD(&channel->list);