From 6c5ad5e23958d10db801e61b59aeee9ec9374e8a Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 1 Feb 2012 11:22:43 +0000 Subject: [PATCH] [USBEHCI] - Wait 20 milliseconds after enabling power for the port to stabilize svn path=/branches/usb-bringup-trunk/; revision=55365 --- drivers/usb/usbehci_new/hardware.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/usb/usbehci_new/hardware.cpp b/drivers/usb/usbehci_new/hardware.cpp index 672a228d822..0ba69d66f21 100644 --- a/drivers/usb/usbehci_new/hardware.cpp +++ b/drivers/usb/usbehci_new/hardware.cpp @@ -957,11 +957,30 @@ CUSBHardwareDevice::SetPortFeature( { if (m_Capabilities.HCSParams.PortPowerControl) { + ULONG Value; + LARGE_INTEGER Timeout; + // // enable port power // - ULONG Value = EHCI_READ_REGISTER_ULONG(EHCI_PORTSC + (4 * PortId)) | EHCI_PRT_POWER; + Value = EHCI_READ_REGISTER_ULONG(EHCI_PORTSC + (4 * PortId)) | EHCI_PRT_POWER; EHCI_WRITE_REGISTER_ULONG(EHCI_PORTSC, Value); + + // + // delay is 20 ms + // + Timeout.QuadPart = 20; + DPRINT1("Waiting %d milliseconds for port power up\n", Timeout.LowPart); + + // + // convert to 100 ns units (absolute) + // + Timeout.QuadPart *= -10000; + + // + // perform the wait + // + KeDelayExecutionThread(KernelMode, FALSE, &Timeout); } } return STATUS_SUCCESS;