]>
Commit | Line | Data |
---|---|---|
23cd1385 RB |
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 | * | |
a187559e | 14 | * Ported to U-Boot by: Thomas Smits <[email protected]> and |
23cd1385 RB |
15 | * Remy Bohmer <[email protected]> |
16 | */ | |
17 | #ifdef CONFIG_USB_GADGET_NET2280 | |
6142e0ae | 18 | #define gadget_is_net2280(g) (!strcmp("net2280", (g)->name)) |
23cd1385 RB |
19 | #else |
20 | #define gadget_is_net2280(g) 0 | |
21 | #endif | |
22 | ||
23 | #ifdef CONFIG_USB_GADGET_AMD5536UDC | |
6142e0ae | 24 | #define gadget_is_amd5536udc(g) (!strcmp("amd5536udc", (g)->name)) |
23cd1385 RB |
25 | #else |
26 | #define gadget_is_amd5536udc(g) 0 | |
27 | #endif | |
28 | ||
29 | #ifdef CONFIG_USB_GADGET_DUMMY_HCD | |
6142e0ae | 30 | #define gadget_is_dummy(g) (!strcmp("dummy_udc", (g)->name)) |
23cd1385 RB |
31 | #else |
32 | #define gadget_is_dummy(g) 0 | |
33 | #endif | |
34 | ||
35 | #ifdef CONFIG_USB_GADGET_PXA2XX | |
6142e0ae | 36 | #define gadget_is_pxa(g) (!strcmp("pxa2xx_udc", (g)->name)) |
23cd1385 RB |
37 | #else |
38 | #define gadget_is_pxa(g) 0 | |
39 | #endif | |
40 | ||
41 | #ifdef CONFIG_USB_GADGET_GOKU | |
6142e0ae | 42 | #define gadget_is_goku(g) (!strcmp("goku_udc", (g)->name)) |
23cd1385 RB |
43 | #else |
44 | #define gadget_is_goku(g) 0 | |
45 | #endif | |
46 | ||
47 | /* SH3 UDC -- not yet ported 2.4 --> 2.6 */ | |
48 | #ifdef CONFIG_USB_GADGET_SUPERH | |
6142e0ae | 49 | #define gadget_is_sh(g) (!strcmp("sh_udc", (g)->name)) |
23cd1385 RB |
50 | #else |
51 | #define gadget_is_sh(g) 0 | |
52 | #endif | |
53 | ||
54 | /* not yet stable on 2.6 (would help "original Zaurus") */ | |
55 | #ifdef CONFIG_USB_GADGET_SA1100 | |
6142e0ae | 56 | #define gadget_is_sa1100(g) (!strcmp("sa1100_udc", (g)->name)) |
23cd1385 RB |
57 | #else |
58 | #define gadget_is_sa1100(g) 0 | |
59 | #endif | |
60 | ||
23cd1385 RB |
61 | /* handhelds.org tree (?) */ |
62 | #ifdef CONFIG_USB_GADGET_MQ11XX | |
6142e0ae | 63 | #define gadget_is_mq11xx(g) (!strcmp("mq11xx_udc", (g)->name)) |
23cd1385 RB |
64 | #else |
65 | #define gadget_is_mq11xx(g) 0 | |
66 | #endif | |
67 | ||
68 | #ifdef CONFIG_USB_GADGET_OMAP | |
6142e0ae | 69 | #define gadget_is_omap(g) (!strcmp("omap_udc", (g)->name)) |
23cd1385 RB |
70 | #else |
71 | #define gadget_is_omap(g) 0 | |
72 | #endif | |
73 | ||
74 | /* not yet ported 2.4 --> 2.6 */ | |
75 | #ifdef CONFIG_USB_GADGET_N9604 | |
6142e0ae | 76 | #define gadget_is_n9604(g) (!strcmp("n9604_udc", (g)->name)) |
23cd1385 RB |
77 | #else |
78 | #define gadget_is_n9604(g) 0 | |
79 | #endif | |
80 | ||
81 | /* various unstable versions available */ | |
82 | #ifdef CONFIG_USB_GADGET_PXA27X | |
6142e0ae | 83 | #define gadget_is_pxa27x(g) (!strcmp("pxa27x_udc", (g)->name)) |
23cd1385 RB |
84 | #else |
85 | #define gadget_is_pxa27x(g) 0 | |
86 | #endif | |
87 | ||
88 | #ifdef CONFIG_USB_GADGET_ATMEL_USBA | |
6142e0ae | 89 | #define gadget_is_atmel_usba(g) (!strcmp("atmel_usba_udc", (g)->name)) |
23cd1385 RB |
90 | #else |
91 | #define gadget_is_atmel_usba(g) 0 | |
92 | #endif | |
93 | ||
94 | #ifdef CONFIG_USB_GADGET_S3C2410 | |
6142e0ae | 95 | #define gadget_is_s3c2410(g) (!strcmp("s3c2410_udc", (g)->name)) |
23cd1385 RB |
96 | #else |
97 | #define gadget_is_s3c2410(g) 0 | |
98 | #endif | |
99 | ||
100 | #ifdef CONFIG_USB_GADGET_AT91 | |
6142e0ae | 101 | #define gadget_is_at91(g) (!strcmp("at91_udc", (g)->name)) |
23cd1385 RB |
102 | #else |
103 | #define gadget_is_at91(g) 0 | |
104 | #endif | |
105 | ||
106 | /* status unclear */ | |
107 | #ifdef CONFIG_USB_GADGET_IMX | |
6142e0ae | 108 | #define gadget_is_imx(g) (!strcmp("imx_udc", (g)->name)) |
23cd1385 RB |
109 | #else |
110 | #define gadget_is_imx(g) 0 | |
111 | #endif | |
112 | ||
113 | #ifdef CONFIG_USB_GADGET_FSL_USB2 | |
6142e0ae | 114 | #define gadget_is_fsl_usb2(g) (!strcmp("fsl-usb2-udc", (g)->name)) |
23cd1385 RB |
115 | #else |
116 | #define gadget_is_fsl_usb2(g) 0 | |
117 | #endif | |
118 | ||
119 | /* Mentor high speed function controller */ | |
120 | /* from Montavista kernel (?) */ | |
121 | #ifdef CONFIG_USB_GADGET_MUSBHSFC | |
6142e0ae | 122 | #define gadget_is_musbhsfc(g) (!strcmp("musbhsfc_udc", (g)->name)) |
23cd1385 RB |
123 | #else |
124 | #define gadget_is_musbhsfc(g) 0 | |
125 | #endif | |
126 | ||
127 | /* Mentor high speed "dual role" controller, in peripheral role */ | |
95de1e2f | 128 | #ifdef CONFIG_USB_MUSB_GADGET |
eb81955b | 129 | #define gadget_is_musbhdrc(g) (!strcmp("musb-hdrc", (g)->name)) |
23cd1385 RB |
130 | #else |
131 | #define gadget_is_musbhdrc(g) 0 | |
132 | #endif | |
133 | ||
134 | /* from Montavista kernel (?) */ | |
135 | #ifdef CONFIG_USB_GADGET_MPC8272 | |
6142e0ae | 136 | #define gadget_is_mpc8272(g) (!strcmp("mpc8272_udc", (g)->name)) |
23cd1385 RB |
137 | #else |
138 | #define gadget_is_mpc8272(g) 0 | |
139 | #endif | |
140 | ||
141 | #ifdef CONFIG_USB_GADGET_M66592 | |
6142e0ae | 142 | #define gadget_is_m66592(g) (!strcmp("m66592_udc", (g)->name)) |
23cd1385 RB |
143 | #else |
144 | #define gadget_is_m66592(g) 0 | |
145 | #endif | |
146 | ||
f016f8ca MV |
147 | #ifdef CONFIG_CI_UDC |
148 | #define gadget_is_ci(g) (!strcmp("ci_udc", (g)->name)) | |
26cc5129 | 149 | #else |
f016f8ca | 150 | #define gadget_is_ci(g) 0 |
26cc5129 | 151 | #endif |
23cd1385 | 152 | |
64cfd3f9 KJS |
153 | #ifdef CONFIG_USB_GADGET_FOTG210 |
154 | #define gadget_is_fotg210(g) (!strcmp("fotg210_udc", (g)->name)) | |
155 | #else | |
156 | #define gadget_is_fotg210(g) 0 | |
157 | #endif | |
158 | ||
16bece51 MS |
159 | #ifdef CONFIG_USB_DWC3_GADGET |
160 | #define gadget_is_dwc3(g) (!strcmp("dwc3-gadget", (g)->name)) | |
161 | #else | |
162 | #define gadget_is_dwc3(g) 0 | |
163 | #endif | |
164 | ||
165 | ||
166 | ||
6142e0ae VK |
167 | /* |
168 | * CONFIG_USB_GADGET_SX2 | |
169 | * CONFIG_USB_GADGET_AU1X00 | |
170 | * ... | |
171 | */ | |
23cd1385 RB |
172 | |
173 | /** | |
174 | * usb_gadget_controller_number - support bcdDevice id convention | |
175 | * @gadget: the controller being driven | |
176 | * | |
177 | * Return a 2-digit BCD value associated with the peripheral controller, | |
178 | * suitable for use as part of a bcdDevice value, or a negative error code. | |
179 | * | |
180 | * NOTE: this convention is purely optional, and has no meaning in terms of | |
181 | * any USB specification. If you want to use a different convention in your | |
182 | * gadget driver firmware -- maybe a more formal revision ID -- feel free. | |
183 | * | |
184 | * Hosts see these bcdDevice numbers, and are allowed (but not encouraged!) | |
185 | * to change their behavior accordingly. For example it might help avoiding | |
186 | * some chip bug. | |
187 | */ | |
188 | static inline int usb_gadget_controller_number(struct usb_gadget *gadget) | |
189 | { | |
190 | if (gadget_is_net2280(gadget)) | |
191 | return 0x01; | |
192 | else if (gadget_is_dummy(gadget)) | |
193 | return 0x02; | |
194 | else if (gadget_is_pxa(gadget)) | |
195 | return 0x03; | |
196 | else if (gadget_is_sh(gadget)) | |
197 | return 0x04; | |
198 | else if (gadget_is_sa1100(gadget)) | |
199 | return 0x05; | |
200 | else if (gadget_is_goku(gadget)) | |
201 | return 0x06; | |
202 | else if (gadget_is_mq11xx(gadget)) | |
203 | return 0x07; | |
204 | else if (gadget_is_omap(gadget)) | |
205 | return 0x08; | |
23cd1385 | 206 | else if (gadget_is_n9604(gadget)) |
b9f4bc34 | 207 | return 0x09; |
23cd1385 | 208 | else if (gadget_is_pxa27x(gadget)) |
b9f4bc34 | 209 | return 0x10; |
23cd1385 | 210 | else if (gadget_is_s3c2410(gadget)) |
b9f4bc34 | 211 | return 0x11; |
23cd1385 | 212 | else if (gadget_is_at91(gadget)) |
b9f4bc34 | 213 | return 0x12; |
23cd1385 | 214 | else if (gadget_is_imx(gadget)) |
b9f4bc34 | 215 | return 0x13; |
23cd1385 | 216 | else if (gadget_is_musbhsfc(gadget)) |
b9f4bc34 | 217 | return 0x14; |
23cd1385 | 218 | else if (gadget_is_musbhdrc(gadget)) |
b9f4bc34 | 219 | return 0x15; |
23cd1385 | 220 | else if (gadget_is_mpc8272(gadget)) |
b9f4bc34 | 221 | return 0x16; |
23cd1385 | 222 | else if (gadget_is_atmel_usba(gadget)) |
b9f4bc34 | 223 | return 0x17; |
23cd1385 | 224 | else if (gadget_is_fsl_usb2(gadget)) |
b9f4bc34 | 225 | return 0x18; |
23cd1385 | 226 | else if (gadget_is_amd5536udc(gadget)) |
b9f4bc34 | 227 | return 0x19; |
23cd1385 | 228 | else if (gadget_is_m66592(gadget)) |
b9f4bc34 | 229 | return 0x20; |
f016f8ca | 230 | else if (gadget_is_ci(gadget)) |
b9f4bc34 | 231 | return 0x21; |
64cfd3f9 KJS |
232 | else if (gadget_is_fotg210(gadget)) |
233 | return 0x22; | |
23cd1385 RB |
234 | return -ENOENT; |
235 | } |