diff --git a/drivers/usb/usbhub/usbhub.c b/drivers/usb/usbhub/usbhub.c index d3e9aa3434..4c00fbf75e 100644 --- a/drivers/usb/usbhub/usbhub.c +++ b/drivers/usb/usbhub/usbhub.c @@ -1850,14 +1850,19 @@ USBH_ProcessHubStateChange(IN PUSBHUB_FDO_EXTENSION HubExtension, if (HubStatusChange.LocalPowerChange) { DPRINT1("USBH_ProcessHubStateChange: LocalPowerChange\n"); - USBH_SyncClearHubStatus(HubExtension, - USBHUB_FEATURE_C_HUB_LOCAL_POWER); + USBH_SyncClearHubStatus(HubExtension, USBHUB_FEATURE_C_HUB_LOCAL_POWER); } else if (HubStatusChange.OverCurrentChange) { - USBH_SyncClearHubStatus(HubExtension, - USBHUB_FEATURE_C_HUB_OVER_CURRENT); - if (HubStatus->HubStatus.OverCurrent) + USB_HUB_STATUS_AND_CHANGE NewHubStatus; + USBH_SyncClearHubStatus(HubExtension, USBHUB_FEATURE_C_HUB_OVER_CURRENT); + + // try to do what linux does + USBH_Wait(500); + USBH_SyncPowerOnPorts(HubExtension); + USBH_SyncGetHubStatus(HubExtension, &NewHubStatus, sizeof(NewHubStatus)); + + if (NewHubStatus.HubStatus.OverCurrent) { DPRINT1("USBH_ProcessHubStateChange: OverCurrent UNIMPLEMENTED. FIXME\n"); DbgBreakPoint();