aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-08-18 23:33:01 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-08-18 23:33:01 -0400
commitbd479f293370d863953aba59130bcc7ae867dd10 (patch)
treeb6987c9c622d1f98b680d6fce1447972d717761c /drivers/usb
parent68c91d377c9bd14cbe35c647ed3b847f7862c958 (diff)
parentb36f4be3de1b123d8601de062e7dbfc904f305fb (diff)
Merge 3.11-rc6 into usb-next
We want these USB fixes in this branch as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/class/usbtmc.c8
-rw-r--r--drivers/usb/core/quirks.c6
-rw-r--r--drivers/usb/host/ehci-sched.c13
-rw-r--r--drivers/usb/host/xhci-mem.c1
-rw-r--r--drivers/usb/host/xhci.c1
-rw-r--r--drivers/usb/misc/adutux.c2
-rw-r--r--drivers/usb/serial/keyspan.c2
-rw-r--r--drivers/usb/serial/mos7720.c21
-rw-r--r--drivers/usb/serial/mos7840.c2
-rw-r--r--drivers/usb/serial/ti_usb_3410_5052.c9
-rw-r--r--drivers/usb/serial/usb_wwan.c20
-rw-r--r--drivers/usb/wusbcore/wa-xfer.c9
12 files changed, 57 insertions, 37 deletions
diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c
index 60dd8918aeb9..66c4001306f0 100644
--- a/drivers/usb/class/usbtmc.c
+++ b/drivers/usb/class/usbtmc.c
@@ -1117,11 +1117,11 @@ static int usbtmc_probe(struct usb_interface *intf,
1117 /* Determine if it is a Rigol or not */ 1117 /* Determine if it is a Rigol or not */
1118 data->rigol_quirk = 0; 1118 data->rigol_quirk = 0;
1119 dev_dbg(&intf->dev, "Trying to find if device Vendor 0x%04X Product 0x%04X has the RIGOL quirk\n", 1119 dev_dbg(&intf->dev, "Trying to find if device Vendor 0x%04X Product 0x%04X has the RIGOL quirk\n",
1120 data->usb_dev->descriptor.idVendor, 1120 le16_to_cpu(data->usb_dev->descriptor.idVendor),
1121 data->usb_dev->descriptor.idProduct); 1121 le16_to_cpu(data->usb_dev->descriptor.idProduct));
1122 for(n = 0; usbtmc_id_quirk[n].idVendor > 0; n++) { 1122 for(n = 0; usbtmc_id_quirk[n].idVendor > 0; n++) {
1123 if ((usbtmc_id_quirk[n].idVendor == data->usb_dev->descriptor.idVendor) && 1123 if ((usbtmc_id_quirk[n].idVendor == le16_to_cpu(data->usb_dev->descriptor.idVendor)) &&
1124 (usbtmc_id_quirk[n].idProduct == data->usb_dev->descriptor.idProduct)) { 1124 (usbtmc_id_quirk[n].idProduct == le16_to_cpu(data->usb_dev->descriptor.idProduct))) {
1125 dev_dbg(&intf->dev, "Setting this device as having the RIGOL quirk\n"); 1125 dev_dbg(&intf->dev, "Setting this device as having the RIGOL quirk\n");
1126 data->rigol_quirk = 1; 1126 data->rigol_quirk = 1;
1127 break; 1127 break;
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index a63598895077..5b44cd47da5b 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -78,6 +78,12 @@ static const struct usb_device_id usb_quirk_list[] = {
78 { USB_DEVICE(0x04d8, 0x000c), .driver_info = 78 { USB_DEVICE(0x04d8, 0x000c), .driver_info =
79 USB_QUIRK_CONFIG_INTF_STRINGS }, 79 USB_QUIRK_CONFIG_INTF_STRINGS },
80 80
81 /* CarrolTouch 4000U */
82 { USB_DEVICE(0x04e7, 0x0009), .driver_info = USB_QUIRK_RESET_RESUME },
83
84 /* CarrolTouch 4500U */
85 { USB_DEVICE(0x04e7, 0x0030), .driver_info = USB_QUIRK_RESET_RESUME },
86
81 /* Samsung Android phone modem - ID conflict with SPH-I500 */ 87 /* Samsung Android phone modem - ID conflict with SPH-I500 */
82 { USB_DEVICE(0x04e8, 0x6601), .driver_info = 88 { USB_DEVICE(0x04e8, 0x6601), .driver_info =
83 USB_QUIRK_CONFIG_INTF_STRINGS }, 89 USB_QUIRK_CONFIG_INTF_STRINGS },
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c
index 94388738a6f7..66310894ad97 100644
--- a/drivers/usb/host/ehci-sched.c
+++ b/drivers/usb/host/ehci-sched.c
@@ -1434,21 +1434,20 @@ iso_stream_schedule (
1434 1434
1435 /* Behind the scheduling threshold? */ 1435 /* Behind the scheduling threshold? */
1436 if (unlikely(start < next)) { 1436 if (unlikely(start < next)) {
1437 unsigned now2 = (now - base) & (mod - 1);
1437 1438
1438 /* USB_ISO_ASAP: Round up to the first available slot */ 1439 /* USB_ISO_ASAP: Round up to the first available slot */
1439 if (urb->transfer_flags & URB_ISO_ASAP) 1440 if (urb->transfer_flags & URB_ISO_ASAP)
1440 start += (next - start + period - 1) & -period; 1441 start += (next - start + period - 1) & -period;
1441 1442
1442 /* 1443 /*
1443 * Not ASAP: Use the next slot in the stream. If 1444 * Not ASAP: Use the next slot in the stream,
1444 * the entire URB falls before the threshold, fail. 1445 * no matter what.
1445 */ 1446 */
1446 else if (start + span - period < next) { 1447 else if (start + span - period < now2) {
1447 ehci_dbg(ehci, "iso urb late %p (%u+%u < %u)\n", 1448 ehci_dbg(ehci, "iso underrun %p (%u+%u < %u)\n",
1448 urb, start + base, 1449 urb, start + base,
1449 span - period, next + base); 1450 span - period, now2 + base);
1450 status = -EXDEV;
1451 goto fail;
1452 } 1451 }
1453 } 1452 }
1454 1453
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index b150360d1e78..53b972c2a09f 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -24,6 +24,7 @@
24#include <linux/pci.h> 24#include <linux/pci.h>
25#include <linux/slab.h> 25#include <linux/slab.h>
26#include <linux/dmapool.h> 26#include <linux/dmapool.h>
27#include <linux/dma-mapping.h>
27 28
28#include "xhci.h" 29#include "xhci.h"
29#include "xhci-trace.h" 30#include "xhci-trace.h"
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 7299b591a341..bf11af9a4699 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -27,6 +27,7 @@
27#include <linux/moduleparam.h> 27#include <linux/moduleparam.h>
28#include <linux/slab.h> 28#include <linux/slab.h>
29#include <linux/dmi.h> 29#include <linux/dmi.h>
30#include <linux/dma-mapping.h>
30 31
31#include "xhci.h" 32#include "xhci.h"
32#include "xhci-trace.h" 33#include "xhci-trace.h"
diff --git a/drivers/usb/misc/adutux.c b/drivers/usb/misc/adutux.c
index 7078e9bf0fc0..3eaa83f05086 100644
--- a/drivers/usb/misc/adutux.c
+++ b/drivers/usb/misc/adutux.c
@@ -783,7 +783,7 @@ static int adu_probe(struct usb_interface *interface,
783 783
784 /* let the user know what node this device is now attached to */ 784 /* let the user know what node this device is now attached to */
785 dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d\n", 785 dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d\n",
786 udev->descriptor.idProduct, dev->serial_number, 786 le16_to_cpu(udev->descriptor.idProduct), dev->serial_number,
787 (dev->minor - ADU_MINOR_BASE)); 787 (dev->minor - ADU_MINOR_BASE));
788exit: 788exit:
789 return retval; 789 return retval;
diff --git a/drivers/usb/serial/keyspan.c b/drivers/usb/serial/keyspan.c
index e731bbc166a0..d6960aebe246 100644
--- a/drivers/usb/serial/keyspan.c
+++ b/drivers/usb/serial/keyspan.c
@@ -2307,7 +2307,7 @@ static int keyspan_startup(struct usb_serial *serial)
2307 if (d_details == NULL) { 2307 if (d_details == NULL) {
2308 dev_err(&serial->dev->dev, "%s - unknown product id %x\n", 2308 dev_err(&serial->dev->dev, "%s - unknown product id %x\n",
2309 __func__, le16_to_cpu(serial->dev->descriptor.idProduct)); 2309 __func__, le16_to_cpu(serial->dev->descriptor.idProduct));
2310 return 1; 2310 return -ENODEV;
2311 } 2311 }
2312 2312
2313 /* Setup private data for serial driver */ 2313 /* Setup private data for serial driver */
diff --git a/drivers/usb/serial/mos7720.c b/drivers/usb/serial/mos7720.c
index 51da424327b0..b01300164fc0 100644
--- a/drivers/usb/serial/mos7720.c
+++ b/drivers/usb/serial/mos7720.c
@@ -90,6 +90,7 @@ struct urbtracker {
90 struct list_head urblist_entry; 90 struct list_head urblist_entry;
91 struct kref ref_count; 91 struct kref ref_count;
92 struct urb *urb; 92 struct urb *urb;
93 struct usb_ctrlrequest *setup;
93}; 94};
94 95
95enum mos7715_pp_modes { 96enum mos7715_pp_modes {
@@ -271,6 +272,7 @@ static void destroy_urbtracker(struct kref *kref)
271 struct mos7715_parport *mos_parport = urbtrack->mos_parport; 272 struct mos7715_parport *mos_parport = urbtrack->mos_parport;
272 273
273 usb_free_urb(urbtrack->urb); 274 usb_free_urb(urbtrack->urb);
275 kfree(urbtrack->setup);
274 kfree(urbtrack); 276 kfree(urbtrack);
275 kref_put(&mos_parport->ref_count, destroy_mos_parport); 277 kref_put(&mos_parport->ref_count, destroy_mos_parport);
276} 278}
@@ -355,7 +357,6 @@ static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport,
355 struct urbtracker *urbtrack; 357 struct urbtracker *urbtrack;
356 int ret_val; 358 int ret_val;
357 unsigned long flags; 359 unsigned long flags;
358 struct usb_ctrlrequest setup;
359 struct usb_serial *serial = mos_parport->serial; 360 struct usb_serial *serial = mos_parport->serial;
360 struct usb_device *usbdev = serial->dev; 361 struct usb_device *usbdev = serial->dev;
361 362
@@ -373,14 +374,20 @@ static int write_parport_reg_nonblock(struct mos7715_parport *mos_parport,
373 kfree(urbtrack); 374 kfree(urbtrack);
374 return -ENOMEM; 375 return -ENOMEM;
375 } 376 }
376 setup.bRequestType = (__u8)0x40; 377 urbtrack->setup = kmalloc(sizeof(*urbtrack->setup), GFP_KERNEL);
377 setup.bRequest = (__u8)0x0e; 378 if (!urbtrack->setup) {
378 setup.wValue = get_reg_value(reg, dummy); 379 usb_free_urb(urbtrack->urb);
379 setup.wIndex = get_reg_index(reg); 380 kfree(urbtrack);
380 setup.wLength = 0; 381 return -ENOMEM;
382 }
383 urbtrack->setup->bRequestType = (__u8)0x40;
384 urbtrack->setup->bRequest = (__u8)0x0e;
385 urbtrack->setup->wValue = get_reg_value(reg, dummy);
386 urbtrack->setup->wIndex = get_reg_index(reg);
387 urbtrack->setup->wLength = 0;
381 usb_fill_control_urb(urbtrack->urb, usbdev, 388 usb_fill_control_urb(urbtrack->urb, usbdev,
382 usb_sndctrlpipe(usbdev, 0), 389 usb_sndctrlpipe(usbdev, 0),
383 (unsigned char *)&setup, 390 (unsigned char *)urbtrack->setup,
384 NULL, 0, async_complete, urbtrack); 391 NULL, 0, async_complete, urbtrack);
385 kref_init(&urbtrack->ref_count); 392 kref_init(&urbtrack->ref_count);
386 INIT_LIST_HEAD(&urbtrack->urblist_entry); 393 INIT_LIST_HEAD(&urbtrack->urblist_entry);
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c
index dfa678906632..fdf953539c62 100644
--- a/drivers/usb/serial/mos7840.c
+++ b/drivers/usb/serial/mos7840.c
@@ -2145,7 +2145,7 @@ static int mos7810_check(struct usb_serial *serial)
2145static int mos7840_probe(struct usb_serial *serial, 2145static int mos7840_probe(struct usb_serial *serial,
2146 const struct usb_device_id *id) 2146 const struct usb_device_id *id)
2147{ 2147{
2148 u16 product = serial->dev->descriptor.idProduct; 2148 u16 product = le16_to_cpu(serial->dev->descriptor.idProduct);
2149 u8 *buf; 2149 u8 *buf;
2150 int device_type; 2150 int device_type;
2151 2151
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 5c07d55ece7a..760b78560f67 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -1463,14 +1463,15 @@ static int ti_download_firmware(struct ti_device *tdev)
1463 char buf[32]; 1463 char buf[32];
1464 1464
1465 /* try ID specific firmware first, then try generic firmware */ 1465 /* try ID specific firmware first, then try generic firmware */
1466 sprintf(buf, "ti_usb-v%04x-p%04x.fw", dev->descriptor.idVendor, 1466 sprintf(buf, "ti_usb-v%04x-p%04x.fw",
1467 dev->descriptor.idProduct); 1467 le16_to_cpu(dev->descriptor.idVendor),
1468 le16_to_cpu(dev->descriptor.idProduct));
1468 status = request_firmware(&fw_p, buf, &dev->dev); 1469 status = request_firmware(&fw_p, buf, &dev->dev);
1469 1470
1470 if (status != 0) { 1471 if (status != 0) {
1471 buf[0] = '\0'; 1472 buf[0] = '\0';
1472 if (dev->descriptor.idVendor == MTS_VENDOR_ID) { 1473 if (le16_to_cpu(dev->descriptor.idVendor) == MTS_VENDOR_ID) {
1473 switch (dev->descriptor.idProduct) { 1474 switch (le16_to_cpu(dev->descriptor.idProduct)) {
1474 case MTS_CDMA_PRODUCT_ID: 1475 case MTS_CDMA_PRODUCT_ID:
1475 strcpy(buf, "mts_cdma.fw"); 1476 strcpy(buf, "mts_cdma.fw");
1476 break; 1477 break;
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
index 8257d30c4072..85365784040b 100644
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -291,18 +291,18 @@ static void usb_wwan_indat_callback(struct urb *urb)
291 tty_flip_buffer_push(&port->port); 291 tty_flip_buffer_push(&port->port);
292 } else 292 } else
293 dev_dbg(dev, "%s: empty read urb received\n", __func__); 293 dev_dbg(dev, "%s: empty read urb received\n", __func__);
294 294 }
295 /* Resubmit urb so we continue receiving */ 295 /* Resubmit urb so we continue receiving */
296 err = usb_submit_urb(urb, GFP_ATOMIC); 296 err = usb_submit_urb(urb, GFP_ATOMIC);
297 if (err) { 297 if (err) {
298 if (err != -EPERM) { 298 if (err != -EPERM) {
299 dev_err(dev, "%s: resubmit read urb failed. (%d)\n", __func__, err); 299 dev_err(dev, "%s: resubmit read urb failed. (%d)\n",
300 /* busy also in error unless we are killed */ 300 __func__, err);
301 usb_mark_last_busy(port->serial->dev); 301 /* busy also in error unless we are killed */
302 }
303 } else {
304 usb_mark_last_busy(port->serial->dev); 302 usb_mark_last_busy(port->serial->dev);
305 } 303 }
304 } else {
305 usb_mark_last_busy(port->serial->dev);
306 } 306 }
307} 307}
308 308
diff --git a/drivers/usb/wusbcore/wa-xfer.c b/drivers/usb/wusbcore/wa-xfer.c
index 86dd3b65692f..6ad02f57c366 100644
--- a/drivers/usb/wusbcore/wa-xfer.c
+++ b/drivers/usb/wusbcore/wa-xfer.c
@@ -1279,6 +1279,12 @@ int wa_urb_dequeue(struct wahc *wa, struct urb *urb)
1279 } 1279 }
1280 spin_lock_irqsave(&xfer->lock, flags); 1280 spin_lock_irqsave(&xfer->lock, flags);
1281 rpipe = xfer->ep->hcpriv; 1281 rpipe = xfer->ep->hcpriv;
1282 if (rpipe == NULL) {
1283 pr_debug("%s: xfer id 0x%08X has no RPIPE. %s",
1284 __func__, wa_xfer_id(xfer),
1285 "Probably already aborted.\n" );
1286 goto out_unlock;
1287 }
1282 /* Check the delayed list -> if there, release and complete */ 1288 /* Check the delayed list -> if there, release and complete */
1283 spin_lock_irqsave(&wa->xfer_list_lock, flags2); 1289 spin_lock_irqsave(&wa->xfer_list_lock, flags2);
1284 if (!list_empty(&xfer->list_node) && xfer->seg == NULL) 1290 if (!list_empty(&xfer->list_node) && xfer->seg == NULL)
@@ -1717,8 +1723,7 @@ static void wa_xfer_result_cb(struct urb *urb)
1717 break; 1723 break;
1718 } 1724 }
1719 usb_status = xfer_result->bTransferStatus & 0x3f; 1725 usb_status = xfer_result->bTransferStatus & 0x3f;
1720 if (usb_status == WA_XFER_STATUS_ABORTED 1726 if (usb_status == WA_XFER_STATUS_NOT_FOUND)
1721 || usb_status == WA_XFER_STATUS_NOT_FOUND)
1722 /* taken care of already */ 1727 /* taken care of already */
1723 break; 1728 break;
1724 xfer_id = xfer_result->dwTransferID; 1729 xfer_id = xfer_result->dwTransferID;