Root/
Source at commit 8682a74685d7e733725f15e8e9917d9d5c5fe399 created 13 years 11 months ago. By Lars-Peter Clausen, Add jz4740 udc driver | |
---|---|
1 | /* |
2 | * USB device controllers have lots of quirks. Use these macros in |
3 | * gadget drivers or other code that needs to deal with them, and which |
4 | * autoconfigures instead of using early binding to the hardware. |
5 | * |
6 | * This SHOULD eventually work like the ARM mach_is_*() stuff, driven by |
7 | * some config file that gets updated as new hardware is supported. |
8 | * (And avoiding all runtime comparisons in typical one-choice configs!) |
9 | * |
10 | * NOTE: some of these controller drivers may not be available yet. |
11 | * Some are available on 2.4 kernels; several are available, but not |
12 | * yet pushed in the 2.6 mainline tree. |
13 | */ |
14 | |
15 | #ifndef __GADGET_CHIPS_H |
16 | #define __GADGET_CHIPS_H |
17 | |
18 | #ifdef CONFIG_USB_GADGET_JZ4740 |
19 | #define gadget_is_jz4740(g) !strcmp("ingenic_hsusb", (g)->name) |
20 | #else |
21 | #define gadget_is_jz4740(g) 0 |
22 | #endif |
23 | |
24 | #ifdef CONFIG_USB_GADGET_NET2280 |
25 | #define gadget_is_net2280(g) !strcmp("net2280", (g)->name) |
26 | #else |
27 | #define gadget_is_net2280(g) 0 |
28 | #endif |
29 | |
30 | #ifdef CONFIG_USB_GADGET_AMD5536UDC |
31 | #define gadget_is_amd5536udc(g) !strcmp("amd5536udc", (g)->name) |
32 | #else |
33 | #define gadget_is_amd5536udc(g) 0 |
34 | #endif |
35 | |
36 | #ifdef CONFIG_USB_GADGET_DUMMY_HCD |
37 | #define gadget_is_dummy(g) !strcmp("dummy_udc", (g)->name) |
38 | #else |
39 | #define gadget_is_dummy(g) 0 |
40 | #endif |
41 | |
42 | #ifdef CONFIG_USB_GADGET_PXA25X |
43 | #define gadget_is_pxa(g) !strcmp("pxa25x_udc", (g)->name) |
44 | #else |
45 | #define gadget_is_pxa(g) 0 |
46 | #endif |
47 | |
48 | #ifdef CONFIG_USB_GADGET_GOKU |
49 | #define gadget_is_goku(g) !strcmp("goku_udc", (g)->name) |
50 | #else |
51 | #define gadget_is_goku(g) 0 |
52 | #endif |
53 | |
54 | #ifdef CONFIG_USB_GADGET_LH7A40X |
55 | #define gadget_is_lh7a40x(g) !strcmp("lh7a40x_udc", (g)->name) |
56 | #else |
57 | #define gadget_is_lh7a40x(g) 0 |
58 | #endif |
59 | |
60 | #ifdef CONFIG_USB_GADGET_OMAP |
61 | #define gadget_is_omap(g) !strcmp("omap_udc", (g)->name) |
62 | #else |
63 | #define gadget_is_omap(g) 0 |
64 | #endif |
65 | |
66 | /* various unstable versions available */ |
67 | #ifdef CONFIG_USB_GADGET_PXA27X |
68 | #define gadget_is_pxa27x(g) !strcmp("pxa27x_udc", (g)->name) |
69 | #else |
70 | #define gadget_is_pxa27x(g) 0 |
71 | #endif |
72 | |
73 | #ifdef CONFIG_USB_GADGET_ATMEL_USBA |
74 | #define gadget_is_atmel_usba(g) !strcmp("atmel_usba_udc", (g)->name) |
75 | #else |
76 | #define gadget_is_atmel_usba(g) 0 |
77 | #endif |
78 | |
79 | #ifdef CONFIG_USB_GADGET_S3C2410 |
80 | #define gadget_is_s3c2410(g) !strcmp("s3c2410_udc", (g)->name) |
81 | #else |
82 | #define gadget_is_s3c2410(g) 0 |
83 | #endif |
84 | |
85 | #ifdef CONFIG_USB_GADGET_AT91 |
86 | #define gadget_is_at91(g) !strcmp("at91_udc", (g)->name) |
87 | #else |
88 | #define gadget_is_at91(g) 0 |
89 | #endif |
90 | |
91 | #ifdef CONFIG_USB_GADGET_IMX |
92 | #define gadget_is_imx(g) !strcmp("imx_udc", (g)->name) |
93 | #else |
94 | #define gadget_is_imx(g) 0 |
95 | #endif |
96 | |
97 | #ifdef CONFIG_USB_GADGET_FSL_USB2 |
98 | #define gadget_is_fsl_usb2(g) !strcmp("fsl-usb2-udc", (g)->name) |
99 | #else |
100 | #define gadget_is_fsl_usb2(g) 0 |
101 | #endif |
102 | |
103 | /* Mentor high speed "dual role" controller, in peripheral role */ |
104 | #ifdef CONFIG_USB_GADGET_MUSB_HDRC |
105 | #define gadget_is_musbhdrc(g) !strcmp("musb_hdrc", (g)->name) |
106 | #else |
107 | #define gadget_is_musbhdrc(g) 0 |
108 | #endif |
109 | |
110 | #ifdef CONFIG_USB_GADGET_LANGWELL |
111 | #define gadget_is_langwell(g) (!strcmp("langwell_udc", (g)->name)) |
112 | #else |
113 | #define gadget_is_langwell(g) 0 |
114 | #endif |
115 | |
116 | #ifdef CONFIG_USB_GADGET_M66592 |
117 | #define gadget_is_m66592(g) !strcmp("m66592_udc", (g)->name) |
118 | #else |
119 | #define gadget_is_m66592(g) 0 |
120 | #endif |
121 | |
122 | /* Freescale CPM/QE UDC SUPPORT */ |
123 | #ifdef CONFIG_USB_GADGET_FSL_QE |
124 | #define gadget_is_fsl_qe(g) !strcmp("fsl_qe_udc", (g)->name) |
125 | #else |
126 | #define gadget_is_fsl_qe(g) 0 |
127 | #endif |
128 | |
129 | #ifdef CONFIG_USB_GADGET_CI13XXX |
130 | #define gadget_is_ci13xxx(g) (!strcmp("ci13xxx_udc", (g)->name)) |
131 | #else |
132 | #define gadget_is_ci13xxx(g) 0 |
133 | #endif |
134 | |
135 | // CONFIG_USB_GADGET_SX2 |
136 | // CONFIG_USB_GADGET_AU1X00 |
137 | // ... |
138 | |
139 | #ifdef CONFIG_USB_GADGET_R8A66597 |
140 | #define gadget_is_r8a66597(g) !strcmp("r8a66597_udc", (g)->name) |
141 | #else |
142 | #define gadget_is_r8a66597(g) 0 |
143 | #endif |
144 | |
145 | #ifdef CONFIG_USB_S3C_HSOTG |
146 | #define gadget_is_s3c_hsotg(g) (!strcmp("s3c-hsotg", (g)->name)) |
147 | #else |
148 | #define gadget_is_s3c_hsotg(g) 0 |
149 | #endif |
150 | |
151 | |
152 | /** |
153 | * usb_gadget_controller_number - support bcdDevice id convention |
154 | * @gadget: the controller being driven |
155 | * |
156 | * Return a 2-digit BCD value associated with the peripheral controller, |
157 | * suitable for use as part of a bcdDevice value, or a negative error code. |
158 | * |
159 | * NOTE: this convention is purely optional, and has no meaning in terms of |
160 | * any USB specification. If you want to use a different convention in your |
161 | * gadget driver firmware -- maybe a more formal revision ID -- feel free. |
162 | * |
163 | * Hosts see these bcdDevice numbers, and are allowed (but not encouraged!) |
164 | * to change their behavior accordingly. For example it might help avoiding |
165 | * some chip bug. |
166 | */ |
167 | static inline int usb_gadget_controller_number(struct usb_gadget *gadget) |
168 | { |
169 | if (gadget_is_net2280(gadget)) |
170 | return 0x01; |
171 | else if (gadget_is_dummy(gadget)) |
172 | return 0x02; |
173 | else if (gadget_is_pxa(gadget)) |
174 | return 0x03; |
175 | else if (gadget_is_goku(gadget)) |
176 | return 0x06; |
177 | else if (gadget_is_omap(gadget)) |
178 | return 0x08; |
179 | else if (gadget_is_lh7a40x(gadget)) |
180 | return 0x09; |
181 | else if (gadget_is_pxa27x(gadget)) |
182 | return 0x11; |
183 | else if (gadget_is_s3c2410(gadget)) |
184 | return 0x12; |
185 | else if (gadget_is_at91(gadget)) |
186 | return 0x13; |
187 | else if (gadget_is_imx(gadget)) |
188 | return 0x14; |
189 | else if (gadget_is_musbhdrc(gadget)) |
190 | return 0x16; |
191 | else if (gadget_is_atmel_usba(gadget)) |
192 | return 0x18; |
193 | else if (gadget_is_fsl_usb2(gadget)) |
194 | return 0x19; |
195 | else if (gadget_is_amd5536udc(gadget)) |
196 | return 0x20; |
197 | else if (gadget_is_m66592(gadget)) |
198 | return 0x21; |
199 | else if (gadget_is_fsl_qe(gadget)) |
200 | return 0x22; |
201 | else if (gadget_is_ci13xxx(gadget)) |
202 | return 0x23; |
203 | else if (gadget_is_langwell(gadget)) |
204 | return 0x24; |
205 | else if (gadget_is_r8a66597(gadget)) |
206 | return 0x25; |
207 | else if (gadget_is_s3c_hsotg(gadget)) |
208 | return 0x26; |
209 | else if (gadget_is_jz4740(gadget)) |
210 | return 0x27; |
211 | |
212 | return -ENOENT; |
213 | } |
214 | |
215 | |
216 | /** |
217 | * gadget_supports_altsettings - return true if altsettings work |
218 | * @gadget: the gadget in question |
219 | */ |
220 | static inline bool gadget_supports_altsettings(struct usb_gadget *gadget) |
221 | { |
222 | /* PXA 21x/25x/26x has no altsettings at all */ |
223 | if (gadget_is_pxa(gadget)) |
224 | return false; |
225 | |
226 | /* PXA 27x and 3xx have *broken* altsetting support */ |
227 | if (gadget_is_pxa27x(gadget)) |
228 | return false; |
229 | |
230 | /* Everything else is *presumably* fine ... */ |
231 | return true; |
232 | } |
233 | |
234 | #endif /* __GADGET_CHIPS_H */ |
235 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9