gadget_chips.h revision c41442474a26984abaa094e96e42182868eab658
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * USB device controllers have lots of quirks.  Use these macros in
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * gadget drivers or other code that needs to deal with them, and which
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * autoconfigures instead of using early binding to the hardware.
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell * This SHOULD eventually work like the ARM mach_is_*() stuff, driven by
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * some config file that gets updated as new hardware is supported.
81c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell * (And avoiding all runtime comparisons in typical one-choice configs!)
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * NOTE:  some of these controller drivers may not be available yet.
117f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell * Some are available on 2.4 kernels; several are available, but not
127f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell * yet pushed in the 2.6 mainline tree.
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
14e67d70f2f55d90c79dcb384ad5b798f0f9a68085Felipe Balbi
15e67d70f2f55d90c79dcb384ad5b798f0f9a68085Felipe Balbi#ifndef __GADGET_CHIPS_H
16e67d70f2f55d90c79dcb384ad5b798f0f9a68085Felipe Balbi#define __GADGET_CHIPS_H
17e67d70f2f55d90c79dcb384ad5b798f0f9a68085Felipe Balbi
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_NET2280
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_net2280(g)	!strcmp("net2280", (g)->name)
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_net2280(g)	0
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2455d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann#ifdef CONFIG_USB_GADGET_AMD5536UDC
2555d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann#define	gadget_is_amd5536udc(g)	!strcmp("amd5536udc", (g)->name)
2655d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann#else
2755d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann#define	gadget_is_amd5536udc(g)	0
2855d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann#endif
2955d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_DUMMY_HCD
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_dummy(g)	!strcmp("dummy_udc", (g)->name)
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_dummy(g)	0
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
367a8576204333d133d58cbcc59dacf49a5546e3e4Philipp Zabel#ifdef CONFIG_USB_GADGET_PXA25X
377a8576204333d133d58cbcc59dacf49a5546e3e4Philipp Zabel#define	gadget_is_pxa(g)	!strcmp("pxa25x_udc", (g)->name)
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_pxa(g)	0
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_GOKU
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_goku(g)	!strcmp("goku_udc", (g)->name)
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_goku(g)	0
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
487f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell/* SH3 UDC -- not yet ported 2.4 --> 2.6 */
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_SUPERH
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_sh(g)		!strcmp("sh_udc", (g)->name)
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_sh(g)		0
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
557f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell/* not yet stable on 2.6 (would help "original Zaurus") */
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_SA1100
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_sa1100(g)	!strcmp("sa1100_udc", (g)->name)
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_sa1100(g)	0
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_LH7A40X
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_lh7a40x(g)	!strcmp("lh7a40x_udc", (g)->name)
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_lh7a40x(g)	0
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
687f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell/* handhelds.org tree (?) */
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_MQ11XX
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_mq11xx(g)	!strcmp("mq11xx_udc", (g)->name)
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_mq11xx(g)	0
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_OMAP
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_omap(g)	!strcmp("omap_udc", (g)->name)
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_omap(g)	0
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
817f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell/* not yet ported 2.4 --> 2.6 */
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_N9604
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_n9604(g)	!strcmp("n9604_udc", (g)->name)
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_n9604(g)	0
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
887f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell/* various unstable versions available */
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_PXA27X
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_pxa27x(g)	!strcmp("pxa27x_udc", (g)->name)
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_pxa27x(g)	0
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9555b3fd41b0846929f68b5fb1058ad8077289f584Haavard Skinnemoen#ifdef CONFIG_USB_GADGET_ATMEL_USBA
9655b3fd41b0846929f68b5fb1058ad8077289f584Haavard Skinnemoen#define gadget_is_atmel_usba(g)	!strcmp("atmel_usba_udc", (g)->name)
971f5b9cc9e4cf5847e7550c4079cebb80170e71ddH�vard Skinnemoen#else
9855b3fd41b0846929f68b5fb1058ad8077289f584Haavard Skinnemoen#define gadget_is_atmel_usba(g)	0
991f5b9cc9e4cf5847e7550c4079cebb80170e71ddH�vard Skinnemoen#endif
1001f5b9cc9e4cf5847e7550c4079cebb80170e71ddH�vard Skinnemoen
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_S3C2410
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define gadget_is_s3c2410(g)    !strcmp("s3c2410_udc", (g)->name)
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define gadget_is_s3c2410(g)    0
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_AT91
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define gadget_is_at91(g)	!strcmp("at91_udc", (g)->name)
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define gadget_is_at91(g)	0
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#ifdef CONFIG_USB_GADGET_IMX
11491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#define gadget_is_imx(g)	!strcmp("imx_udc", (g)->name)
11591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#else
11691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#define gadget_is_imx(g)	0
11791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#endif
11891e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell
119d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#ifdef CONFIG_USB_GADGET_FSL_USB2
120d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#define gadget_is_fsl_usb2(g)	!strcmp("fsl-usb2-udc", (g)->name)
121d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#else
122d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#define gadget_is_fsl_usb2(g)	0
123d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#endif
124d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang
1251c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell/* Mentor high speed function controller */
1267f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell/* from Montavista kernel (?) */
1271c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#ifdef CONFIG_USB_GADGET_MUSBHSFC
1281c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#define gadget_is_musbhsfc(g)	!strcmp("musbhsfc_udc", (g)->name)
1291c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#else
1301c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#define gadget_is_musbhsfc(g)	0
1311c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#endif
1321c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell
13342795410c325108d59d0b1e750657197a7374c04David Brownell/* Mentor high speed "dual role" controller, in peripheral role */
13442795410c325108d59d0b1e750657197a7374c04David Brownell#ifdef CONFIG_USB_GADGET_MUSB_HDRC
13542795410c325108d59d0b1e750657197a7374c04David Brownell#define gadget_is_musbhdrc(g)	!strcmp("musb_hdrc", (g)->name)
1361c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#else
1371c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#define gadget_is_musbhdrc(g)	0
1381c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#endif
1391c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell
1405be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#ifdef CONFIG_USB_GADGET_LANGWELL
1415be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#define gadget_is_langwell(g)	(!strcmp("langwell_udc", (g)->name))
1425be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#else
1435be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#define gadget_is_langwell(g)	0
1445be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#endif
1455be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen
1467f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell/* from Montavista kernel (?) */
1471c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#ifdef CONFIG_USB_GADGET_MPC8272
1481c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#define gadget_is_mpc8272(g)	!strcmp("mpc8272_udc", (g)->name)
1491c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#else
1501c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#define gadget_is_mpc8272(g)	0
1511c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#endif
1521c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell
1534cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#ifdef CONFIG_USB_GADGET_M66592
1544cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#define	gadget_is_m66592(g)	!strcmp("m66592_udc", (g)->name)
1554cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#else
1564cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#define	gadget_is_m66592(g)	0
1574cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#endif
1584cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda
1593948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* Freescale CPM/QE UDC SUPPORT */
1603948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#ifdef CONFIG_USB_GADGET_FSL_QE
1613948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define gadget_is_fsl_qe(g)	!strcmp("fsl_qe_udc", (g)->name)
1623948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#else
1633948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define gadget_is_fsl_qe(g)	0
1643948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#endif
1653948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang
166aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo#ifdef CONFIG_USB_GADGET_CI13XXX
167aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo#define gadget_is_ci13xxx(g)	(!strcmp("ci13xxx_udc", (g)->name))
168aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo#else
169aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo#define gadget_is_ci13xxx(g)	0
170aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo#endif
1714cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// CONFIG_USB_GADGET_SX2
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// CONFIG_USB_GADGET_AU1X00
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// ...
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
176c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#ifdef CONFIG_USB_GADGET_R8A66597
177c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#define	gadget_is_r8a66597(g)	!strcmp("r8a66597_udc", (g)->name)
178c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#else
179c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#define	gadget_is_r8a66597(g)	0
180c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#endif
181c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda
18291e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell
18391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell/**
18491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * usb_gadget_controller_number - support bcdDevice id convention
18591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * @gadget: the controller being driven
18691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell *
18791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * Return a 2-digit BCD value associated with the peripheral controller,
18891e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * suitable for use as part of a bcdDevice value, or a negative error code.
18991e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell *
19091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * NOTE:  this convention is purely optional, and has no meaning in terms of
19191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * any USB specification.  If you want to use a different convention in your
19291e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * gadget driver firmware -- maybe a more formal revision ID -- feel free.
19391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell *
19491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * Hosts see these bcdDevice numbers, and are allowed (but not encouraged!)
19591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * to change their behavior accordingly.  For example it might help avoiding
19691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * some chip bug.
19791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell */
19891e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownellstatic inline int usb_gadget_controller_number(struct usb_gadget *gadget)
19991e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell{
20091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	if (gadget_is_net2280(gadget))
20191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x01;
20291e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_dummy(gadget))
20391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x02;
20491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_pxa(gadget))
20591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x03;
20691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_sh(gadget))
20791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x04;
20891e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_sa1100(gadget))
20991e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x05;
21091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_goku(gadget))
21191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x06;
21291e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_mq11xx(gadget))
21391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x07;
21491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_omap(gadget))
21591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x08;
21691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_lh7a40x(gadget))
21791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x09;
21891e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_n9604(gadget))
21991e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x10;
22091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_pxa27x(gadget))
22191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x11;
22291e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_s3c2410(gadget))
22391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x12;
22491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_at91(gadget))
22591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x13;
22691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_imx(gadget))
22791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x14;
2281c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell	else if (gadget_is_musbhsfc(gadget))
2291c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell		return 0x15;
2301c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell	else if (gadget_is_musbhdrc(gadget))
2311c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell		return 0x16;
2321c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell	else if (gadget_is_mpc8272(gadget))
2331c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell		return 0x17;
23455b3fd41b0846929f68b5fb1058ad8077289f584Haavard Skinnemoen	else if (gadget_is_atmel_usba(gadget))
2351f5b9cc9e4cf5847e7550c4079cebb80170e71ddH�vard Skinnemoen		return 0x18;
236d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang	else if (gadget_is_fsl_usb2(gadget))
237d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang		return 0x19;
23855d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann	else if (gadget_is_amd5536udc(gadget))
23955d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann		return 0x20;
2404cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda	else if (gadget_is_m66592(gadget))
241598f22e11bef8171f2244128bf0341da38fe8a23Yoshihiro Shimoda		return 0x21;
2423948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang	else if (gadget_is_fsl_qe(gadget))
2433948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang		return 0x22;
244aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo	else if (gadget_is_ci13xxx(gadget))
245aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo		return 0x23;
2465be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen	else if (gadget_is_langwell(gadget))
2475be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen		return 0x24;
248c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda	else if (gadget_is_r8a66597(gadget))
249c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda		return 0x25;
25091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	return -ENOENT;
25191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell}
252da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell
253da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell
254da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell/**
255da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell * gadget_supports_altsettings - return true if altsettings work
256da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell * @gadget: the gadget in question
257da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell */
258da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownellstatic inline bool gadget_supports_altsettings(struct usb_gadget *gadget)
259da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell{
260da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	/* PXA 21x/25x/26x has no altsettings at all */
261da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	if (gadget_is_pxa(gadget))
262da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell		return false;
263da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell
264da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	/* PXA 27x and 3xx have *broken* altsetting support */
265da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	if (gadget_is_pxa27x(gadget))
266da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell		return false;
267da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell
268da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	/* SH3 hardware just doesn't do altsettings */
269da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	if (gadget_is_sh(gadget))
270da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell		return false;
271da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell
272da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	/* Everything else is *presumably* fine ... */
273da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	return true;
274da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell}
275e67d70f2f55d90c79dcb384ad5b798f0f9a68085Felipe Balbi
276e67d70f2f55d90c79dcb384ad5b798f0f9a68085Felipe Balbi#endif /* __GADGET_CHIPS_H */
277