USB fixes for 4.0-rc6
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. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlUfxcMACgkQMUfUDdst+ykhvQCfXSkt4KzzKt0nwpNR/NwX5cvD OQYAnjpRbyzjMiRezIwdd6HQAOUkVPof =Sa+B -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
f8b3d8a5af
@ -387,6 +387,10 @@ static void xhci_clear_port_change_bit(struct xhci_hcd *xhci, u16 wValue,
|
|||||||
status = PORT_PLC;
|
status = PORT_PLC;
|
||||||
port_change_bit = "link state";
|
port_change_bit = "link state";
|
||||||
break;
|
break;
|
||||||
|
case USB_PORT_FEAT_C_PORT_CONFIG_ERROR:
|
||||||
|
status = PORT_CEC;
|
||||||
|
port_change_bit = "config error";
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
/* Should never happen */
|
/* Should never happen */
|
||||||
return;
|
return;
|
||||||
@ -588,6 +592,8 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
|
|||||||
status |= USB_PORT_STAT_C_LINK_STATE << 16;
|
status |= USB_PORT_STAT_C_LINK_STATE << 16;
|
||||||
if ((raw_port_status & PORT_WRC))
|
if ((raw_port_status & PORT_WRC))
|
||||||
status |= USB_PORT_STAT_C_BH_RESET << 16;
|
status |= USB_PORT_STAT_C_BH_RESET << 16;
|
||||||
|
if ((raw_port_status & PORT_CEC))
|
||||||
|
status |= USB_PORT_STAT_C_CONFIG_ERROR << 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hcd->speed != HCD_USB3) {
|
if (hcd->speed != HCD_USB3) {
|
||||||
@ -1005,6 +1011,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
|||||||
case USB_PORT_FEAT_C_OVER_CURRENT:
|
case USB_PORT_FEAT_C_OVER_CURRENT:
|
||||||
case USB_PORT_FEAT_C_ENABLE:
|
case USB_PORT_FEAT_C_ENABLE:
|
||||||
case USB_PORT_FEAT_C_PORT_LINK_STATE:
|
case USB_PORT_FEAT_C_PORT_LINK_STATE:
|
||||||
|
case USB_PORT_FEAT_C_PORT_CONFIG_ERROR:
|
||||||
xhci_clear_port_change_bit(xhci, wValue, wIndex,
|
xhci_clear_port_change_bit(xhci, wValue, wIndex,
|
||||||
port_array[wIndex], temp);
|
port_array[wIndex], temp);
|
||||||
break;
|
break;
|
||||||
@ -1069,7 +1076,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
|
|||||||
*/
|
*/
|
||||||
status = bus_state->resuming_ports;
|
status = bus_state->resuming_ports;
|
||||||
|
|
||||||
mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC;
|
mask = PORT_CSC | PORT_PEC | PORT_OCC | PORT_PLC | PORT_WRC | PORT_CEC;
|
||||||
|
|
||||||
spin_lock_irqsave(&xhci->lock, flags);
|
spin_lock_irqsave(&xhci->lock, flags);
|
||||||
/* For each port, did anything change? If so, set that bit in buf. */
|
/* For each port, did anything change? If so, set that bit in buf. */
|
||||||
|
@ -115,6 +115,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
|||||||
if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
|
if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
|
||||||
xhci->quirks |= XHCI_LPM_SUPPORT;
|
xhci->quirks |= XHCI_LPM_SUPPORT;
|
||||||
xhci->quirks |= XHCI_INTEL_HOST;
|
xhci->quirks |= XHCI_INTEL_HOST;
|
||||||
|
xhci->quirks |= XHCI_AVOID_BEI;
|
||||||
}
|
}
|
||||||
if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
||||||
pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
|
pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI) {
|
||||||
@ -130,7 +131,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
|
|||||||
* PPT chipsets.
|
* PPT chipsets.
|
||||||
*/
|
*/
|
||||||
xhci->quirks |= XHCI_SPURIOUS_REBOOT;
|
xhci->quirks |= XHCI_SPURIOUS_REBOOT;
|
||||||
xhci->quirks |= XHCI_AVOID_BEI;
|
|
||||||
}
|
}
|
||||||
if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
if (pdev->vendor == PCI_VENDOR_ID_INTEL &&
|
||||||
pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) {
|
pdev->device == PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI) {
|
||||||
|
@ -1203,7 +1203,7 @@ static int isp1760_udc_start(struct usb_gadget *gadget,
|
|||||||
|
|
||||||
if (udc->driver) {
|
if (udc->driver) {
|
||||||
dev_err(udc->isp->dev, "UDC already has a gadget driver\n");
|
dev_err(udc->isp->dev, "UDC already has a gadget driver\n");
|
||||||
spin_unlock(&udc->lock);
|
spin_unlock_irqrestore(&udc->lock, flags);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -604,6 +604,7 @@ static const struct usb_device_id id_table_combined[] = {
|
|||||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||||
{ USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID),
|
{ USB_DEVICE(FTDI_VID, FTDI_NT_ORIONLXM_PID),
|
||||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||||
|
{ USB_DEVICE(FTDI_VID, FTDI_SYNAPSE_SS200_PID) },
|
||||||
/*
|
/*
|
||||||
* ELV devices:
|
* ELV devices:
|
||||||
*/
|
*/
|
||||||
@ -1883,8 +1884,12 @@ static int ftdi_8u2232c_probe(struct usb_serial *serial)
|
|||||||
{
|
{
|
||||||
struct usb_device *udev = serial->dev;
|
struct usb_device *udev = serial->dev;
|
||||||
|
|
||||||
if ((udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems")) ||
|
if (udev->manufacturer && !strcmp(udev->manufacturer, "CALAO Systems"))
|
||||||
(udev->product && !strcmp(udev->product, "BeagleBone/XDS100V2")))
|
return ftdi_jtag_probe(serial);
|
||||||
|
|
||||||
|
if (udev->product &&
|
||||||
|
(!strcmp(udev->product, "BeagleBone/XDS100V2") ||
|
||||||
|
!strcmp(udev->product, "SNAP Connect E10")))
|
||||||
return ftdi_jtag_probe(serial);
|
return ftdi_jtag_probe(serial);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -561,6 +561,12 @@
|
|||||||
*/
|
*/
|
||||||
#define FTDI_NT_ORIONLXM_PID 0x7c90 /* OrionLXm Substation Automation Platform */
|
#define FTDI_NT_ORIONLXM_PID 0x7c90 /* OrionLXm Substation Automation Platform */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Synapse Wireless product ids (FTDI_VID)
|
||||||
|
* http://www.synapse-wireless.com
|
||||||
|
*/
|
||||||
|
#define FTDI_SYNAPSE_SS200_PID 0x9090 /* SS200 - SNAP Stick 200 */
|
||||||
|
|
||||||
|
|
||||||
/********************************/
|
/********************************/
|
||||||
/** third-party VID/PID combos **/
|
/** third-party VID/PID combos **/
|
||||||
|
@ -61,6 +61,7 @@ struct keyspan_pda_private {
|
|||||||
/* For Xircom PGSDB9 and older Entrega version of the same device */
|
/* For Xircom PGSDB9 and older Entrega version of the same device */
|
||||||
#define XIRCOM_VENDOR_ID 0x085a
|
#define XIRCOM_VENDOR_ID 0x085a
|
||||||
#define XIRCOM_FAKE_ID 0x8027
|
#define XIRCOM_FAKE_ID 0x8027
|
||||||
|
#define XIRCOM_FAKE_ID_2 0x8025 /* "PGMFHUB" serial */
|
||||||
#define ENTREGA_VENDOR_ID 0x1645
|
#define ENTREGA_VENDOR_ID 0x1645
|
||||||
#define ENTREGA_FAKE_ID 0x8093
|
#define ENTREGA_FAKE_ID 0x8093
|
||||||
|
|
||||||
@ -70,6 +71,7 @@ static const struct usb_device_id id_table_combined[] = {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef XIRCOM
|
#ifdef XIRCOM
|
||||||
{ USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
|
{ USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
|
||||||
|
{ USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID_2) },
|
||||||
{ USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) },
|
{ USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) },
|
||||||
#endif
|
#endif
|
||||||
{ USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
|
{ USB_DEVICE(KEYSPAN_VENDOR_ID, KEYSPAN_PDA_ID) },
|
||||||
@ -93,6 +95,7 @@ static const struct usb_device_id id_table_fake[] = {
|
|||||||
#ifdef XIRCOM
|
#ifdef XIRCOM
|
||||||
static const struct usb_device_id id_table_fake_xircom[] = {
|
static const struct usb_device_id id_table_fake_xircom[] = {
|
||||||
{ USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
|
{ USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID) },
|
||||||
|
{ USB_DEVICE(XIRCOM_VENDOR_ID, XIRCOM_FAKE_ID_2) },
|
||||||
{ USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) },
|
{ USB_DEVICE(ENTREGA_VENDOR_ID, ENTREGA_FAKE_ID) },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user