1 #ifndef _GADGET_CHIPS_H_
2 #define _GADGET_CHIPS_H_
4 * USB device controllers have lots of quirks. Use these macros in
5 * gadget drivers or other code that needs to deal with them, and which
6 * autoconfigures instead of using early binding to the hardware.
8 * This SHOULD eventually work like the ARM mach_is_*() stuff, driven by
9 * some config file that gets updated as new hardware is supported.
10 * (And avoiding all runtime comparisons in typical one-choice configs!)
12 * NOTE: some of these controller drivers may not be available yet.
13 * Some are available on 2.4 kernels; several are available, but not
14 * yet pushed in the 2.6 mainline tree.
16 * Ported to U-boot by: Thomas Smits <ts.smits@gmail.com> and
17 * Remy Bohmer <linux@bohmer.net>
19 #ifdef CONFIG_USB_GADGET_NET2280
20 #define gadget_is_net2280(g) (!strcmp("net2280", (g)->name))
22 #define gadget_is_net2280(g) 0
25 #ifdef CONFIG_USB_GADGET_AMD5536UDC
26 #define gadget_is_amd5536udc(g) (!strcmp("amd5536udc", (g)->name))
28 #define gadget_is_amd5536udc(g) 0
31 #ifdef CONFIG_USB_GADGET_DUMMY_HCD
32 #define gadget_is_dummy(g) (!strcmp("dummy_udc", (g)->name))
34 #define gadget_is_dummy(g) 0
37 #ifdef CONFIG_USB_GADGET_PXA2XX
38 #define gadget_is_pxa(g) (!strcmp("pxa2xx_udc", (g)->name))
40 #define gadget_is_pxa(g) 0
43 #ifdef CONFIG_USB_GADGET_GOKU
44 #define gadget_is_goku(g) (!strcmp("goku_udc", (g)->name))
46 #define gadget_is_goku(g) 0
49 /* SH3 UDC -- not yet ported 2.4 --> 2.6 */
50 #ifdef CONFIG_USB_GADGET_SUPERH
51 #define gadget_is_sh(g) (!strcmp("sh_udc", (g)->name))
53 #define gadget_is_sh(g) 0
56 /* not yet stable on 2.6 (would help "original Zaurus") */
57 #ifdef CONFIG_USB_GADGET_SA1100
58 #define gadget_is_sa1100(g) (!strcmp("sa1100_udc", (g)->name))
60 #define gadget_is_sa1100(g) 0
63 #ifdef CONFIG_USB_GADGET_LH7A40X
64 #define gadget_is_lh7a40x(g) (!strcmp("lh7a40x_udc", (g)->name))
66 #define gadget_is_lh7a40x(g) 0
69 /* handhelds.org tree (?) */
70 #ifdef CONFIG_USB_GADGET_MQ11XX
71 #define gadget_is_mq11xx(g) (!strcmp("mq11xx_udc", (g)->name))
73 #define gadget_is_mq11xx(g) 0
76 #ifdef CONFIG_USB_GADGET_OMAP
77 #define gadget_is_omap(g) (!strcmp("omap_udc", (g)->name))
79 #define gadget_is_omap(g) 0
82 /* not yet ported 2.4 --> 2.6 */
83 #ifdef CONFIG_USB_GADGET_N9604
84 #define gadget_is_n9604(g) (!strcmp("n9604_udc", (g)->name))
86 #define gadget_is_n9604(g) 0
89 /* various unstable versions available */
90 #ifdef CONFIG_USB_GADGET_PXA27X
91 #define gadget_is_pxa27x(g) (!strcmp("pxa27x_udc", (g)->name))
93 #define gadget_is_pxa27x(g) 0
96 #ifdef CONFIG_USB_GADGET_ATMEL_USBA
97 #define gadget_is_atmel_usba(g) (!strcmp("atmel_usba_udc", (g)->name))
99 #define gadget_is_atmel_usba(g) 0
102 #ifdef CONFIG_USB_GADGET_S3C2410
103 #define gadget_is_s3c2410(g) (!strcmp("s3c2410_udc", (g)->name))
105 #define gadget_is_s3c2410(g) 0
108 #ifdef CONFIG_USB_GADGET_AT91
109 #define gadget_is_at91(g) (!strcmp("at91_udc", (g)->name))
111 #define gadget_is_at91(g) 0
115 #ifdef CONFIG_USB_GADGET_IMX
116 #define gadget_is_imx(g) (!strcmp("imx_udc", (g)->name))
118 #define gadget_is_imx(g) 0
121 #ifdef CONFIG_USB_GADGET_FSL_USB2
122 #define gadget_is_fsl_usb2(g) (!strcmp("fsl-usb2-udc", (g)->name))
124 #define gadget_is_fsl_usb2(g) 0
127 /* Mentor high speed function controller */
128 /* from Montavista kernel (?) */
129 #ifdef CONFIG_USB_GADGET_MUSBHSFC
130 #define gadget_is_musbhsfc(g) (!strcmp("musbhsfc_udc", (g)->name))
132 #define gadget_is_musbhsfc(g) 0
135 /* Mentor high speed "dual role" controller, in peripheral role */
136 #ifdef CONFIG_USB_GADGET_MUSB_HDRC
137 #define gadget_is_musbhdrc(g) (!strcmp("musb_hdrc", (g)->name))
139 #define gadget_is_musbhdrc(g) 0
142 /* from Montavista kernel (?) */
143 #ifdef CONFIG_USB_GADGET_MPC8272
144 #define gadget_is_mpc8272(g) (!strcmp("mpc8272_udc", (g)->name))
146 #define gadget_is_mpc8272(g) 0
149 #ifdef CONFIG_USB_GADGET_M66592
150 #define gadget_is_m66592(g) (!strcmp("m66592_udc", (g)->name))
152 #define gadget_is_m66592(g) 0
155 #ifdef CONFIG_USB_GADGET_SC8800G
156 #define gadget_is_sprd_otg(g) !strcmp("dwc_otg", (g)->name)
158 #define gadget_is_sprd_otg(g) 0
162 * CONFIG_USB_GADGET_SX2
163 * CONFIG_USB_GADGET_AU1X00
168 * usb_gadget_controller_number - support bcdDevice id convention
169 * @gadget: the controller being driven
171 * Return a 2-digit BCD value associated with the peripheral controller,
172 * suitable for use as part of a bcdDevice value, or a negative error code.
174 * NOTE: this convention is purely optional, and has no meaning in terms of
175 * any USB specification. If you want to use a different convention in your
176 * gadget driver firmware -- maybe a more formal revision ID -- feel free.
178 * Hosts see these bcdDevice numbers, and are allowed (but not encouraged!)
179 * to change their behavior accordingly. For example it might help avoiding
182 static inline int usb_gadget_controller_number(struct usb_gadget *gadget)
184 if (gadget_is_net2280(gadget))
186 else if (gadget_is_dummy(gadget))
188 else if (gadget_is_pxa(gadget))
190 else if (gadget_is_sh(gadget))
192 else if (gadget_is_sa1100(gadget))
194 else if (gadget_is_goku(gadget))
196 else if (gadget_is_mq11xx(gadget))
198 else if (gadget_is_omap(gadget))
200 else if (gadget_is_lh7a40x(gadget))
202 else if (gadget_is_n9604(gadget))
204 else if (gadget_is_pxa27x(gadget))
206 else if (gadget_is_s3c2410(gadget))
208 else if (gadget_is_at91(gadget))
210 else if (gadget_is_imx(gadget))
212 else if (gadget_is_musbhsfc(gadget))
214 else if (gadget_is_musbhdrc(gadget))
216 else if (gadget_is_mpc8272(gadget))
218 else if (gadget_is_atmel_usba(gadget))
220 else if (gadget_is_fsl_usb2(gadget))
222 else if (gadget_is_amd5536udc(gadget))
224 else if (gadget_is_m66592(gadget))
226 else if (gadget_is_sprd_otg(gadget))
232 * * gadget_supports_altsettings - return true if altsettings work
233 * * @gadget: the gadget in question
235 static inline bool gadget_supports_altsettings(struct usb_gadget *gadget)
237 /* PXA 21x/25x/26x has no altsettings at all */
238 if (gadget_is_pxa(gadget))
241 /* PXA 27x and 3xx have *broken* altsetting support */
242 if (gadget_is_pxa27x(gadget))
245 /* SH3 hardware just doesn't do altsettings */
246 if (gadget_is_sh(gadget))
249 /* Everything else is *presumably* fine ... */