diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-04 15:26:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-04 15:26:28 -0400 |
commit | f8b3d8a5af7559a58613384cd23fc03a3c787acf (patch) | |
tree | 7b03b50a5d17a7f000e000a4340c8055aaea16c8 | |
parent | 8eb6dcf9d2b15bb1ac066d378e503f79efcbe65c (diff) | |
parent | d3a3d28f1c7eaec42bdc26aab2dc53bc602887a4 (diff) |
Merge tag 'usb-4.0-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB fixes from Greg KH:
"Here are some small USB fixes and new device ids for 4.0-rc6. Nothing
major, some xhci fixes for reported problems, and some usb-serial
device ids.
All have been in linux-next for a while"
* tag 'usb-4.0-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
USB: ftdi_sio: Use jtag quirk for SNAP Connect E10
usb: isp1760: fix spin unlock in the error path of isp1760_udc_start
usb: xhci: apply XHCI_AVOID_BEI quirk to all Intel xHCI controllers
usb: xhci: handle Config Error Change (CEC) in xhci driver
USB: keyspan_pda: add new device id
USB: ftdi_sio: Added custom PID for Synapse Wireless product
-rw-r--r-- | drivers/usb/host/xhci-hub.c | 9 | ||||
-rw-r--r-- | drivers/usb/host/xhci-pci.c | 2 | ||||
-rw-r--r-- | drivers/usb/isp1760/isp1760-udc.c | 2 | ||||
-rw-r--r-- | drivers/usb/serial/ftdi_sio.c | 9 | ||||
-rw-r--r-- | drivers/usb/serial/ftdi_sio_ids.h | 6 | ||||
-rw-r--r-- | drivers/usb/serial/keyspan_pda.c | 3 |
6 files changed, 26 insertions, 5 deletions
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index a7865c4b0498..0827d7c96527 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c | |||
@@ -387,6 +387,10 @@ static void xhci_clear_port_change_bit(struct xhci_hcd *xhci, u16 wValue, | |||
387 | status = PORT_PLC; | 387 | status = PORT_PLC; |
388 | port_change_bit = "link state"; | 388 | port_change_bit = "link state"; |
389 | break; | 389 | break; |
390 | case USB_PORT_FEAT_C_PORT_CONFIG_ERROR: | ||
391 | status = PORT_CEC; | ||
392 | port_change_bit = "config error"; | ||
393 | break; | ||
390 | default: | 394 | default: |
391 | /* Should never happen */ | 395 | /* Should never happen */ |
392 | return; | 396 | return; |
@@ -588,6 +592,8 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd, | |||
588 | status |= USB_PORT_STAT_C_LINK_STATE << 16; | 592 | status |= USB_PORT_STAT_C_LINK_STATE << 16; |
589 | if ((raw_port_status & PORT_WRC)) | 593 | if ((raw_port_status & PORT_WRC)) |
590 | status |= USB_PORT_STAT_C_BH_RESET << 16; | 594 | status |= USB_PORT_STAT_C_BH_RESET << 16; |
595 | if ((raw_port_status & PORT_CEC)) | ||
596 | status |= USB_PORT_STAT_C_CONFIG_ERROR << 16; | ||
591 | } | 597 | } |
592 | 598 | ||
593 | if (hcd->speed != HCD_USB3) { | 599 | if (hcd->speed != HCD_USB3) { |
@@ -1005,6 +1011,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, | |||
1005 | case USB_PORT_FEAT_C_OVER_CURRENT: | 1011 | case USB_PORT_FEAT_C_OVER_CURRENT: |
1006 | case USB_PORT_FEAT_C_ENABLE: | 1012 | case USB_PORT_FEAT_C_ENABLE: |
1007 | case USB_PORT_FEAT_C_PORT_LINK_STATE: | 1013 | case USB_PORT_FEAT_C_PORT_LINK_STATE: |
1014 | case USB_PORT_FEAT_C_PORT_CONFIG_ERROR: | ||
1008 | xhci_clear_port_change_bit(xhci, wValue, wIndex, | 1015 | xhci_clear_port_change_bit(xhci, wValue, wIndex, |
1009 | port_array[wIndex], temp); | 1016 | port_array[wIndex], temp); |
1010 | break; | 1017 | break; |
@@ -1069,7 +1076,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf) | |||
1069 | */ | 1076 | */ |
1070 | status = bus_state->resuming_ports; | 1077 | status = bus_state->resuming_ports; |
1071 | 1078 | ||
1072 | mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC; | 1079 | mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC | PORT_CEC; |
1073 | 1080 | ||
1074 | spin_lock_irqsave(&xhci->lock, flags); | 1081 | spin_lock_irqsave(&xhci->lock, flags); |
1075 | /* For each port, did anything change? If so, set that bit in buf. */ | 1082 | /* For each port, did anything change? If so, set that bit in buf. */ |
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index fd53c9ebd662..2af32e26fafc 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c | |||
@@ -115,6 +115,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | |||
115 | if (pdev->vendor == PCI_VENDOR_ID_INTEL) { | 115 | if (pdev->vendor == PCI_VENDOR_ID_INTEL) { |
116 | xhci->quirks |= XHCI_LPM_SUPPORT; | 116 | xhci->quirks |= XHCI_LPM_SUPPORT; |
117 | xhci->quirks |= XHCI_INTEL_HOST; | 117 | xhci->quirks |= XHCI_INTEL_HOST; |
118 | xhci->quirks |= XHCI_AVOID_BEI; | ||
118 | } | 119 | } |
119 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && | 120 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && |
120 | pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) { | 121 | pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) { |
@@ -130,7 +131,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | |||
130 | * PPT chipsets. | 131 | * PPT chipsets. |
131 | */ | 132 | */ |
132 | xhci->quirks |= XHCI_SPURIOUS_REBOOT; | 133 | xhci->quirks |= XHCI_SPURIOUS_REBOOT; |
133 | xhci->quirks |= XHCI_AVOID_BEI; | ||
134 | } | 134 | } |
135 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && | 135 | if (pdev->vendor == PCI_VENDOR_ID_INTEL && |
136 | pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) { | 136 | pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) { |
diff --git a/drivers/usb/isp1760/isp1760-udc.c b/drivers/usb/isp1760/isp1760-udc.c index f32c292cc868..3fc4fe770253 100644 --- a/drivers/usb/isp1760/isp1760-udc.c +++ b/drivers/usb/isp1760/isp1760-udc.c | |||
@@ -1203,7 +1203,7 @@ static int isp1760_udc_start(struct usb_gadget *gadget, | |||
1203 | 1203 | ||
1204 | if (udc->driver) { | 1204 | if (udc->driver) { |
1205 | dev_err(udc->isp->dev, "UDC already has a gadget driver\n"); | 1205 | dev_err(udc->isp->dev, "UDC already has a gadget driver\n"); |
1206 | spin_unlock(&udc->lock); | 1206 | spin_unlock_irqrestore(&udc->lock, flags); |
1207 | return -EBUSY; | 1207 | return -EBUSY; |
1208 | } | 1208 | } |
1209 | 1209 | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 3086dec0ef53..8eb68a31cab6 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
@@ -604,6 +604,7 @@ static const struct usb_device_id id_table_combined[] = { | |||
604 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | 604 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
605 | { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID), | 605 | { USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID), |
606 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | 606 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, |
607 | { USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) }, | ||
607 | /* | 608 | /* |
608 | * ELV devices: | 609 | * ELV devices: |
609 | */ | 610 | */ |
@@ -1883,8 +1884,12 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial) | |||
1883 | { | 1884 | { |
1884 | struct usb_device *udev = serial->dev; | 1885 | struct usb_device *udev = serial->dev; |
1885 | 1886 | ||
1886 | if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) || | 1887 | if (udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) |
1887 | (udev->product && !strcmp(udev->product, "BeagleBone/XDS100V2"))) | 1888 | return ftdi_jtag_probe(serial); |
1889 | |||
1890 | if (udev->product && | ||
1891 | (!strcmp(udev->product, "BeagleBone/XDS100V2") || | ||
1892 | !strcmp(udev->product, "SNAP Connect E10"))) | ||
1888 | return ftdi_jtag_probe(serial); | 1893 | return ftdi_jtag_probe(serial); |
1889 | 1894 | ||
1890 | return 0; | 1895 | return 0; |
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h index 56b1b55c4751..4e4f46f3c89c 100644 --- a/drivers/usb/serial/ftdi_sio_ids.h +++ b/drivers/usb/serial/ftdi_sio_ids.h | |||
@@ -561,6 +561,12 @@ | |||
561 | */ | 561 | */ |
562 | #define FTDI_NT_ORIONLXM_PID 0x7c90 /* OrionLXm Substation Automation Platform */ | 562 | #define FTDI_NT_ORIONLXM_PID 0x7c90 /* OrionLXm Substation Automation Platform */ |
563 | 563 | ||
564 | /* | ||
565 | * Synapse Wireless product ids (FTDI_VID) | ||
566 | * http://www.synapse-wireless.com | ||
567 | */ | ||
568 | #define FTDI_SYNAPSE_SS200_PID 0x9090 /* SS200 - SNAP Stick 200 */ | ||
569 | |||
564 | 570 | ||
565 | /********************************/ | 571 | /********************************/ |
566 | /** third-party VID/PID combos **/ | 572 | /** third-party VID/PID combos **/ |
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c index dd97d8b572c3..4f7e072e4e00 100644 --- a/drivers/usb/serial/keyspan_pda.c +++ b/drivers/usb/serial/keyspan_pda.c | |||
@@ -61,6 +61,7 @@ struct keyspan_pda_private { | |||
61 | /* For Xircom PGSDB9 and older Entrega version of the same device */ | 61 | /* For Xircom PGSDB9 and older Entrega version of the same device */ |
62 | #define XIRCOM_VENDOR_ID 0x085a | 62 | #define XIRCOM_VENDOR_ID 0x085a |
63 | #define XIRCOM_FAKE_ID 0x8027 | 63 | #define XIRCOM_FAKE_ID 0x8027 |
64 | #define XIRCOM_FAKE_ID_2 0x8025 /* "PGMFHUB" serial */ | ||
64 | #define ENTREGA_VENDOR_ID 0x1645 | 65 | #define ENTREGA_VENDOR_ID 0x1645 |
65 | #define ENTREGA_FAKE_ID 0x8093 | 66 | #define ENTREGA_FAKE_ID 0x8093 |
66 | 67 | ||
@@ -70,6 +71,7 @@ static const struct usb_device_id id_table_combined[] = { | |||
70 | #endif | 71 | #endif |
71 | #ifdef XIRCOM | 72 | #ifdef XIRCOM |
72 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) }, | 73 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) }, |
74 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID_2) }, | ||
73 | { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) }, | 75 | { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) }, |
74 | #endif | 76 | #endif |
75 | { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) }, | 77 | { USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) }, |
@@ -93,6 +95,7 @@ static const struct usb_device_id id_table_fake[] = { | |||
93 | #ifdef XIRCOM | 95 | #ifdef XIRCOM |
94 | static const struct usb_device_id id_table_fake_xircom[] = { | 96 | static const struct usb_device_id id_table_fake_xircom[] = { |
95 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) }, | 97 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) }, |
98 | { USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID_2) }, | ||
96 | { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) }, | 99 | { USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) }, |
97 | { } | 100 | { } |
98 | }; | 101 | }; |