diff options
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/class/usbtmc.c | 8 | ||||
-rw-r--r-- | drivers/usb/core/hub.c | 14 | ||||
-rw-r--r-- | drivers/usb/core/port.c | 13 | ||||
-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-plat.c | 2 | ||||
-rw-r--r-- | drivers/usb/host/xhci.c | 8 | ||||
-rw-r--r-- | drivers/usb/host/xhci.h | 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 |
16 files changed, 72 insertions, 59 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/hub.c b/drivers/usb/core/hub.c index 5d6d28a76e0a..175179eb17ee 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -3054,19 +3054,9 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg) | |||
3054 | usb_set_device_state(udev, USB_STATE_SUSPENDED); | 3054 | usb_set_device_state(udev, USB_STATE_SUSPENDED); |
3055 | } | 3055 | } |
3056 | 3056 | ||
3057 | /* | ||
3058 | * Check whether current status meets the requirement of | ||
3059 | * usb port power off mechanism | ||
3060 | */ | ||
3061 | if (status == 0 && !udev->do_remote_wakeup && udev->persist_enabled) { | 3057 | if (status == 0 && !udev->do_remote_wakeup && udev->persist_enabled) { |
3062 | enum pm_qos_flags_status pm_qos_stat; | 3058 | pm_runtime_put_sync(&port_dev->dev); |
3063 | 3059 | port_dev->did_runtime_put = true; | |
3064 | pm_qos_stat = dev_pm_qos_flags(&port_dev->dev, | ||
3065 | PM_QOS_FLAG_NO_POWER_OFF); | ||
3066 | if (pm_qos_stat != PM_QOS_FLAGS_ALL) { | ||
3067 | pm_runtime_put_sync(&port_dev->dev); | ||
3068 | port_dev->did_runtime_put = true; | ||
3069 | } | ||
3070 | } | 3060 | } |
3071 | 3061 | ||
3072 | usb_mark_last_busy(hub->hdev); | 3062 | usb_mark_last_busy(hub->hdev); |
diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c index d6b0fadf53e9..9909911665ce 100644 --- a/drivers/usb/core/port.c +++ b/drivers/usb/core/port.c | |||
@@ -89,22 +89,19 @@ static int usb_port_runtime_resume(struct device *dev) | |||
89 | retval = usb_hub_set_port_power(hdev, hub, port1, true); | 89 | retval = usb_hub_set_port_power(hdev, hub, port1, true); |
90 | if (port_dev->child && !retval) { | 90 | if (port_dev->child && !retval) { |
91 | /* | 91 | /* |
92 | * Wait for usb hub port to be reconnected in order to make | 92 | * Attempt to wait for usb hub port to be reconnected in order |
93 | * the resume procedure successful. | 93 | * to make the resume procedure successful. The device may have |
94 | * disconnected while the port was powered off, so ignore the | ||
95 | * return status. | ||
94 | */ | 96 | */ |
95 | retval = hub_port_debounce_be_connected(hub, port1); | 97 | retval = hub_port_debounce_be_connected(hub, port1); |
96 | if (retval < 0) { | 98 | if (retval < 0) |
97 | dev_dbg(&port_dev->dev, "can't get reconnection after setting port power on, status %d\n", | 99 | dev_dbg(&port_dev->dev, "can't get reconnection after setting port power on, status %d\n", |
98 | retval); | 100 | retval); |
99 | goto out; | ||
100 | } | ||
101 | usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE); | 101 | usb_clear_port_feature(hdev, port1, USB_PORT_FEAT_C_ENABLE); |
102 | |||
103 | /* Set return value to 0 if debounce successful */ | ||
104 | retval = 0; | 102 | retval = 0; |
105 | } | 103 | } |
106 | 104 | ||
107 | out: | ||
108 | clear_bit(port1, hub->busy_bits); | 105 | clear_bit(port1, hub->busy_bits); |
109 | usb_autopm_put_interface(intf); | 106 | usb_autopm_put_interface(intf); |
110 | return retval; | 107 | return retval; |
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-plat.c b/drivers/usb/host/xhci-plat.c index be5e70d2300c..d9c169f470d3 100644 --- a/drivers/usb/host/xhci-plat.c +++ b/drivers/usb/host/xhci-plat.c | |||
@@ -26,7 +26,7 @@ static void xhci_plat_quirks(struct device *dev, struct xhci_hcd *xhci) | |||
26 | * here that the generic code does not try to make a pci_dev from our | 26 | * here that the generic code does not try to make a pci_dev from our |
27 | * dev struct in order to setup MSI | 27 | * dev struct in order to setup MSI |
28 | */ | 28 | */ |
29 | xhci->quirks |= XHCI_BROKEN_MSI; | 29 | xhci->quirks |= XHCI_PLAT; |
30 | } | 30 | } |
31 | 31 | ||
32 | /* called during probe() after chip reset completes */ | 32 | /* called during probe() after chip reset completes */ |
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 7299b591a341..ba0ec0a96481 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" |
@@ -347,9 +348,14 @@ static void __maybe_unused xhci_msix_sync_irqs(struct xhci_hcd *xhci) | |||
347 | static int xhci_try_enable_msi(struct usb_hcd *hcd) | 348 | static int xhci_try_enable_msi(struct usb_hcd *hcd) |
348 | { | 349 | { |
349 | struct xhci_hcd *xhci = hcd_to_xhci(hcd); | 350 | struct xhci_hcd *xhci = hcd_to_xhci(hcd); |
350 | struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); | 351 | struct pci_dev *pdev; |
351 | int ret; | 352 | int ret; |
352 | 353 | ||
354 | /* The xhci platform device has set up IRQs through usb_add_hcd. */ | ||
355 | if (xhci->quirks & XHCI_PLAT) | ||
356 | return 0; | ||
357 | |||
358 | pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); | ||
353 | /* | 359 | /* |
354 | * Some Fresco Logic host controllers advertise MSI, but fail to | 360 | * Some Fresco Logic host controllers advertise MSI, but fail to |
355 | * generate interrupts. Don't even try to enable MSI. | 361 | * generate interrupts. Don't even try to enable MSI. |
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index d2045916531b..46aa14894148 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h | |||
@@ -1537,6 +1537,7 @@ struct xhci_hcd { | |||
1537 | #define XHCI_SPURIOUS_REBOOT (1 << 13) | 1537 | #define XHCI_SPURIOUS_REBOOT (1 << 13) |
1538 | #define XHCI_COMP_MODE_QUIRK (1 << 14) | 1538 | #define XHCI_COMP_MODE_QUIRK (1 << 14) |
1539 | #define XHCI_AVOID_BEI (1 << 15) | 1539 | #define XHCI_AVOID_BEI (1 << 15) |
1540 | #define XHCI_PLAT (1 << 16) | ||
1540 | unsigned int num_active_eps; | 1541 | unsigned int num_active_eps; |
1541 | unsigned int limit_active_eps; | 1542 | unsigned int limit_active_eps; |
1542 | /* There are two roothubs to keep track of bus suspend info for */ | 1543 | /* There are two roothubs to keep track of bus suspend info for */ |
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 f5c81afc6e96..cef940f4de7c 100644 --- a/drivers/usb/wusbcore/wa-xfer.c +++ b/drivers/usb/wusbcore/wa-xfer.c | |||
@@ -1231,6 +1231,12 @@ int wa_urb_dequeue(struct wahc *wa, struct urb *urb) | |||
1231 | } | 1231 | } |
1232 | spin_lock_irqsave(&xfer->lock, flags); | 1232 | spin_lock_irqsave(&xfer->lock, flags); |
1233 | rpipe = xfer->ep->hcpriv; | 1233 | rpipe = xfer->ep->hcpriv; |
1234 | if (rpipe == NULL) { | ||
1235 | pr_debug("%s: xfer id 0x%08X has no RPIPE. %s", | ||
1236 | __func__, wa_xfer_id(xfer), | ||
1237 | "Probably already aborted.\n" ); | ||
1238 | goto out_unlock; | ||
1239 | } | ||
1234 | /* Check the delayed list -> if there, release and complete */ | 1240 | /* Check the delayed list -> if there, release and complete */ |
1235 | spin_lock_irqsave(&wa->xfer_list_lock, flags2); | 1241 | spin_lock_irqsave(&wa->xfer_list_lock, flags2); |
1236 | if (!list_empty(&xfer->list_node) && xfer->seg == NULL) | 1242 | if (!list_empty(&xfer->list_node) && xfer->seg == NULL) |
@@ -1649,8 +1655,7 @@ static void wa_xfer_result_cb(struct urb *urb) | |||
1649 | break; | 1655 | break; |
1650 | } | 1656 | } |
1651 | usb_status = xfer_result->bTransferStatus & 0x3f; | 1657 | usb_status = xfer_result->bTransferStatus & 0x3f; |
1652 | if (usb_status == WA_XFER_STATUS_ABORTED | 1658 | if (usb_status == WA_XFER_STATUS_NOT_FOUND) |
1653 | || usb_status == WA_XFER_STATUS_NOT_FOUND) | ||
1654 | /* taken care of already */ | 1659 | /* taken care of already */ |
1655 | break; | 1660 | break; |
1656 | xfer_id = xfer_result->dwTransferID; | 1661 | xfer_id = xfer_result->dwTransferID; |