|
@@ -468,7 +468,8 @@ static void xhci_hub_report_usb2_link_state(u32 *status, u32 status_reg)
|
|
|
}
|
|
|
|
|
|
/* Updates Link Status for super Speed port */
|
|
|
-static void xhci_hub_report_usb3_link_state(u32 *status, u32 status_reg)
|
|
|
+static void xhci_hub_report_usb3_link_state(struct xhci_hcd *xhci,
|
|
|
+ u32 *status, u32 status_reg)
|
|
|
{
|
|
|
u32 pls = status_reg & PORT_PLS_MASK;
|
|
|
|
|
@@ -507,7 +508,8 @@ static void xhci_hub_report_usb3_link_state(u32 *status, u32 status_reg)
|
|
|
* in which sometimes the port enters compliance mode
|
|
|
* caused by a delay on the host-device negotiation.
|
|
|
*/
|
|
|
- if (pls == USB_SS_PORT_LS_COMP_MOD)
|
|
|
+ if ((xhci->quirks & XHCI_COMP_MODE_QUIRK) &&
|
|
|
+ (pls == USB_SS_PORT_LS_COMP_MOD))
|
|
|
pls |= USB_PORT_STAT_CONNECTION;
|
|
|
}
|
|
|
|
|
@@ -666,7 +668,7 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
|
|
|
}
|
|
|
/* Update Port Link State */
|
|
|
if (hcd->speed == HCD_USB3) {
|
|
|
- xhci_hub_report_usb3_link_state(&status, raw_port_status);
|
|
|
+ xhci_hub_report_usb3_link_state(xhci, &status, raw_port_status);
|
|
|
/*
|
|
|
* Verify if all USB3 Ports Have entered U0 already.
|
|
|
* Delete Compliance Mode Timer if so.
|