diff options
Diffstat (limited to 'drivers/net/usb')
| -rw-r--r-- | drivers/net/usb/cdc_ether.c | 41 | ||||
| -rw-r--r-- | drivers/net/usb/ipheth.c | 5 | ||||
| -rw-r--r-- | drivers/net/usb/qmi_wwan.c | 55 | ||||
| -rw-r--r-- | drivers/net/usb/usbnet.c | 3 |
4 files changed, 89 insertions, 15 deletions
diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index a03de7197049..d0129827602b 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c | |||
| @@ -592,6 +592,32 @@ static const struct usb_device_id products [] = { | |||
| 592 | .driver_info = 0, | 592 | .driver_info = 0, |
| 593 | }, | 593 | }, |
| 594 | 594 | ||
| 595 | /* Novatel USB551L and MC551 - handled by qmi_wwan */ | ||
| 596 | { | ||
| 597 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | ||
| 598 | | USB_DEVICE_ID_MATCH_PRODUCT | ||
| 599 | | USB_DEVICE_ID_MATCH_INT_INFO, | ||
| 600 | .idVendor = NOVATEL_VENDOR_ID, | ||
| 601 | .idProduct = 0xB001, | ||
| 602 | .bInterfaceClass = USB_CLASS_COMM, | ||
| 603 | .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, | ||
| 604 | .bInterfaceProtocol = USB_CDC_PROTO_NONE, | ||
| 605 | .driver_info = 0, | ||
| 606 | }, | ||
| 607 | |||
| 608 | /* Novatel E362 - handled by qmi_wwan */ | ||
| 609 | { | ||
| 610 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | ||
| 611 | | USB_DEVICE_ID_MATCH_PRODUCT | ||
| 612 | | USB_DEVICE_ID_MATCH_INT_INFO, | ||
| 613 | .idVendor = NOVATEL_VENDOR_ID, | ||
| 614 | .idProduct = 0x9010, | ||
| 615 | .bInterfaceClass = USB_CLASS_COMM, | ||
| 616 | .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, | ||
| 617 | .bInterfaceProtocol = USB_CDC_PROTO_NONE, | ||
| 618 | .driver_info = 0, | ||
| 619 | }, | ||
| 620 | |||
| 595 | /* | 621 | /* |
| 596 | * WHITELIST!!! | 622 | * WHITELIST!!! |
| 597 | * | 623 | * |
| @@ -604,21 +630,6 @@ static const struct usb_device_id products [] = { | |||
| 604 | * because of bugs/quirks in a given product (like Zaurus, above). | 630 | * because of bugs/quirks in a given product (like Zaurus, above). |
| 605 | */ | 631 | */ |
| 606 | { | 632 | { |
| 607 | /* Novatel USB551L */ | ||
| 608 | /* This match must come *before* the generic CDC-ETHER match so that | ||
| 609 | * we get FLAG_WWAN set on the device, since it's descriptors are | ||
| 610 | * generic CDC-ETHER. | ||
| 611 | */ | ||
| 612 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | ||
| 613 | | USB_DEVICE_ID_MATCH_PRODUCT | ||
| 614 | | USB_DEVICE_ID_MATCH_INT_INFO, | ||
| 615 | .idVendor = NOVATEL_VENDOR_ID, | ||
| 616 | .idProduct = 0xB001, | ||
| 617 | .bInterfaceClass = USB_CLASS_COMM, | ||
| 618 | .bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, | ||
| 619 | .bInterfaceProtocol = USB_CDC_PROTO_NONE, | ||
| 620 | .driver_info = (unsigned long)&wwan_info, | ||
| 621 | }, { | ||
| 622 | /* ZTE (Vodafone) K3805-Z */ | 633 | /* ZTE (Vodafone) K3805-Z */ |
| 623 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR | 634 | .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
| 624 | | USB_DEVICE_ID_MATCH_PRODUCT | 635 | | USB_DEVICE_ID_MATCH_PRODUCT |
diff --git a/drivers/net/usb/ipheth.c b/drivers/net/usb/ipheth.c index a28a983d465e..534d8becbbdc 100644 --- a/drivers/net/usb/ipheth.c +++ b/drivers/net/usb/ipheth.c | |||
| @@ -62,6 +62,7 @@ | |||
| 62 | #define USB_PRODUCT_IPAD 0x129a | 62 | #define USB_PRODUCT_IPAD 0x129a |
| 63 | #define USB_PRODUCT_IPHONE_4_VZW 0x129c | 63 | #define USB_PRODUCT_IPHONE_4_VZW 0x129c |
| 64 | #define USB_PRODUCT_IPHONE_4S 0x12a0 | 64 | #define USB_PRODUCT_IPHONE_4S 0x12a0 |
| 65 | #define USB_PRODUCT_IPHONE_5 0x12a8 | ||
| 65 | 66 | ||
| 66 | #define IPHETH_USBINTF_CLASS 255 | 67 | #define IPHETH_USBINTF_CLASS 255 |
| 67 | #define IPHETH_USBINTF_SUBCLASS 253 | 68 | #define IPHETH_USBINTF_SUBCLASS 253 |
| @@ -113,6 +114,10 @@ static struct usb_device_id ipheth_table[] = { | |||
| 113 | USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S, | 114 | USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_4S, |
| 114 | IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, | 115 | IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, |
| 115 | IPHETH_USBINTF_PROTO) }, | 116 | IPHETH_USBINTF_PROTO) }, |
| 117 | { USB_DEVICE_AND_INTERFACE_INFO( | ||
| 118 | USB_VENDOR_APPLE, USB_PRODUCT_IPHONE_5, | ||
| 119 | IPHETH_USBINTF_CLASS, IPHETH_USBINTF_SUBCLASS, | ||
| 120 | IPHETH_USBINTF_PROTO) }, | ||
| 116 | { } | 121 | { } |
| 117 | }; | 122 | }; |
| 118 | MODULE_DEVICE_TABLE(usb, ipheth_table); | 123 | MODULE_DEVICE_TABLE(usb, ipheth_table); |
diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c index 6883c371c59f..3b566fa0f8e6 100644 --- a/drivers/net/usb/qmi_wwan.c +++ b/drivers/net/usb/qmi_wwan.c | |||
| @@ -369,18 +369,73 @@ static const struct usb_device_id products[] = { | |||
| 369 | USB_VENDOR_AND_INTERFACE_INFO(0x106c, USB_CLASS_VENDOR_SPEC, 0xf1, 0xff), | 369 | USB_VENDOR_AND_INTERFACE_INFO(0x106c, USB_CLASS_VENDOR_SPEC, 0xf1, 0xff), |
| 370 | .driver_info = (unsigned long)&qmi_wwan_info, | 370 | .driver_info = (unsigned long)&qmi_wwan_info, |
| 371 | }, | 371 | }, |
| 372 | { /* Novatel USB551L and MC551 */ | ||
| 373 | USB_DEVICE_AND_INTERFACE_INFO(0x1410, 0xb001, | ||
| 374 | USB_CLASS_COMM, | ||
| 375 | USB_CDC_SUBCLASS_ETHERNET, | ||
| 376 | USB_CDC_PROTO_NONE), | ||
| 377 | .driver_info = (unsigned long)&qmi_wwan_info, | ||
| 378 | }, | ||
| 379 | { /* Novatel E362 */ | ||
| 380 | USB_DEVICE_AND_INTERFACE_INFO(0x1410, 0x9010, | ||
| 381 | USB_CLASS_COMM, | ||
| 382 | USB_CDC_SUBCLASS_ETHERNET, | ||
| 383 | USB_CDC_PROTO_NONE), | ||
| 384 | .driver_info = (unsigned long)&qmi_wwan_info, | ||
| 385 | }, | ||
| 372 | 386 | ||
| 373 | /* 3. Combined interface devices matching on interface number */ | 387 | /* 3. Combined interface devices matching on interface number */ |
| 388 | {QMI_FIXED_INTF(0x19d2, 0x0002, 1)}, | ||
| 389 | {QMI_FIXED_INTF(0x19d2, 0x0012, 1)}, | ||
| 390 | {QMI_FIXED_INTF(0x19d2, 0x0017, 3)}, | ||
| 391 | {QMI_FIXED_INTF(0x19d2, 0x0021, 4)}, | ||
| 392 | {QMI_FIXED_INTF(0x19d2, 0x0025, 1)}, | ||
| 393 | {QMI_FIXED_INTF(0x19d2, 0x0031, 4)}, | ||
| 394 | {QMI_FIXED_INTF(0x19d2, 0x0042, 4)}, | ||
| 395 | {QMI_FIXED_INTF(0x19d2, 0x0049, 5)}, | ||
| 396 | {QMI_FIXED_INTF(0x19d2, 0x0052, 4)}, | ||
| 374 | {QMI_FIXED_INTF(0x19d2, 0x0055, 1)}, /* ZTE (Vodafone) K3520-Z */ | 397 | {QMI_FIXED_INTF(0x19d2, 0x0055, 1)}, /* ZTE (Vodafone) K3520-Z */ |
| 398 | {QMI_FIXED_INTF(0x19d2, 0x0058, 4)}, | ||
| 375 | {QMI_FIXED_INTF(0x19d2, 0x0063, 4)}, /* ZTE (Vodafone) K3565-Z */ | 399 | {QMI_FIXED_INTF(0x19d2, 0x0063, 4)}, /* ZTE (Vodafone) K3565-Z */ |
| 376 | {QMI_FIXED_INTF(0x19d2, 0x0104, 4)}, /* ZTE (Vodafone) K4505-Z */ | 400 | {QMI_FIXED_INTF(0x19d2, 0x0104, 4)}, /* ZTE (Vodafone) K4505-Z */ |
| 401 | {QMI_FIXED_INTF(0x19d2, 0x0113, 5)}, | ||
| 402 | {QMI_FIXED_INTF(0x19d2, 0x0118, 5)}, | ||
| 403 | {QMI_FIXED_INTF(0x19d2, 0x0121, 5)}, | ||
| 404 | {QMI_FIXED_INTF(0x19d2, 0x0123, 4)}, | ||
| 405 | {QMI_FIXED_INTF(0x19d2, 0x0124, 5)}, | ||
| 406 | {QMI_FIXED_INTF(0x19d2, 0x0125, 6)}, | ||
| 407 | {QMI_FIXED_INTF(0x19d2, 0x0126, 5)}, | ||
| 408 | {QMI_FIXED_INTF(0x19d2, 0x0130, 1)}, | ||
| 409 | {QMI_FIXED_INTF(0x19d2, 0x0133, 3)}, | ||
| 410 | {QMI_FIXED_INTF(0x19d2, 0x0141, 5)}, | ||
| 377 | {QMI_FIXED_INTF(0x19d2, 0x0157, 5)}, /* ZTE MF683 */ | 411 | {QMI_FIXED_INTF(0x19d2, 0x0157, 5)}, /* ZTE MF683 */ |
| 412 | {QMI_FIXED_INTF(0x19d2, 0x0158, 3)}, | ||
| 378 | {QMI_FIXED_INTF(0x19d2, 0x0167, 4)}, /* ZTE MF820D */ | 413 | {QMI_FIXED_INTF(0x19d2, 0x0167, 4)}, /* ZTE MF820D */ |
| 414 | {QMI_FIXED_INTF(0x19d2, 0x0168, 4)}, | ||
| 415 | {QMI_FIXED_INTF(0x19d2, 0x0176, 3)}, | ||
| 416 | {QMI_FIXED_INTF(0x19d2, 0x0178, 3)}, | ||
| 417 | {QMI_FIXED_INTF(0x19d2, 0x0191, 4)}, /* ZTE EuFi890 */ | ||
| 418 | {QMI_FIXED_INTF(0x19d2, 0x0199, 1)}, /* ZTE MF820S */ | ||
| 419 | {QMI_FIXED_INTF(0x19d2, 0x0200, 1)}, | ||
| 420 | {QMI_FIXED_INTF(0x19d2, 0x0257, 3)}, /* ZTE MF821 */ | ||
| 379 | {QMI_FIXED_INTF(0x19d2, 0x0326, 4)}, /* ZTE MF821D */ | 421 | {QMI_FIXED_INTF(0x19d2, 0x0326, 4)}, /* ZTE MF821D */ |
| 380 | {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */ | 422 | {QMI_FIXED_INTF(0x19d2, 0x1008, 4)}, /* ZTE (Vodafone) K3570-Z */ |
| 381 | {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */ | 423 | {QMI_FIXED_INTF(0x19d2, 0x1010, 4)}, /* ZTE (Vodafone) K3571-Z */ |
| 424 | {QMI_FIXED_INTF(0x19d2, 0x1012, 4)}, | ||
| 382 | {QMI_FIXED_INTF(0x19d2, 0x1018, 3)}, /* ZTE (Vodafone) K5006-Z */ | 425 | {QMI_FIXED_INTF(0x19d2, 0x1018, 3)}, /* ZTE (Vodafone) K5006-Z */ |
| 426 | {QMI_FIXED_INTF(0x19d2, 0x1021, 2)}, | ||
| 427 | {QMI_FIXED_INTF(0x19d2, 0x1245, 4)}, | ||
| 428 | {QMI_FIXED_INTF(0x19d2, 0x1247, 4)}, | ||
| 429 | {QMI_FIXED_INTF(0x19d2, 0x1252, 4)}, | ||
| 430 | {QMI_FIXED_INTF(0x19d2, 0x1254, 4)}, | ||
| 431 | {QMI_FIXED_INTF(0x19d2, 0x1255, 3)}, | ||
| 432 | {QMI_FIXED_INTF(0x19d2, 0x1255, 4)}, | ||
| 433 | {QMI_FIXED_INTF(0x19d2, 0x1256, 4)}, | ||
| 434 | {QMI_FIXED_INTF(0x19d2, 0x1401, 2)}, | ||
| 383 | {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */ | 435 | {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */ |
| 436 | {QMI_FIXED_INTF(0x19d2, 0x1424, 2)}, | ||
| 437 | {QMI_FIXED_INTF(0x19d2, 0x1425, 2)}, | ||
| 438 | {QMI_FIXED_INTF(0x19d2, 0x1426, 2)}, /* ZTE MF91 */ | ||
| 384 | {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */ | 439 | {QMI_FIXED_INTF(0x19d2, 0x2002, 4)}, /* ZTE (Vodafone) K3765-Z */ |
| 385 | {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */ | 440 | {QMI_FIXED_INTF(0x0f3d, 0x68a2, 8)}, /* Sierra Wireless MC7700 */ |
| 386 | {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */ | 441 | {QMI_FIXED_INTF(0x114f, 0x68a2, 8)}, /* Sierra Wireless MC7750 */ |
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index f9819d10b1f9..cb04f900cc46 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
| @@ -1158,6 +1158,7 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb, | |||
| 1158 | usb_anchor_urb(urb, &dev->deferred); | 1158 | usb_anchor_urb(urb, &dev->deferred); |
| 1159 | /* no use to process more packets */ | 1159 | /* no use to process more packets */ |
| 1160 | netif_stop_queue(net); | 1160 | netif_stop_queue(net); |
| 1161 | usb_put_urb(urb); | ||
| 1161 | spin_unlock_irqrestore(&dev->txq.lock, flags); | 1162 | spin_unlock_irqrestore(&dev->txq.lock, flags); |
| 1162 | netdev_dbg(dev->net, "Delaying transmission for resumption\n"); | 1163 | netdev_dbg(dev->net, "Delaying transmission for resumption\n"); |
| 1163 | goto deferred; | 1164 | goto deferred; |
| @@ -1310,6 +1311,8 @@ void usbnet_disconnect (struct usb_interface *intf) | |||
| 1310 | 1311 | ||
| 1311 | cancel_work_sync(&dev->kevent); | 1312 | cancel_work_sync(&dev->kevent); |
| 1312 | 1313 | ||
| 1314 | usb_scuttle_anchored_urbs(&dev->deferred); | ||
| 1315 | |||
| 1313 | if (dev->driver_info->unbind) | 1316 | if (dev->driver_info->unbind) |
| 1314 | dev->driver_info->unbind (dev, intf); | 1317 | dev->driver_info->unbind (dev, intf); |
| 1315 | 1318 | ||
