|
|
@@ -3575,6 +3575,7 @@ static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
|
|
|
struct usb_device *hdev;
|
|
|
struct usb_device *udev;
|
|
|
int connect_change = 0;
|
|
|
+ u16 link_state;
|
|
|
int ret;
|
|
|
|
|
|
hdev = hub->hdev;
|
|
|
@@ -3584,9 +3585,11 @@ static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
|
|
|
return 0;
|
|
|
usb_clear_port_feature(hdev, port, USB_PORT_FEAT_C_SUSPEND);
|
|
|
} else {
|
|
|
+ link_state = portstatus & USB_PORT_STAT_LINK_STATE;
|
|
|
if (!udev || udev->state != USB_STATE_SUSPENDED ||
|
|
|
- (portstatus & USB_PORT_STAT_LINK_STATE) !=
|
|
|
- USB_SS_PORT_LS_U0)
|
|
|
+ (link_state != USB_SS_PORT_LS_U0 &&
|
|
|
+ link_state != USB_SS_PORT_LS_U1 &&
|
|
|
+ link_state != USB_SS_PORT_LS_U2))
|
|
|
return 0;
|
|
|
}
|
|
|
|