basic pxa support; likely broken
[openwrt.git] / target / linux / pxa-2.6 / patches / 002-usb_gadget.patch
1 diff -NurbwB linux-2.6.17/drivers/usb/gadget/pxa2xx_udc.c linux-2.6.17-patched/drivers/usb/gadget/pxa2xx_udc.c
2 --- linux-2.6.17/drivers/usb/gadget/pxa2xx_udc.c        2006-06-17 18:49:35.000000000 -0700
3 +++ linux-2.6.17-patched/drivers/usb/gadget/pxa2xx_udc.c        2006-09-11 13:02:39.000000000 -0700
4 @@ -87,8 +87,8 @@
5  static const char ep0name [] = "ep0";
6  
7  
8 -// #define     USE_DMA
9 -// #define     USE_OUT_DMA
10 +#define        USE_DMA
11 +#define        USE_OUT_DMA
12  // #define     DISABLE_TEST_MODE
13  
14  #ifdef CONFIG_ARCH_IXP4XX
15 @@ -1513,7 +1513,7 @@
16  #endif
17  
18         /* try to clear these bits before we enable the udc */
19 -       udc_ack_int_UDCCR(UDCCR_SUSIR|/*UDCCR_RSTIR|*/UDCCR_RESIR);
20 +       udc_ack_int_UDCCR(UDCCR_SUSIR|UDCCR_RSTIR|UDCCR_RESIR);
21  
22         ep0_idle(dev);
23         dev->gadget.speed = USB_SPEED_UNKNOWN;
24 @@ -2043,6 +2043,9 @@
25         struct pxa2xx_udc       *dev = _dev;
26         int                     handled;
27  
28 +
29 +       udc_set_mask_UDCCR( UDCCR_REM | UDCCR_SRM);
30 +
31         dev->stats.irqs++;
32         HEX_DISPLAY(dev->stats.irqs);
33         do {
34 @@ -2137,6 +2139,8 @@
35                 /* we could also ask for 1 msec SOF (SIR) interrupts */
36  
37         } while (handled);
38 +
39 +       udc_clear_mask_UDCCR( UDCCR_SRM | UDCCR_REM);
40         return IRQ_HANDLED;
41  }
42  
43 @@ -2437,6 +2441,7 @@
44         int retval, out_dma = 1;
45         u32 chiprev;
46  
47 +       local_irq_disable();
48         /* insist on Intel/ARM/XScale */
49         asm("mrc%? p15, 0, %0, c0, c0" : "=r" (chiprev));
50         if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) {
51 @@ -2553,6 +2558,7 @@
52  #endif
53         }
54  #endif
55 +       local_irq_enable();
56         create_proc_files();
57  
58         return 0;