kernel: add preliminary support for linux 3.3
[openwrt/staging/mkresin.git] / target / linux / generic / patches-3.3 / 102-ehci_hcd_ignore_oc.patch
1 --- a/drivers/usb/host/ehci-hcd.c
2 +++ b/drivers/usb/host/ehci-hcd.c
3 @@ -795,7 +795,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" : "");
9
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 @@ -578,7 +578,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.
17 */
18 - if (!ignore_oc)
19 + if (!ignore_oc && !ehci->ignore_oc)
20 mask = PORT_CSC | PORT_PEC | PORT_OCC;
21 else
22 mask = PORT_CSC | PORT_PEC;
23 @@ -803,7 +803,7 @@ static int ehci_hub_control (
24 if (temp & PORT_PEC)
25 status |= USB_PORT_STAT_C_ENABLE << 16;
26
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;
30
31 /*
32 --- a/drivers/usb/host/ehci.h
33 +++ b/drivers/usb/host/ehci.h
34 @@ -147,6 +147,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;
39
40 /* required for usb32 quirk */
41 #define OHCI_CTRL_HCFS (3 << 6)