ehci-hub: improved over-current recovery
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 root hubs need port power to be cycled by software in order to get back to normal functionality after an over-current condition ... like the EHCI implementation on an MPC8343E. Signed-off-by: Christian Engelmayer <christian.engelmayer@frequentis.com> Signed-off-by: David Brownell <david-b@pacbell.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
648dcfc805
commit
756aa6b3d5
@@ -647,9 +647,24 @@ static int ehci_hub_control (
|
|||||||
status |= 1 << USB_PORT_FEAT_C_CONNECTION;
|
status |= 1 << USB_PORT_FEAT_C_CONNECTION;
|
||||||
if (temp & PORT_PEC)
|
if (temp & PORT_PEC)
|
||||||
status |= 1 << USB_PORT_FEAT_C_ENABLE;
|
status |= 1 << USB_PORT_FEAT_C_ENABLE;
|
||||||
if ((temp & PORT_OCC) && !ignore_oc)
|
|
||||||
|
if ((temp & PORT_OCC) && !ignore_oc){
|
||||||
status |= 1 << USB_PORT_FEAT_C_OVER_CURRENT;
|
status |= 1 << USB_PORT_FEAT_C_OVER_CURRENT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hubs should disable port power on over-current.
|
||||||
|
* However, not all EHCI implementations do this
|
||||||
|
* automatically, even if they _do_ support per-port
|
||||||
|
* power switching; they're allowed to just limit the
|
||||||
|
* current. khubd will turn the power back on.
|
||||||
|
*/
|
||||||
|
if (HCS_PPC (ehci->hcs_params)){
|
||||||
|
ehci_writel(ehci,
|
||||||
|
temp & ~(PORT_RWC_BITS | PORT_POWER),
|
||||||
|
status_reg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* whoever resumes must GetPortStatus to complete it!! */
|
/* whoever resumes must GetPortStatus to complete it!! */
|
||||||
if (temp & PORT_RESUME) {
|
if (temp & PORT_RESUME) {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user