From: Christian Engelmayer <[EMAIL PROTECTED]> According to the USB Specification Revision 2.0 chapter 11.12.5 a hub experiencing an over-current condition must place all affected ports in the powered-off state. It seems that some hubs violate this requirement, but need port power to be cycled by software in order to get back to normal functionality after an over-current condition.
Signed-off-by: Christian Engelmayer <[EMAIL PROTECTED]> Signed-off-by: David Brownell <[EMAIL PROTECTED]> --- This fix was tested on an MPC8343E. --- a/drivers/usb/host/ehci-hub.c.orig 2007-05-29 21:30:35.000000000 +0200 +++ b/drivers/usb/host/ehci-hub.c 2007-05-29 21:39:48.000000000 +0200 @@ -389,6 +389,20 @@ ehci_hub_status_data (struct usb_hcd *hc buf [1] |= 1 << (i - 7); status = STS_PCD; } + + /* + * The hub was supposed to disable port power autonomously + * on over-current. However, not all hubs can be trusted to + * do this although they need port power disabled in order + * to recover properly. + */ + if (temp & PORT_OCC) { + if (HCS_PPC(ehci->hcs_params)){ + temp &= ~(PORT_RWC_BITS | PORT_POWER); + writel (temp, &ehci->regs->port_status [i]); + } + } + } /* FIXME autosuspend idle root hubs */ spin_unlock_irqrestore (&ehci->lock, flags); ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel