gadget_chips.h 6.01 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * USB device controllers have lots of quirks.  Use these macros in
 * gadget drivers or other code that needs to deal with them, and which
 * autoconfigures instead of using early binding to the hardware.
 *
 * This SHOULD eventually work like the ARM mach_is_*() stuff, driven by
 * some config file that gets updated as new hardware is supported.
 * (And avoiding all runtime comparisons in typical one-choice configs!)
 *
 * NOTE:  some of these controller drivers may not be available yet.
 * Some are available on 2.4 kernels; several are available, but not
 * yet pushed in the 2.6 mainline tree.
 *
 * Ported to U-boot by: Thomas Smits <ts.smits@gmail.com> and
 *                      Remy Bohmer <linux@bohmer.net>
 */
#ifdef CONFIG_USB_GADGET_NET2280
18
#define	gadget_is_net2280(g)	(!strcmp("net2280", (g)->name))
19 20 21 22 23
#else
#define	gadget_is_net2280(g)	0
#endif

#ifdef CONFIG_USB_GADGET_AMD5536UDC
24
#define	gadget_is_amd5536udc(g)	(!strcmp("amd5536udc", (g)->name))
25 26 27 28 29
#else
#define	gadget_is_amd5536udc(g)	0
#endif

#ifdef CONFIG_USB_GADGET_DUMMY_HCD
30
#define	gadget_is_dummy(g)	(!strcmp("dummy_udc", (g)->name))
31 32 33 34 35
#else
#define	gadget_is_dummy(g)	0
#endif

#ifdef CONFIG_USB_GADGET_PXA2XX
36
#define	gadget_is_pxa(g)	(!strcmp("pxa2xx_udc", (g)->name))
37 38 39 40 41
#else
#define	gadget_is_pxa(g)	0
#endif

#ifdef CONFIG_USB_GADGET_GOKU
42
#define	gadget_is_goku(g)	(!strcmp("goku_udc", (g)->name))
43 44 45 46 47 48
#else
#define	gadget_is_goku(g)	0
#endif

/* SH3 UDC -- not yet ported 2.4 --> 2.6 */
#ifdef CONFIG_USB_GADGET_SUPERH
49
#define	gadget_is_sh(g)		(!strcmp("sh_udc", (g)->name))
50 51 52 53 54 55
#else
#define	gadget_is_sh(g)		0
#endif

/* not yet stable on 2.6 (would help "original Zaurus") */
#ifdef CONFIG_USB_GADGET_SA1100
56
#define	gadget_is_sa1100(g)	(!strcmp("sa1100_udc", (g)->name))
57 58 59 60 61 62
#else
#define	gadget_is_sa1100(g)	0
#endif

/* handhelds.org tree (?) */
#ifdef CONFIG_USB_GADGET_MQ11XX
63
#define	gadget_is_mq11xx(g)	(!strcmp("mq11xx_udc", (g)->name))
64 65 66 67 68
#else
#define	gadget_is_mq11xx(g)	0
#endif

#ifdef CONFIG_USB_GADGET_OMAP
69
#define	gadget_is_omap(g)	(!strcmp("omap_udc", (g)->name))
70 71 72 73 74 75
#else
#define	gadget_is_omap(g)	0
#endif

/* not yet ported 2.4 --> 2.6 */
#ifdef CONFIG_USB_GADGET_N9604
76
#define	gadget_is_n9604(g)	(!strcmp("n9604_udc", (g)->name))
77 78 79 80 81 82
#else
#define	gadget_is_n9604(g)	0
#endif

/* various unstable versions available */
#ifdef CONFIG_USB_GADGET_PXA27X
83
#define	gadget_is_pxa27x(g)	(!strcmp("pxa27x_udc", (g)->name))
84 85 86 87 88
#else
#define	gadget_is_pxa27x(g)	0
#endif

#ifdef CONFIG_USB_GADGET_ATMEL_USBA
89
#define gadget_is_atmel_usba(g)	(!strcmp("atmel_usba_udc", (g)->name))
90 91 92 93 94
#else
#define gadget_is_atmel_usba(g)	0
#endif

#ifdef CONFIG_USB_GADGET_S3C2410
95
#define gadget_is_s3c2410(g)    (!strcmp("s3c2410_udc", (g)->name))
96 97 98 99 100
#else
#define gadget_is_s3c2410(g)    0
#endif

#ifdef CONFIG_USB_GADGET_AT91
101
#define gadget_is_at91(g)	(!strcmp("at91_udc", (g)->name))
102 103 104 105 106 107
#else
#define gadget_is_at91(g)	0
#endif

/* status unclear */
#ifdef CONFIG_USB_GADGET_IMX
108
#define gadget_is_imx(g)	(!strcmp("imx_udc", (g)->name))
109 110 111 112 113
#else
#define gadget_is_imx(g)	0
#endif

#ifdef CONFIG_USB_GADGET_FSL_USB2
114
#define gadget_is_fsl_usb2(g)	(!strcmp("fsl-usb2-udc", (g)->name))
115 116 117 118 119 120 121
#else
#define gadget_is_fsl_usb2(g)	0
#endif

/* Mentor high speed function controller */
/* from Montavista kernel (?) */
#ifdef CONFIG_USB_GADGET_MUSBHSFC
122
#define gadget_is_musbhsfc(g)	(!strcmp("musbhsfc_udc", (g)->name))
123 124 125 126 127
#else
#define gadget_is_musbhsfc(g)	0
#endif

/* Mentor high speed "dual role" controller, in peripheral role */
128 129
#ifdef CONFIG_MUSB_GADGET
#define gadget_is_musbhdrc(g)	(!strcmp("musb-hdrc", (g)->name))
130 131 132 133 134 135
#else
#define gadget_is_musbhdrc(g)	0
#endif

/* from Montavista kernel (?) */
#ifdef CONFIG_USB_GADGET_MPC8272
136
#define gadget_is_mpc8272(g)	(!strcmp("mpc8272_udc", (g)->name))
137 138 139 140 141
#else
#define gadget_is_mpc8272(g)	0
#endif

#ifdef CONFIG_USB_GADGET_M66592
142
#define	gadget_is_m66592(g)	(!strcmp("m66592_udc", (g)->name))
143 144 145 146
#else
#define	gadget_is_m66592(g)	0
#endif

147
#ifdef CONFIG_MV_UDC
148 149 150 151
#define gadget_is_mv(g)        (!strcmp("mv_udc", (g)->name))
#else
#define gadget_is_mv(g)        0
#endif
152

153 154 155 156 157 158
#ifdef CONFIG_USB_GADGET_FOTG210
#define gadget_is_fotg210(g)        (!strcmp("fotg210_udc", (g)->name))
#else
#define gadget_is_fotg210(g)        0
#endif

159 160 161 162 163
/*
 * CONFIG_USB_GADGET_SX2
 * CONFIG_USB_GADGET_AU1X00
 * ...
 */
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198

/**
 * usb_gadget_controller_number - support bcdDevice id convention
 * @gadget: the controller being driven
 *
 * Return a 2-digit BCD value associated with the peripheral controller,
 * suitable for use as part of a bcdDevice value, or a negative error code.
 *
 * NOTE:  this convention is purely optional, and has no meaning in terms of
 * any USB specification.  If you want to use a different convention in your
 * gadget driver firmware -- maybe a more formal revision ID -- feel free.
 *
 * Hosts see these bcdDevice numbers, and are allowed (but not encouraged!)
 * to change their behavior accordingly.  For example it might help avoiding
 * some chip bug.
 */
static inline int usb_gadget_controller_number(struct usb_gadget *gadget)
{
	if (gadget_is_net2280(gadget))
		return 0x01;
	else if (gadget_is_dummy(gadget))
		return 0x02;
	else if (gadget_is_pxa(gadget))
		return 0x03;
	else if (gadget_is_sh(gadget))
		return 0x04;
	else if (gadget_is_sa1100(gadget))
		return 0x05;
	else if (gadget_is_goku(gadget))
		return 0x06;
	else if (gadget_is_mq11xx(gadget))
		return 0x07;
	else if (gadget_is_omap(gadget))
		return 0x08;
	else if (gadget_is_n9604(gadget))
199
		return 0x09;
200
	else if (gadget_is_pxa27x(gadget))
201
		return 0x10;
202
	else if (gadget_is_s3c2410(gadget))
203
		return 0x11;
204
	else if (gadget_is_at91(gadget))
205
		return 0x12;
206
	else if (gadget_is_imx(gadget))
207
		return 0x13;
208
	else if (gadget_is_musbhsfc(gadget))
209
		return 0x14;
210
	else if (gadget_is_musbhdrc(gadget))
211
		return 0x15;
212
	else if (gadget_is_mpc8272(gadget))
213
		return 0x16;
214
	else if (gadget_is_atmel_usba(gadget))
215
		return 0x17;
216
	else if (gadget_is_fsl_usb2(gadget))
217
		return 0x18;
218
	else if (gadget_is_amd5536udc(gadget))
219
		return 0x19;
220
	else if (gadget_is_m66592(gadget))
221
		return 0x20;
222
	else if (gadget_is_mv(gadget))
223
		return 0x21;
224 225
	else if (gadget_is_fotg210(gadget))
		return 0x22;
226 227
	return -ENOENT;
}