1/*
2 * This is used to for host and peripheral modes of the driver for
3 * Inventra (Multidrop) Highspeed Dual-Role Controllers:  (M)HDRC.
4 *
5 * Board initialization should put one of these into dev->platform_data,
6 * probably on some platform_device named "musb-hdrc".  It encapsulates
7 * key configuration differences between boards.
8 */
9
10#ifndef __LINUX_USB_MUSB_H
11#define __LINUX_USB_MUSB_H
12
13#ifndef __deprecated
14#define __deprecated
15#endif
16
17#include <linux/compat.h>
18
19/* The USB role is defined by the connector used on the board, so long as
20 * standards are being followed.  (Developer boards sometimes won't.)
21 */
22enum musb_mode {
23	MUSB_UNDEFINED = 0,
24	MUSB_HOST,		/* A or Mini-A connector */
25	MUSB_PERIPHERAL,	/* B or Mini-B connector */
26	MUSB_OTG		/* Mini-AB connector */
27};
28
29struct clk;
30
31enum musb_fifo_style {
32	FIFO_RXTX,
33	FIFO_TX,
34	FIFO_RX
35} __attribute__ ((packed));
36
37enum musb_buf_mode {
38	BUF_SINGLE,
39	BUF_DOUBLE
40} __attribute__ ((packed));
41
42struct musb_fifo_cfg {
43	u8			hw_ep_num;
44	enum musb_fifo_style	style;
45	enum musb_buf_mode	mode;
46	u16			maxpacket;
47};
48
49#define MUSB_EP_FIFO(ep, st, m, pkt)		\
50{						\
51	.hw_ep_num	= ep,			\
52	.style		= st,			\
53	.mode		= m,			\
54	.maxpacket	= pkt,			\
55}
56
57#define MUSB_EP_FIFO_SINGLE(ep, st, pkt)	\
58	MUSB_EP_FIFO(ep, st, BUF_SINGLE, pkt)
59
60#define MUSB_EP_FIFO_DOUBLE(ep, st, pkt)	\
61	MUSB_EP_FIFO(ep, st, BUF_DOUBLE, pkt)
62
63struct musb_hdrc_eps_bits {
64	const char	name[16];
65	u8		bits;
66};
67
68struct musb_hdrc_config {
69	struct musb_fifo_cfg	*fifo_cfg;	/* board fifo configuration */
70	unsigned		fifo_cfg_size;	/* size of the fifo configuration */
71
72	/* MUSB configuration-specific details */
73	unsigned	multipoint:1;	/* multipoint device */
74	unsigned	dyn_fifo:1 __deprecated; /* supports dynamic fifo sizing */
75	unsigned	soft_con:1 __deprecated; /* soft connect required */
76	unsigned	utm_16:1 __deprecated; /* utm data witdh is 16 bits */
77	unsigned	big_endian:1;	/* true if CPU uses big-endian */
78	unsigned	mult_bulk_tx:1;	/* Tx ep required for multbulk pkts */
79	unsigned	mult_bulk_rx:1;	/* Rx ep required for multbulk pkts */
80	unsigned	high_iso_tx:1;	/* Tx ep required for HB iso */
81	unsigned	high_iso_rx:1;	/* Rx ep required for HD iso */
82	unsigned	dma:1 __deprecated; /* supports DMA */
83	unsigned	vendor_req:1 __deprecated; /* vendor registers required */
84
85	u8		num_eps;	/* number of endpoints _with_ ep0 */
86	u8		dma_channels __deprecated; /* number of dma channels */
87	u8		dyn_fifo_size;	/* dynamic size in bytes */
88	u8		vendor_ctrl __deprecated; /* vendor control reg width */
89	u8		vendor_stat __deprecated; /* vendor status reg witdh */
90	u8		dma_req_chan __deprecated; /* bitmask for required dma channels */
91	u8		ram_bits;	/* ram address size */
92
93	struct musb_hdrc_eps_bits *eps_bits __deprecated;
94};
95
96struct musb_hdrc_platform_data {
97	/* MUSB_HOST, MUSB_PERIPHERAL, or MUSB_OTG */
98	u8		mode;
99
100	/* for clk_get() */
101	const char	*clock;
102
103	/* (HOST or OTG) switch VBUS on/off */
104	int		(*set_vbus)(struct device *dev, int is_on);
105
106	/* (HOST or OTG) mA/2 power supplied on (default = 8mA) */
107	u8		power;
108
109	/* (PERIPHERAL) mA/2 max power consumed (default = 100mA) */
110	u8		min_power;
111
112	/* (HOST or OTG) msec/2 after VBUS on till power good */
113	u8		potpgt;
114
115	/* (HOST or OTG) program PHY for external Vbus */
116	unsigned	extvbus:1;
117
118	/* Power the device on or off */
119	int		(*set_power)(int state);
120
121	/* MUSB configuration-specific details */
122	struct musb_hdrc_config	*config;
123
124	/* Architecture specific board data	*/
125	void		*board_data;
126
127	/* Platform specific struct musb_ops pointer */
128	const void	*platform_ops;
129};
130
131
132/* TUSB 6010 support */
133
134#define	TUSB6010_OSCCLK_60	16667	/* psec/clk @ 60.0 MHz */
135#define	TUSB6010_REFCLK_24	41667	/* psec/clk @ 24.0 MHz XI */
136#define	TUSB6010_REFCLK_19	52083	/* psec/clk @ 19.2 MHz CLKIN */
137
138#ifdef	CONFIG_ARCH_OMAP2PLUS
139
140extern int __init tusb6010_setup_interface(
141		struct musb_hdrc_platform_data *data,
142		unsigned ps_refclk, unsigned waitpin,
143		unsigned async_cs, unsigned sync_cs,
144		unsigned irq, unsigned dmachan);
145
146extern int tusb6010_platform_retime(unsigned is_refclk);
147
148#endif	/* OMAP2 */
149
150/*
151 * U-Boot specfic stuff
152 */
153struct musb *musb_register(struct musb_hdrc_platform_data *plat, void *bdata,
154			   void *ctl_regs);
155
156#endif /* __LINUX_USB_MUSB_H */
157