aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/host/ehci-fsl.c9
-rw-r--r--drivers/usb/host/ehci-hub.c3
-rw-r--r--drivers/usb/host/ehci.h1
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)