diff options
-rw-r--r-- | drivers/usb/host/ehci-fsl.c | 9 | ||||
-rw-r--r-- | drivers/usb/host/ehci-hub.c | 3 | ||||
-rw-r--r-- | drivers/usb/host/ehci.h | 1 |
3 files changed, 12 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c index d81d2fcbff18..3be3df233a0e 100644 --- a/drivers/usb/host/ehci-fsl.c +++ b/drivers/usb/host/ehci-fsl.c | |||
@@ -370,6 +370,15 @@ static int ehci_fsl_setup(struct usb_hcd *hcd) | |||
370 | /* EHCI registers start at offset 0x100 */ | 370 | /* EHCI registers start at offset 0x100 */ |
371 | ehci->caps = hcd->regs + 0x100; | 371 | ehci->caps = hcd->regs + 0x100; |
372 | 372 | ||
373 | #ifdef CONFIG_PPC_83xx | ||
374 | /* | ||
375 | * Deal with MPC834X that need port power to be cycled after the power | ||
376 | * fault condition is removed. Otherwise the state machine does not | ||
377 | * reflect PORTSC[CSC] correctly. | ||
378 | */ | ||
379 | ehci->need_oc_pp_cycle = 1; | ||
380 | #endif | ||
381 | |||
373 | hcd->has_tt = 1; | 382 | hcd->has_tt = 1; |
374 | 383 | ||
375 | retval = ehci_setup(hcd); | 384 | retval = ehci_setup(hcd); |
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index 7b04ca96b585..9ab4a4d9768a 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c | |||
@@ -840,7 +840,8 @@ static int ehci_hub_control ( | |||
840 | * power switching; they're allowed to just limit the | 840 | * power switching; they're allowed to just limit the |
841 | * current. khubd will turn the power back on. | 841 | * current. khubd will turn the power back on. |
842 | */ | 842 | */ |
843 | if ((temp & PORT_OC) && HCS_PPC(ehci->hcs_params)) { | 843 | if (((temp & PORT_OC) || (ehci->need_oc_pp_cycle)) |
844 | && HCS_PPC(ehci->hcs_params)) { | ||
844 | ehci_writel(ehci, | 845 | ehci_writel(ehci, |
845 | temp & ~(PORT_RWC_BITS | PORT_POWER), | 846 | temp & ~(PORT_RWC_BITS | PORT_POWER), |
846 | status_reg); | 847 | status_reg); |
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index e66699950997..7c978b23520d 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h | |||
@@ -199,6 +199,7 @@ struct ehci_hcd { /* one per controller */ | |||
199 | unsigned use_dummy_qh:1; /* AMD Frame List table quirk*/ | 199 | unsigned use_dummy_qh:1; /* AMD Frame List table quirk*/ |
200 | unsigned has_synopsys_hc_bug:1; /* Synopsys HC */ | 200 | unsigned has_synopsys_hc_bug:1; /* Synopsys HC */ |
201 | unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */ | 201 | unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */ |
202 | unsigned need_oc_pp_cycle:1; /* MPC834X port power */ | ||
202 | 203 | ||
203 | /* required for usb32 quirk */ | 204 | /* required for usb32 quirk */ |
204 | #define OHCI_CTRL_HCFS (3 << 6) | 205 | #define OHCI_CTRL_HCFS (3 << 6) |