gadget_chips.h revision 409a15da9851b6e6a5e1c5787be31a987184b7cf
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
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_LH7A40X
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_lh7a40x(g)	!strcmp("lh7a40x_udc", (g)->name)
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_lh7a40x(g)	0
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_OMAP
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_omap(g)	!strcmp("omap_udc", (g)->name)
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_omap(g)	0
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
607f9985c2e4e5555b750d6f891b4923e63cc834c1David Brownell/* various unstable versions available */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_PXA27X
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_pxa27x(g)	!strcmp("pxa27x_udc", (g)->name)
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	gadget_is_pxa27x(g)	0
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6755b3fd41b0846929f68b5fb1058ad8077289f584Haavard Skinnemoen#ifdef CONFIG_USB_GADGET_ATMEL_USBA
6855b3fd41b0846929f68b5fb1058ad8077289f584Haavard Skinnemoen#define gadget_is_atmel_usba(g)	!strcmp("atmel_usba_udc", (g)->name)
691f5b9cc9e4cf5847e7550c4079cebb80170e71ddH�vard Skinnemoen#else
7055b3fd41b0846929f68b5fb1058ad8077289f584Haavard Skinnemoen#define gadget_is_atmel_usba(g)	0
711f5b9cc9e4cf5847e7550c4079cebb80170e71ddH�vard Skinnemoen#endif
721f5b9cc9e4cf5847e7550c4079cebb80170e71ddH�vard Skinnemoen
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_S3C2410
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define gadget_is_s3c2410(g)    !strcmp("s3c2410_udc", (g)->name)
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define gadget_is_s3c2410(g)    0
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_USB_GADGET_AT91
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define gadget_is_at91(g)	!strcmp("at91_udc", (g)->name)
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define gadget_is_at91(g)	0
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#ifdef CONFIG_USB_GADGET_IMX
8691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#define gadget_is_imx(g)	!strcmp("imx_udc", (g)->name)
8791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#else
8891e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#define gadget_is_imx(g)	0
8991e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell#endif
9091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell
91d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#ifdef CONFIG_USB_GADGET_FSL_USB2
92d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#define gadget_is_fsl_usb2(g)	!strcmp("fsl-usb2-udc", (g)->name)
93d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#else
94d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#define gadget_is_fsl_usb2(g)	0
95d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang#endif
96d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang
9742795410c325108d59d0b1e750657197a7374c04David Brownell/* Mentor high speed "dual role" controller, in peripheral role */
9842795410c325108d59d0b1e750657197a7374c04David Brownell#ifdef CONFIG_USB_GADGET_MUSB_HDRC
9942795410c325108d59d0b1e750657197a7374c04David Brownell#define gadget_is_musbhdrc(g)	!strcmp("musb_hdrc", (g)->name)
1001c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#else
1011c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#define gadget_is_musbhdrc(g)	0
1021c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell#endif
1031c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell
1045be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#ifdef CONFIG_USB_GADGET_LANGWELL
1055be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#define gadget_is_langwell(g)	(!strcmp("langwell_udc", (g)->name))
1065be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#else
1075be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#define gadget_is_langwell(g)	0
1085be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen#endif
1095be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen
1104cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#ifdef CONFIG_USB_GADGET_M66592
1114cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#define	gadget_is_m66592(g)	!strcmp("m66592_udc", (g)->name)
1124cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#else
1134cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#define	gadget_is_m66592(g)	0
1144cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda#endif
1154cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda
1163948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang/* Freescale CPM/QE UDC SUPPORT */
1173948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#ifdef CONFIG_USB_GADGET_FSL_QE
1183948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define gadget_is_fsl_qe(g)	!strcmp("fsl_qe_udc", (g)->name)
1193948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#else
1203948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#define gadget_is_fsl_qe(g)	0
1213948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang#endif
1223948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang
123409a15da9851b6e6a5e1c5787be31a987184b7cfPavankumar Kondeti#ifdef CONFIG_USB_GADGET_CI13XXX_PCI
124409a15da9851b6e6a5e1c5787be31a987184b7cfPavankumar Kondeti#define gadget_is_ci13xxx_pci(g)	(!strcmp("ci13xxx_pci", (g)->name))
125aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo#else
126409a15da9851b6e6a5e1c5787be31a987184b7cfPavankumar Kondeti#define gadget_is_ci13xxx_pci(g)	0
127aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo#endif
1284cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// CONFIG_USB_GADGET_SX2
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// CONFIG_USB_GADGET_AU1X00
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds// ...
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
133c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#ifdef CONFIG_USB_GADGET_R8A66597
134c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#define	gadget_is_r8a66597(g)	!strcmp("r8a66597_udc", (g)->name)
135c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#else
136c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#define	gadget_is_r8a66597(g)	0
137c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda#endif
138c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda
13983ba11d93434e6f0cc2e060336b0b19a3f687fa3Maurus Cuelenaere#ifdef CONFIG_USB_S3C_HSOTG
14083ba11d93434e6f0cc2e060336b0b19a3f687fa3Maurus Cuelenaere#define gadget_is_s3c_hsotg(g)    (!strcmp("s3c-hsotg", (g)->name))
14183ba11d93434e6f0cc2e060336b0b19a3f687fa3Maurus Cuelenaere#else
14283ba11d93434e6f0cc2e060336b0b19a3f687fa3Maurus Cuelenaere#define gadget_is_s3c_hsotg(g)    0
14383ba11d93434e6f0cc2e060336b0b19a3f687fa3Maurus Cuelenaere#endif
14483ba11d93434e6f0cc2e060336b0b19a3f687fa3Maurus Cuelenaere
145f646cf94520e22cb11eb5d2e9a35b33bfe4bea1bToshiharu Okada#ifdef CONFIG_USB_GADGET_EG20T
146f646cf94520e22cb11eb5d2e9a35b33bfe4bea1bToshiharu Okada#define	gadget_is_pch(g)	(!strcmp("pch_udc", (g)->name))
147f646cf94520e22cb11eb5d2e9a35b33bfe4bea1bToshiharu Okada#else
148f646cf94520e22cb11eb5d2e9a35b33bfe4bea1bToshiharu Okada#define	gadget_is_pch(g)	0
149f646cf94520e22cb11eb5d2e9a35b33bfe4bea1bToshiharu Okada#endif
15091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell
15191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell/**
15291e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * usb_gadget_controller_number - support bcdDevice id convention
15391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * @gadget: the controller being driven
15491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell *
15591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * Return a 2-digit BCD value associated with the peripheral controller,
15691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * suitable for use as part of a bcdDevice value, or a negative error code.
15791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell *
15891e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * NOTE:  this convention is purely optional, and has no meaning in terms of
15991e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * any USB specification.  If you want to use a different convention in your
16091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * gadget driver firmware -- maybe a more formal revision ID -- feel free.
16191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell *
16291e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * Hosts see these bcdDevice numbers, and are allowed (but not encouraged!)
16391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * to change their behavior accordingly.  For example it might help avoiding
16491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell * some chip bug.
16591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell */
16691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownellstatic inline int usb_gadget_controller_number(struct usb_gadget *gadget)
16791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell{
16891e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	if (gadget_is_net2280(gadget))
16991e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x01;
17091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_dummy(gadget))
17191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x02;
17291e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_pxa(gadget))
17391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x03;
17491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_goku(gadget))
17591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x06;
17691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_omap(gadget))
17791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x08;
17891e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_lh7a40x(gadget))
17991e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x09;
18091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_pxa27x(gadget))
18191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x11;
18291e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_s3c2410(gadget))
18391e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x12;
18491e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_at91(gadget))
18591e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x13;
18691e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	else if (gadget_is_imx(gadget))
18791e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell		return 0x14;
1881c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell	else if (gadget_is_musbhdrc(gadget))
1891c05ad4447e4ecbd61647c102fb6f2f5a6634ff3David Brownell		return 0x16;
19055b3fd41b0846929f68b5fb1058ad8077289f584Haavard Skinnemoen	else if (gadget_is_atmel_usba(gadget))
1911f5b9cc9e4cf5847e7550c4079cebb80170e71ddH�vard Skinnemoen		return 0x18;
192d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang	else if (gadget_is_fsl_usb2(gadget))
193d2eef1fc99640f7de302dcdbcfbdfcec2eef13f6Li Yang		return 0x19;
19455d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann	else if (gadget_is_amd5536udc(gadget))
19555d402d854ade6b63b26e958f201ee2ef00b7b15Thomas Dahlmann		return 0x20;
1964cf2503c6801a69fee25030475eceeefb36d1b56Yoshihiro Shimoda	else if (gadget_is_m66592(gadget))
197598f22e11bef8171f2244128bf0341da38fe8a23Yoshihiro Shimoda		return 0x21;
1983948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang	else if (gadget_is_fsl_qe(gadget))
1993948f0e0c999a6201e9898bb8fbe3c6cc1199276Li Yang		return 0x22;
200409a15da9851b6e6a5e1c5787be31a987184b7cfPavankumar Kondeti	else if (gadget_is_ci13xxx_pci(gadget))
201aa69a8093ff985873cb44fe1157bd6db29a20fe4David Lopo		return 0x23;
2025be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen	else if (gadget_is_langwell(gadget))
2035be19a9daa2df2507adf5b4676a7db8d131cf56eXiaochen Shen		return 0x24;
204c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda	else if (gadget_is_r8a66597(gadget))
205c41442474a26984abaa094e96e42182868eab658Yoshihiro Shimoda		return 0x25;
20683ba11d93434e6f0cc2e060336b0b19a3f687fa3Maurus Cuelenaere	else if (gadget_is_s3c_hsotg(gadget))
20783ba11d93434e6f0cc2e060336b0b19a3f687fa3Maurus Cuelenaere		return 0x26;
208f646cf94520e22cb11eb5d2e9a35b33bfe4bea1bToshiharu Okada	else if (gadget_is_pch(gadget))
209f646cf94520e22cb11eb5d2e9a35b33bfe4bea1bToshiharu Okada		return 0x27;
21091e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell	return -ENOENT;
21191e79c91fab10f5790159d8d0c1d16da2a9653f9David Brownell}
212da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell
213da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell
214da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell/**
215da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell * gadget_supports_altsettings - return true if altsettings work
216da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell * @gadget: the gadget in question
217da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell */
218da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownellstatic inline bool gadget_supports_altsettings(struct usb_gadget *gadget)
219da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell{
220da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	/* PXA 21x/25x/26x has no altsettings at all */
221da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	if (gadget_is_pxa(gadget))
222da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell		return false;
223da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell
224da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	/* PXA 27x and 3xx have *broken* altsetting support */
225da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	if (gadget_is_pxa27x(gadget))
226da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell		return false;
227da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell
228da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	/* Everything else is *presumably* fine ... */
229da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell	return true;
230da741b8c56d612b5dd26ffa31341911a5fea23eeDavid Brownell}
231e67d70f2f55d90c79dcb384ad5b798f0f9a68085Felipe Balbi
232e67d70f2f55d90c79dcb384ad5b798f0f9a68085Felipe Balbi#endif /* __GADGET_CHIPS_H */
233