1 --- a/drivers/usb/host/ehci-hcd.c
2 +++ b/drivers/usb/host/ehci-hcd.c
3 @@ -744,7 +744,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 @@ -873,7 +873,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 @@ -134,6 +134,7 @@ struct ehci_hcd { /* one per controlle
35 unsigned amd_pll_fix:1;
36 unsigned fs_i_thresh:1; /* Intel iso scheduling */
37 unsigned use_dummy_qh:1; /* AMD Frame List table quirk*/
38 + unsigned ignore_oc:1;
40 /* required for usb32 quirk */
41 #define OHCI_CTRL_HCFS (3 << 6)