Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8b3d8a5 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents 8eb6dcf9 d3a3d28f
Loading
Loading
Loading
Loading
+8 −1
Original line number Original line Diff line number Diff line
@@ -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. */
+1 −1
Original line number Original line Diff line number Diff line
@@ -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) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -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;
	}
	}


+7 −2
Original line number Original line Diff line number Diff line
@@ -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;
+6 −0
Original line number Original line Diff line number Diff line
@@ -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 **/
Loading