]>
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 | ||
23cd1385 | 94 | #ifdef CONFIG_USB_GADGET_AT91 |
6142e0ae | 95 | #define gadget_is_at91(g) (!strcmp("at91_udc", (g)->name)) |
23cd1385 RB |
96 | #else |
97 | #define gadget_is_at91(g) 0 | |
98 | #endif | |
99 | ||
100 | /* status unclear */ | |
101 | #ifdef CONFIG_USB_GADGET_IMX | |
6142e0ae | 102 | #define gadget_is_imx(g) (!strcmp("imx_udc", (g)->name)) |
23cd1385 RB |
103 | #else |
104 | #define gadget_is_imx(g) 0 | |
105 | #endif | |
106 | ||
107 | #ifdef CONFIG_USB_GADGET_FSL_USB2 | |
6142e0ae | 108 | #define gadget_is_fsl_usb2(g) (!strcmp("fsl-usb2-udc", (g)->name)) |
23cd1385 RB |
109 | #else |
110 | #define gadget_is_fsl_usb2(g) 0 | |
111 | #endif | |
112 | ||
113 | /* Mentor high speed function controller */ | |
114 | /* from Montavista kernel (?) */ | |
115 | #ifdef CONFIG_USB_GADGET_MUSBHSFC | |
6142e0ae | 116 | #define gadget_is_musbhsfc(g) (!strcmp("musbhsfc_udc", (g)->name)) |
23cd1385 RB |
117 | #else |
118 | #define gadget_is_musbhsfc(g) 0 | |
119 | #endif | |
120 | ||
121 | /* Mentor high speed "dual role" controller, in peripheral role */ | |
95de1e2f | 122 | #ifdef CONFIG_USB_MUSB_GADGET |
eb81955b | 123 | #define gadget_is_musbhdrc(g) (!strcmp("musb-hdrc", (g)->name)) |
23cd1385 RB |
124 | #else |
125 | #define gadget_is_musbhdrc(g) 0 | |
126 | #endif | |
127 | ||
23cd1385 | 128 | #ifdef CONFIG_USB_GADGET_M66592 |
6142e0ae | 129 | #define gadget_is_m66592(g) (!strcmp("m66592_udc", (g)->name)) |
23cd1385 RB |
130 | #else |
131 | #define gadget_is_m66592(g) 0 | |
132 | #endif | |
133 | ||
f016f8ca MV |
134 | #ifdef CONFIG_CI_UDC |
135 | #define gadget_is_ci(g) (!strcmp("ci_udc", (g)->name)) | |
26cc5129 | 136 | #else |
f016f8ca | 137 | #define gadget_is_ci(g) 0 |
26cc5129 | 138 | #endif |
23cd1385 | 139 | |
64cfd3f9 KJS |
140 | #ifdef CONFIG_USB_GADGET_FOTG210 |
141 | #define gadget_is_fotg210(g) (!strcmp("fotg210_udc", (g)->name)) | |
142 | #else | |
143 | #define gadget_is_fotg210(g) 0 | |
144 | #endif | |
145 | ||
16bece51 MS |
146 | #ifdef CONFIG_USB_DWC3_GADGET |
147 | #define gadget_is_dwc3(g) (!strcmp("dwc3-gadget", (g)->name)) | |
148 | #else | |
149 | #define gadget_is_dwc3(g) 0 | |
150 | #endif | |
151 | ||
23cd1385 RB |
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_sh(gadget)) | |
176 | return 0x04; | |
177 | else if (gadget_is_sa1100(gadget)) | |
178 | return 0x05; | |
179 | else if (gadget_is_goku(gadget)) | |
180 | return 0x06; | |
181 | else if (gadget_is_mq11xx(gadget)) | |
182 | return 0x07; | |
183 | else if (gadget_is_omap(gadget)) | |
184 | return 0x08; | |
23cd1385 | 185 | else if (gadget_is_n9604(gadget)) |
b9f4bc34 | 186 | return 0x09; |
23cd1385 | 187 | else if (gadget_is_pxa27x(gadget)) |
b9f4bc34 | 188 | return 0x10; |
23cd1385 | 189 | else if (gadget_is_at91(gadget)) |
b9f4bc34 | 190 | return 0x12; |
23cd1385 | 191 | else if (gadget_is_imx(gadget)) |
b9f4bc34 | 192 | return 0x13; |
23cd1385 | 193 | else if (gadget_is_musbhsfc(gadget)) |
b9f4bc34 | 194 | return 0x14; |
23cd1385 | 195 | else if (gadget_is_musbhdrc(gadget)) |
b9f4bc34 | 196 | return 0x15; |
23cd1385 | 197 | else if (gadget_is_atmel_usba(gadget)) |
b9f4bc34 | 198 | return 0x17; |
23cd1385 | 199 | else if (gadget_is_fsl_usb2(gadget)) |
b9f4bc34 | 200 | return 0x18; |
23cd1385 | 201 | else if (gadget_is_amd5536udc(gadget)) |
b9f4bc34 | 202 | return 0x19; |
23cd1385 | 203 | else if (gadget_is_m66592(gadget)) |
b9f4bc34 | 204 | return 0x20; |
f016f8ca | 205 | else if (gadget_is_ci(gadget)) |
b9f4bc34 | 206 | return 0x21; |
64cfd3f9 KJS |
207 | else if (gadget_is_fotg210(gadget)) |
208 | return 0x22; | |
c73251ea JJH |
209 | else if (gadget_is_dwc3(gadget)) |
210 | return 0x23; | |
23cd1385 RB |
211 | return -ENOENT; |
212 | } |