diff options
| -rw-r--r-- | drivers/net/usb/ax88179_178a.c | 8 | ||||
| -rw-r--r-- | drivers/usb/core/config.c | 4 | ||||
| -rw-r--r-- | drivers/usb/core/quirks.c | 4 | ||||
| -rw-r--r-- | drivers/usb/host/xhci.c | 14 |
4 files changed, 11 insertions, 19 deletions
diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c index d2e6fdb25e28..054e59ca6946 100644 --- a/drivers/net/usb/ax88179_178a.c +++ b/drivers/net/usb/ax88179_178a.c | |||
| @@ -1029,20 +1029,12 @@ static int ax88179_bind(struct usbnet *dev, struct usb_interface *intf) | |||
| 1029 | dev->mii.phy_id = 0x03; | 1029 | dev->mii.phy_id = 0x03; |
| 1030 | dev->mii.supports_gmii = 1; | 1030 | dev->mii.supports_gmii = 1; |
| 1031 | 1031 | ||
| 1032 | if (usb_device_no_sg_constraint(dev->udev)) | ||
| 1033 | dev->can_dma_sg = 1; | ||
| 1034 | |||
| 1035 | dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | | 1032 | dev->net->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | |
| 1036 | NETIF_F_RXCSUM; | 1033 | NETIF_F_RXCSUM; |
| 1037 | 1034 | ||
| 1038 | dev->net->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | | 1035 | dev->net->hw_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | |
| 1039 | NETIF_F_RXCSUM; | 1036 | NETIF_F_RXCSUM; |
| 1040 | 1037 | ||
| 1041 | if (dev->can_dma_sg) { | ||
| 1042 | dev->net->features |= NETIF_F_SG | NETIF_F_TSO; | ||
| 1043 | dev->net->hw_features |= NETIF_F_SG | NETIF_F_TSO; | ||
| 1044 | } | ||
| 1045 | |||
| 1046 | /* Enable checksum offload */ | 1038 | /* Enable checksum offload */ |
| 1047 | *tmp = AX_RXCOE_IP | AX_RXCOE_TCP | AX_RXCOE_UDP | | 1039 | *tmp = AX_RXCOE_IP | AX_RXCOE_TCP | AX_RXCOE_UDP | |
| 1048 | AX_RXCOE_TCPV6 | AX_RXCOE_UDPV6; | 1040 | AX_RXCOE_TCPV6 | AX_RXCOE_UDPV6; |
diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c index 8d72f0c65937..062967c90b2a 100644 --- a/drivers/usb/core/config.c +++ b/drivers/usb/core/config.c | |||
| @@ -717,6 +717,10 @@ int usb_get_configuration(struct usb_device *dev) | |||
| 717 | result = -ENOMEM; | 717 | result = -ENOMEM; |
| 718 | goto err; | 718 | goto err; |
| 719 | } | 719 | } |
| 720 | |||
| 721 | if (dev->quirks & USB_QUIRK_DELAY_INIT) | ||
| 722 | msleep(100); | ||
| 723 | |||
| 720 | result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, | 724 | result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, |
| 721 | bigbuffer, length); | 725 | bigbuffer, length); |
| 722 | if (result < 0) { | 726 | if (result < 0) { |
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index 8f37063c0a49..739ee8e8bdfd 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c | |||
| @@ -47,6 +47,10 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 47 | /* Microsoft LifeCam-VX700 v2.0 */ | 47 | /* Microsoft LifeCam-VX700 v2.0 */ |
| 48 | { USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME }, | 48 | { USB_DEVICE(0x045e, 0x0770), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 49 | 49 | ||
| 50 | /* Logitech HD Pro Webcams C920 and C930e */ | ||
| 51 | { USB_DEVICE(0x046d, 0x082d), .driver_info = USB_QUIRK_DELAY_INIT }, | ||
| 52 | { USB_DEVICE(0x046d, 0x0843), .driver_info = USB_QUIRK_DELAY_INIT }, | ||
| 53 | |||
| 50 | /* Logitech Quickcam Fusion */ | 54 | /* Logitech Quickcam Fusion */ |
| 51 | { USB_DEVICE(0x046d, 0x08c1), .driver_info = USB_QUIRK_RESET_RESUME }, | 55 | { USB_DEVICE(0x046d, 0x08c1), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 52 | 56 | ||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 6fe577d46fa2..924a6ccdb622 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
| @@ -4733,6 +4733,9 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) | |||
| 4733 | /* Accept arbitrarily long scatter-gather lists */ | 4733 | /* Accept arbitrarily long scatter-gather lists */ |
| 4734 | hcd->self.sg_tablesize = ~0; | 4734 | hcd->self.sg_tablesize = ~0; |
| 4735 | 4735 | ||
| 4736 | /* support to build packet from discontinuous buffers */ | ||
| 4737 | hcd->self.no_sg_constraint = 1; | ||
| 4738 | |||
| 4736 | /* XHCI controllers don't stop the ep queue on short packets :| */ | 4739 | /* XHCI controllers don't stop the ep queue on short packets :| */ |
| 4737 | hcd->self.no_stop_on_short = 1; | 4740 | hcd->self.no_stop_on_short = 1; |
| 4738 | 4741 | ||
| @@ -4757,14 +4760,6 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) | |||
| 4757 | /* xHCI private pointer was set in xhci_pci_probe for the second | 4760 | /* xHCI private pointer was set in xhci_pci_probe for the second |
| 4758 | * registered roothub. | 4761 | * registered roothub. |
| 4759 | */ | 4762 | */ |
| 4760 | xhci = hcd_to_xhci(hcd); | ||
| 4761 | /* | ||
| 4762 | * Support arbitrarily aligned sg-list entries on hosts without | ||
| 4763 | * TD fragment rules (which are currently unsupported). | ||
| 4764 | */ | ||
| 4765 | if (xhci->hci_version < 0x100) | ||
| 4766 | hcd->self.no_sg_constraint = 1; | ||
| 4767 | |||
| 4768 | return 0; | 4763 | return 0; |
| 4769 | } | 4764 | } |
| 4770 | 4765 | ||
| @@ -4793,9 +4788,6 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) | |||
| 4793 | if (xhci->hci_version > 0x96) | 4788 | if (xhci->hci_version > 0x96) |
| 4794 | xhci->quirks |= XHCI_SPURIOUS_SUCCESS; | 4789 | xhci->quirks |= XHCI_SPURIOUS_SUCCESS; |
| 4795 | 4790 | ||
| 4796 | if (xhci->hci_version < 0x100) | ||
| 4797 | hcd->self.no_sg_constraint = 1; | ||
| 4798 | |||
| 4799 | /* Make sure the HC is halted. */ | 4791 | /* Make sure the HC is halted. */ |
| 4800 | retval = xhci_halt(xhci); | 4792 | retval = xhci_halt(xhci); |
| 4801 | if (retval) | 4793 | if (retval) |
