From 307fe93f85a2a18a77fda7afacd17f26c8612fdc Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Tue, 20 May 2008 20:37:18 +0000 Subject: [PATCH] * Disable the root hub change interrupt when it gets triggered. As the change status stays on until the port is reset, this causes the interrupt to be constantly retriggered on some controllers. * Added TODO that we need to reenable it once we want to take advantage of status change notifications instead of polling. It should be reenabled when clearing roothub status changes in ClearPortFeature(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25578 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/busses/usb/ohci.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/add-ons/kernel/busses/usb/ohci.cpp b/src/add-ons/kernel/busses/usb/ohci.cpp index 3c23908e53..f38058b6fb 100644 --- a/src/add-ons/kernel/busses/usb/ohci.cpp +++ b/src/add-ons/kernel/busses/usb/ohci.cpp @@ -756,6 +756,10 @@ OHCI::_Interrupt() if (status & OHCI_ROOT_HUB_STATUS_CHANGE) { TRACE(("usb_ohci: root hub status change\n")); + // Disable the interrupt as it will otherwise be retriggered until the + // port has been reset and the change is cleared explicitly. + // TODO: renable it once we use status changes instead of polling + _WriteReg(OHCI_INTERRUPT_DISABLE, OHCI_ROOT_HUB_STATUS_CHANGE); acknowledge |= OHCI_ROOT_HUB_STATUS_CHANGE; }