4489e701bfd57907e6ad63b91686254306e50379
[openwrt.git] / target / linux / pxa / patches-2.6.21 / 008-pxa2xx_udc.patch
1 Index: linux-2.6.21gum/drivers/usb/gadget/pxa2xx_udc.c
2 ===================================================================
3 --- linux-2.6.21gum.orig/drivers/usb/gadget/pxa2xx_udc.c
4 +++ linux-2.6.21gum/drivers/usb/gadget/pxa2xx_udc.c
5 @@ -51,6 +51,7 @@
6  #include <asm/mach-types.h>
7  #include <asm/unaligned.h>
8  #include <asm/hardware.h>
9 +#include <asm/mach/irq.h>
10  #ifdef CONFIG_ARCH_PXA
11  #include <asm/arch/pxa-regs.h>
12  #endif
13 @@ -101,6 +102,10 @@ static const char ep0name [] = "ep0";
14  
15  #endif
16  
17 +#ifdef CONFIG_ARCH_GUMSTIX
18 +#undef CONFIG_USB_PXA2XX_SMALL
19 +#endif
20 +
21  #include "pxa2xx_udc.h"
22  
23  
24 @@ -2541,6 +2546,41 @@ static int __init pxa2xx_udc_probe(struc
25         }
26  #endif
27  
28 +       /* Reset UDCCS register to be able to recover from whatever
29 +        * state UDC was previously in. */
30 +       *dev->ep[ 2].reg_udccs = UDCCS_BO_RPC | UDCCS_BO_SST;
31 +#ifndef CONFIG_USB_PXA2XX_SMALL
32 +       *dev->ep[ 7].reg_udccs = UDCCS_BO_RPC | UDCCS_BO_SST;
33 +        *dev->ep[12].reg_udccs = UDCCS_BO_RPC | UDCCS_BO_SST;
34 +#endif
35 +
36 +       *dev->ep[ 1].reg_udccs = UDCCS_BI_TPC | UDCCS_BI_FTF |
37 +               UDCCS_BI_TUR | UDCCS_BI_SST | UDCCS_BI_TSP;
38 +#ifndef CONFIG_USB_PXA2XX_SMALL
39 +       *dev->ep[ 6].reg_udccs = UDCCS_BI_TPC | UDCCS_BI_FTF |
40 +               UDCCS_BI_TUR | UDCCS_BI_SST | UDCCS_BI_TSP;
41 +       *dev->ep[11].reg_udccs = UDCCS_BI_TPC | UDCCS_BI_FTF |
42 +               UDCCS_BI_TUR | UDCCS_BI_SST | UDCCS_BI_TSP;
43 +
44 +       *dev->ep[ 3].reg_udccs = UDCCS_II_TPC | UDCCS_II_FTF |
45 +               UDCCS_II_TUR | UDCCS_II_TSP;
46 +       *dev->ep[ 8].reg_udccs = UDCCS_II_TPC | UDCCS_II_FTF |
47 +               UDCCS_II_TUR | UDCCS_II_TSP;
48 +       *dev->ep[13].reg_udccs = UDCCS_II_TPC | UDCCS_II_FTF |
49 +               UDCCS_II_TUR | UDCCS_II_TSP;
50 +
51 +       *dev->ep[ 4].reg_udccs = UDCCS_IO_RPC | UDCCS_IO_ROF;
52 +       *dev->ep[ 9].reg_udccs = UDCCS_IO_RPC | UDCCS_IO_ROF;
53 +       *dev->ep[11].reg_udccs = UDCCS_IO_RPC | UDCCS_IO_ROF;
54 +
55 +       *dev->ep[ 5].reg_udccs = UDCCS_INT_TPC | UDCCS_INT_FTF |
56 +               UDCCS_INT_TUR | UDCCS_INT_SST;
57 +       *dev->ep[10].reg_udccs = UDCCS_INT_TPC | UDCCS_INT_FTF |
58 +               UDCCS_INT_TUR | UDCCS_INT_SST;
59 +       *dev->ep[15].reg_udccs = UDCCS_INT_TPC | UDCCS_INT_FTF |
60 +               UDCCS_INT_TUR | UDCCS_INT_SST;
61 +#endif
62 +
63         /* other non-static parts of init */
64         dev->dev = &pdev->dev;
65         dev->mach = pdev->dev.platform_data;