xref: /openbmc/u-boot/include/linux/usb/musb.h (revision c511147cf43e8f9dc61c6fd0dd103487786e7954)
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   */
22  enum 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  
29  struct clk;
30  
31  enum musb_fifo_style {
32  	FIFO_RXTX,
33  	FIFO_TX,
34  	FIFO_RX
35  } __attribute__ ((packed));
36  
37  enum musb_buf_mode {
38  	BUF_SINGLE,
39  	BUF_DOUBLE
40  } __attribute__ ((packed));
41  
42  struct 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  
63  struct musb_hdrc_eps_bits {
64  	const char	name[16];
65  	u8		bits;
66  };
67  
68  struct 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  
96  struct 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  
140  extern 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  
146  extern int tusb6010_platform_retime(unsigned is_refclk);
147  
148  #endif	/* OMAP2 */
149  
150  /*
151   * U-Boot specfic stuff
152   */
153  int musb_register(struct musb_hdrc_platform_data *plat, void *bdata,
154  			void *ctl_regs);
155  
156  #endif /* __LINUX_USB_MUSB_H */
157