diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2009-05-12 17:21:30 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-05-12 17:21:30 -0700 |
| commit | 9252aca69ce10cfcb18ef414215ad966556e726d (patch) | |
| tree | 440c9e06124a7b3bf8a98553b55bdea12d1187ba /usb | |
| parent | 0dd3f848f7ce8d5c881a2f57a7e29380bc6a82ad (diff) | |
| download | patches-9252aca69ce10cfcb18ef414215ad966556e726d.tar.gz | |
sierra driver updates
Diffstat (limited to 'usb')
3 files changed, 201 insertions, 0 deletions
diff --git a/usb/usb-serial-sierra-driver-interrupt-urb-resubmit-fix.patch b/usb/usb-serial-sierra-driver-interrupt-urb-resubmit-fix.patch new file mode 100644 index 00000000000000..2729814e5fd552 --- /dev/null +++ b/usb/usb-serial-sierra-driver-interrupt-urb-resubmit-fix.patch @@ -0,0 +1,53 @@ +From epasheva@sierrawireless.com Tue May 12 17:14:07 2009 +From: Elina Pasheva <epasheva@sierrawireless.com> +Date: Tue, 12 May 2009 13:12:37 -0700 +Subject: USB: serial: sierra driver interrupt urb resubmit fix +To: <gregkh@suse.de> +Cc: <epasheva@sierrawireless.com>, <rfiler@sierrawireless.com> +Message-ID: <1242159157.7032.17.camel@Linuxdev3> + + +From: Elina Pasheva <epasheva@sierrawireless.com> + +- Fixed a problem when re-submitting urb from interrupt callback in + function sierra_instat_callback(). This suppresses also issuing of + error messages in /var/log/kern.log +- Removed redundant debug message at the beginning of + sierra_instat_callback() function +- Changed a debug message to be an error message + +Signed-off-by: Elina Pasheva <epasheva@sierrawireless.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + + + +--- + drivers/usb/serial/sierra.c | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +--- a/drivers/usb/serial/sierra.c ++++ b/drivers/usb/serial/sierra.c +@@ -510,7 +510,6 @@ static void sierra_instat_callback(struc + struct sierra_port_private *portdata = usb_get_serial_port_data(port); + struct usb_serial *serial = port->serial; + +- dev_dbg(&port->dev, "%s\n", __func__); + dev_dbg(&port->dev, "%s: urb %p port %p has data %p\n", __func__, + urb, port, portdata); + +@@ -554,12 +553,12 @@ static void sierra_instat_callback(struc + dev_dbg(&port->dev, "%s: error %d\n", __func__, status); + + /* Resubmit urb so we continue receiving IRQ data */ +- if (status != -ESHUTDOWN) { ++ if (port->port.count && status != -ESHUTDOWN && status != -ENOENT) { + urb->dev = serial->dev; + err = usb_submit_urb(urb, GFP_ATOMIC); + if (err) +- dev_dbg(&port->dev, "%s: resubmit intr urb " +- "failed. (%d)\n", __func__, err); ++ dev_err(&port->dev, "%s: resubmit intr urb " ++ "failed. (%d)\n", __func__, err); + } + } + diff --git a/usb/usb-serial-sierra-driver-sierra_calc_num_ports-fix.patch b/usb/usb-serial-sierra-driver-sierra_calc_num_ports-fix.patch new file mode 100644 index 00000000000000..dfb6dffbae88e3 --- /dev/null +++ b/usb/usb-serial-sierra-driver-sierra_calc_num_ports-fix.patch @@ -0,0 +1,104 @@ +From epasheva@sierrawireless.com Tue May 12 17:14:37 2009 +From: Elina Pasheva <epasheva@sierrawireless.com> +Date: Tue, 12 May 2009 13:12:54 -0700 +Subject: USB: serial: sierra driver sierra_calc_num_ports() fix +To: <gregkh@suse.de> +Cc: <rfiler@sierrawireless.com>, <epasheva@sierrawireless.com> +Message-ID: <1242159174.7032.19.camel@Linuxdev3> + + +From: Elina Pasheva <epasheva@sierrawireless.com> + +- Removed potential kernel oops from sierra_calc_num_ports() function. + Calling this function twice would likely have caused an oops because + the function releases allocated memory after the first call. +- Modified sierra_probe() function to reflect the changes in + sierra_calc_num_ports(). + +Signed-off-by: Elina Pasheva <epasheva@sierrawireless.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/serial/sierra.c | 49 ++++++++++++-------------------------------- + 1 file changed, 14 insertions(+), 35 deletions(-) + +--- a/drivers/usb/serial/sierra.c ++++ b/drivers/usb/serial/sierra.c +@@ -79,18 +79,22 @@ static int sierra_vsc_set_nmea(struct us + + static int sierra_calc_num_ports(struct usb_serial *serial) + { +- int result; +- int *num_ports = usb_get_serial_data(serial); +- dev_dbg(&serial->dev->dev, "%s\n", __func__); ++ int num_ports = 0; ++ u8 ifnum, numendpoints; + +- result = *num_ports; ++ dev_dbg(&serial->dev->dev, "%s\n", __func__); + +- if (result) { +- kfree(num_ports); +- usb_set_serial_data(serial, NULL); +- } ++ ifnum = serial->interface->cur_altsetting->desc.bInterfaceNumber; ++ numendpoints = serial->interface->cur_altsetting->desc.bNumEndpoints; + +- return result; ++ /* Dummy interface present on some SKUs should be ignored */ ++ if (ifnum == 0x99) ++ num_ports = 0; ++ else if (numendpoints <= 3) ++ num_ports = 1; ++ else ++ num_ports = (numendpoints-1)/2; ++ return num_ports; + } + + static int sierra_calc_interface(struct usb_serial *serial) +@@ -119,23 +123,12 @@ static int sierra_probe(struct usb_seria + { + int result = 0; + struct usb_device *udev; +- int *num_ports; + u8 ifnum; +- u8 numendpoints; +- +- dev_dbg(&serial->dev->dev, "%s\n", __func__); + +- num_ports = kmalloc(sizeof(*num_ports), GFP_KERNEL); +- if (!num_ports) +- return -ENOMEM; +- +- ifnum = serial->interface->cur_altsetting->desc.bInterfaceNumber; +- numendpoints = serial->interface->cur_altsetting->desc.bNumEndpoints; + udev = serial->dev; ++ dev_dbg(&udev->dev, "%s\n", __func__); + +- /* Figure out the interface number from the serial structure */ + ifnum = sierra_calc_interface(serial); +- + /* + * If this interface supports more than 1 alternate + * select the 2nd one +@@ -147,20 +140,6 @@ static int sierra_probe(struct usb_seria + usb_set_interface(udev, ifnum, 1); + } + +- /* Dummy interface present on some SKUs should be ignored */ +- if (ifnum == 0x99) +- *num_ports = 0; +- else if (numendpoints <= 3) +- *num_ports = 1; +- else +- *num_ports = (numendpoints-1)/2; +- +- /* +- * save off our num_ports info so that we can use it in the +- * calc_num_ports callback +- */ +- usb_set_serial_data(serial, (void *)num_ports); +- + return result; + } + diff --git a/usb/usb-serial-sierra-driver-zero-length-packet-fix.patch b/usb/usb-serial-sierra-driver-zero-length-packet-fix.patch new file mode 100644 index 00000000000000..f8c64ca80d6c36 --- /dev/null +++ b/usb/usb-serial-sierra-driver-zero-length-packet-fix.patch @@ -0,0 +1,44 @@ +From epasheva@sierrawireless.com Tue May 12 17:13:35 2009 +From: Elina Pasheva <epasheva@sierrawireless.com> +Date: Tue, 12 May 2009 13:12:24 -0700 +Subject: USB: serial: sierra driver zero length packet fix +To: <gregkh@suse.de> +Cc: <rfiler@sierrawireless.com>, <epasheva@sierrawireless.com> +Message-ID: <1242159144.7032.15.camel@Linuxdev3> + +From: Elina Pasheva <epasheva@sierrawireless.com> + +- Fixed a problem with transferring packets with size a multiple of Bulk + Xfer size in function sierra_write(). Added transfer flag + URB_ZERO_PACKET before submitting the urb to trigger Zero-length data + transfer when packet size is a multiple of Bulk Xfer. + +Signed-off-by: Elina Pasheva <epasheva@sierrawireless.com> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + + +--- + drivers/usb/serial/sierra.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +--- a/drivers/usb/serial/sierra.c ++++ b/drivers/usb/serial/sierra.c +@@ -17,7 +17,7 @@ + Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> + */ + +-#define DRIVER_VERSION "v.1.3.6" ++#define DRIVER_VERSION "v.1.3.7" + #define DRIVER_AUTHOR "Kevin Lloyd, Elina Pasheva, Matthew Safar, Rory Filer" + #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" + +@@ -428,6 +428,9 @@ static int sierra_write(struct tty_struc + port->bulk_out_endpointAddress), + buffer, writesize, sierra_outdat_callback, port); + ++ /* Handle the need to send a zero length packet */ ++ urb->transfer_flags |= URB_ZERO_PACKET; ++ + /* send it down the pipe */ + retval = usb_submit_urb(urb, GFP_ATOMIC); + if (retval) { |
