1 --- a/drivers/usb/host/ehci-hcd.c
2 +++ b/drivers/usb/host/ehci-hcd.c
3 @@ -746,7 +746,7 @@ static int ehci_run (struct usb_hcd *hcd
4 "USB %x.%x started, EHCI %x.%02x%s\n",
5 ((ehci->sbrn & 0xf0)>>4), (ehci->sbrn & 0x0f),
6 temp >> 8, temp & 0xff,
7 - ignore_oc ? ", overcurrent ignored" : "");
8 + (ignore_oc || ehci->ignore_oc) ? ", overcurrent ignored" : "");
10 ehci_writel(ehci, INTR_MASK,
11 &ehci->regs->intr_enable); /* Turn On Interrupts */
12 --- a/drivers/usb/host/ehci-hub.c
13 +++ b/drivers/usb/host/ehci-hub.c
14 @@ -655,7 +655,7 @@ ehci_hub_status_data (struct usb_hcd *hc
15 * always set, seem to clear PORT_OCC and PORT_CSC when writing to
16 * PORT_POWER; that's surprising, but maybe within-spec.
19 + if (!ignore_oc && !ehci->ignore_oc)
20 mask = PORT_CSC | PORT_PEC | PORT_OCC;
22 mask = PORT_CSC | PORT_PEC;
23 @@ -880,7 +880,7 @@ static int ehci_hub_control (
25 status |= USB_PORT_STAT_C_ENABLE << 16;
27 - if ((temp & PORT_OCC) && !ignore_oc){
28 + if ((temp & PORT_OCC) && (!ignore_oc && !ehci->ignore_oc)){
29 status |= USB_PORT_STAT_C_OVERCURRENT << 16;
32 --- a/drivers/usb/host/ehci.h
33 +++ b/drivers/usb/host/ehci.h
34 @@ -138,6 +138,7 @@ struct ehci_hcd { /* one per controlle
35 unsigned use_dummy_qh:1; /* AMD Frame List table quirk*/
36 unsigned has_synopsys_hc_bug:1; /* Synopsys HC */
37 unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */
38 + unsigned ignore_oc:1;
40 /* required for usb32 quirk */
41 #define OHCI_CTRL_HCFS (3 << 6)