diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-08-18 23:33:01 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-08-18 23:33:01 -0400 |
commit | bd479f293370d863953aba59130bcc7ae867dd10 (patch) | |
tree | b6987c9c622d1f98b680d6fce1447972d717761c /drivers/usb | |
parent | 68c91d377c9bd14cbe35c647ed3b847f7862c958 (diff) | |
parent | b36f4be3de1b123d8601de062e7dbfc904f305fb (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.c | 8 | ||||
-rw-r--r-- | drivers/usb/core/quirks.c | 6 | ||||
-rw-r--r-- | drivers/usb/host/ehci-sched.c | 13 | ||||
-rw-r--r-- | drivers/usb/host/xhci-mem.c | 1 | ||||
-rw-r--r-- | drivers/usb/host/xhci.c | 1 | ||||
-rw-r--r-- | drivers/usb/misc/adutux.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/keyspan.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/mos7720.c | 21 | ||||
-rw-r--r-- | drivers/usb/serial/mos7840.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/ti_usb_3410_5052.c | 9 | ||||
-rw-r--r-- | drivers/usb/serial/usb_wwan.c | 20 | ||||
-rw-r--r-- | drivers/usb/wusbcore/wa-xfer.c | 9 |
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)); |
788 | exit: | 788 | exit: |
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 | ||
95 | enum mos7715_pp_modes { | 96 | enum 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) | |||
2145 | static int mos7840_probe(struct usb_serial *serial, | 2145 | static 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; |