diff options
| -rw-r--r-- | drivers/usb/host/xhci-hub.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index fdca8edc5836..78241b5550df 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c | |||
| @@ -591,7 +591,14 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd, | |||
| 591 | status |= USB_PORT_STAT_C_RESET << 16; | 591 | status |= USB_PORT_STAT_C_RESET << 16; |
| 592 | /* USB3.0 only */ | 592 | /* USB3.0 only */ |
| 593 | if (hcd->speed == HCD_USB3) { | 593 | if (hcd->speed == HCD_USB3) { |
| 594 | if ((raw_port_status & PORT_PLC)) | 594 | /* Port link change with port in resume state should not be |
| 595 | * reported to usbcore, as this is an internal state to be | ||
| 596 | * handled by xhci driver. Reporting PLC to usbcore may | ||
| 597 | * cause usbcore clearing PLC first and port change event | ||
| 598 | * irq won't be generated. | ||
| 599 | */ | ||
| 600 | if ((raw_port_status & PORT_PLC) && | ||
| 601 | (raw_port_status & PORT_PLS_MASK) != XDEV_RESUME) | ||
| 595 | status |= USB_PORT_STAT_C_LINK_STATE << 16; | 602 | status |= USB_PORT_STAT_C_LINK_STATE << 16; |
| 596 | if ((raw_port_status & PORT_WRC)) | 603 | if ((raw_port_status & PORT_WRC)) |
| 597 | status |= USB_PORT_STAT_C_BH_RESET << 16; | 604 | status |= USB_PORT_STAT_C_BH_RESET << 16; |
