This source file includes following definitions.
- to_udc
1
2
3
4
5
6
7
8 #ifndef AT91_UDC_H
9 #define AT91_UDC_H
10
11
12
13
14
15
16 #define AT91_UDP_FRM_NUM 0x00
17 #define AT91_UDP_NUM (0x7ff << 0)
18 #define AT91_UDP_FRM_ERR (1 << 16)
19 #define AT91_UDP_FRM_OK (1 << 17)
20
21 #define AT91_UDP_GLB_STAT 0x04
22 #define AT91_UDP_FADDEN (1 << 0)
23 #define AT91_UDP_CONFG (1 << 1)
24 #define AT91_UDP_ESR (1 << 2)
25 #define AT91_UDP_RSMINPR (1 << 3)
26 #define AT91_UDP_RMWUPE (1 << 4)
27
28 #define AT91_UDP_FADDR 0x08
29 #define AT91_UDP_FADD (0x7f << 0)
30 #define AT91_UDP_FEN (1 << 8)
31
32 #define AT91_UDP_IER 0x10
33 #define AT91_UDP_IDR 0x14
34 #define AT91_UDP_IMR 0x18
35
36 #define AT91_UDP_ISR 0x1c
37 #define AT91_UDP_EP(n) (1 << (n))
38 #define AT91_UDP_RXSUSP (1 << 8)
39 #define AT91_UDP_RXRSM (1 << 9)
40 #define AT91_UDP_EXTRSM (1 << 10)
41 #define AT91_UDP_SOFINT (1 << 11)
42 #define AT91_UDP_ENDBUSRES (1 << 12)
43 #define AT91_UDP_WAKEUP (1 << 13)
44
45 #define AT91_UDP_ICR 0x20
46 #define AT91_UDP_RST_EP 0x28
47
48 #define AT91_UDP_CSR(n) (0x30+((n)*4))
49 #define AT91_UDP_TXCOMP (1 << 0)
50 #define AT91_UDP_RX_DATA_BK0 (1 << 1)
51 #define AT91_UDP_RXSETUP (1 << 2)
52 #define AT91_UDP_STALLSENT (1 << 3)
53 #define AT91_UDP_TXPKTRDY (1 << 4)
54 #define AT91_UDP_FORCESTALL (1 << 5)
55 #define AT91_UDP_RX_DATA_BK1 (1 << 6)
56 #define AT91_UDP_DIR (1 << 7)
57 #define AT91_UDP_EPTYPE (7 << 8)
58 #define AT91_UDP_EPTYPE_CTRL (0 << 8)
59 #define AT91_UDP_EPTYPE_ISO_OUT (1 << 8)
60 #define AT91_UDP_EPTYPE_BULK_OUT (2 << 8)
61 #define AT91_UDP_EPTYPE_INT_OUT (3 << 8)
62 #define AT91_UDP_EPTYPE_ISO_IN (5 << 8)
63 #define AT91_UDP_EPTYPE_BULK_IN (6 << 8)
64 #define AT91_UDP_EPTYPE_INT_IN (7 << 8)
65 #define AT91_UDP_DTGLE (1 << 11)
66 #define AT91_UDP_EPEDS (1 << 15)
67 #define AT91_UDP_RXBYTECNT (0x7ff << 16)
68
69 #define AT91_UDP_FDR(n) (0x50+((n)*4))
70
71 #define AT91_UDP_TXVC 0x74
72 #define AT91_UDP_TXVC_TXVDIS (1 << 8)
73 #define AT91_UDP_TXVC_PUON (1 << 9)
74
75
76
77
78
79
80
81 #define NUM_ENDPOINTS 6
82
83
84
85
86
87 #define MINIMUS_INTERRUPTUS \
88 (AT91_UDP_ENDBUSRES | AT91_UDP_RXRSM | AT91_UDP_RXSUSP)
89
90 struct at91_ep {
91 struct usb_ep ep;
92 struct list_head queue;
93 struct at91_udc *udc;
94 void __iomem *creg;
95
96 unsigned maxpacket:16;
97 u8 int_mask;
98 unsigned is_pingpong:1;
99
100 unsigned stopped:1;
101 unsigned is_in:1;
102 unsigned is_iso:1;
103 unsigned fifo_bank:1;
104 };
105
106 struct at91_udc_caps {
107 int (*init)(struct at91_udc *udc);
108 void (*pullup)(struct at91_udc *udc, int is_on);
109 };
110
111 struct at91_udc_data {
112 int vbus_pin;
113 u8 vbus_active_low;
114 u8 vbus_polled;
115 int pullup_pin;
116 u8 pullup_active_low;
117 };
118
119
120
121
122
123 struct at91_udc {
124 struct usb_gadget gadget;
125 struct at91_ep ep[NUM_ENDPOINTS];
126 struct usb_gadget_driver *driver;
127 const struct at91_udc_caps *caps;
128 unsigned vbus:1;
129 unsigned enabled:1;
130 unsigned clocked:1;
131 unsigned suspended:1;
132 unsigned req_pending:1;
133 unsigned wait_for_addr_ack:1;
134 unsigned wait_for_config_ack:1;
135 unsigned active_suspend:1;
136 u8 addr;
137 struct at91_udc_data board;
138 struct clk *iclk, *fclk;
139 struct platform_device *pdev;
140 struct proc_dir_entry *pde;
141 void __iomem *udp_baseaddr;
142 int udp_irq;
143 spinlock_t lock;
144 struct timer_list vbus_timer;
145 struct work_struct vbus_timer_work;
146 struct regmap *matrix;
147 };
148
149 static inline struct at91_udc *to_udc(struct usb_gadget *g)
150 {
151 return container_of(g, struct at91_udc, gadget);
152 }
153
154 struct at91_request {
155 struct usb_request req;
156 struct list_head queue;
157 };
158
159
160
161 #ifdef VERBOSE_DEBUG
162 # define VDBG DBG
163 #else
164 # define VDBG(stuff...) do{}while(0)
165 #endif
166
167 #ifdef PACKET_TRACE
168 # define PACKET VDBG
169 #else
170 # define PACKET(stuff...) do{}while(0)
171 #endif
172
173 #define ERR(stuff...) pr_err("udc: " stuff)
174 #define WARNING(stuff...) pr_warn("udc: " stuff)
175 #define INFO(stuff...) pr_info("udc: " stuff)
176 #define DBG(stuff...) pr_debug("udc: " stuff)
177
178 #endif
179