Skip to content

Commit 1c12443

Browse files
author
Sarah Sharp
committed
xhci: Add Lynx Point to list of Intel switchable hosts.
The upcoming Intel Lynx Point chipset includes an xHCI host controller that can have ports switched from the EHCI host controller, just like the Intel Panther Point xHCI host. This time, ports from both EHCI hosts can be switched to the xHCI host controller. The PCI config registers to do the port switching are in the exact same place in the xHCI PCI configuration registers, with the same semantics. Hooray for shipping patches for next-gen hardware before the current gen hardware is even available for purchase! This patch should be backported to stable kernels as old as 3.0, that contain commit 69e848c "Intel xhci: Support EHCI/xHCI port switching." Signed-off-by: Sarah Sharp <[email protected]> Cc: [email protected]
1 parent 51c9e6c commit 1c12443

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

drivers/usb/host/ehci-pci.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,9 @@ static bool usb_is_intel_switchable_ehci(struct pci_dev *pdev)
360360
{
361361
return pdev->class == PCI_CLASS_SERIAL_USB_EHCI &&
362362
pdev->vendor == PCI_VENDOR_ID_INTEL &&
363-
pdev->device == 0x1E26;
363+
(pdev->device == 0x1E26 ||
364+
pdev->device == 0x8C2D ||
365+
pdev->device == 0x8C26);
364366
}
365367

366368
static void ehci_enable_xhci_companion(void)

drivers/usb/host/pci-quirks.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,12 +713,28 @@ static int handshake(void __iomem *ptr, u32 mask, u32 done,
713713
return -ETIMEDOUT;
714714
}
715715

716-
bool usb_is_intel_switchable_xhci(struct pci_dev *pdev)
716+
#define PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI 0x8C31
717+
718+
bool usb_is_intel_ppt_switchable_xhci(struct pci_dev *pdev)
717719
{
718720
return pdev->class == PCI_CLASS_SERIAL_USB_XHCI &&
719721
pdev->vendor == PCI_VENDOR_ID_INTEL &&
720722
pdev->device == PCI_DEVICE_ID_INTEL_PANTHERPOINT_XHCI;
721723
}
724+
725+
/* The Intel Lynx Point chipset also has switchable ports. */
726+
bool usb_is_intel_lpt_switchable_xhci(struct pci_dev *pdev)
727+
{
728+
return pdev->class == PCI_CLASS_SERIAL_USB_XHCI &&
729+
pdev->vendor == PCI_VENDOR_ID_INTEL &&
730+
pdev->device == PCI_DEVICE_ID_INTEL_LYNX_POINT_XHCI;
731+
}
732+
733+
bool usb_is_intel_switchable_xhci(struct pci_dev *pdev)
734+
{
735+
return usb_is_intel_ppt_switchable_xhci(pdev) ||
736+
usb_is_intel_lpt_switchable_xhci(pdev);
737+
}
722738
EXPORT_SYMBOL_GPL(usb_is_intel_switchable_xhci);
723739

724740
/*

0 commit comments

Comments
 (0)