xref: /linux/include/linux/usb/renesas_usbhs.h (revision c771600c6af14749609b49565ffb4cac2959710d)
1  // SPDX-License-Identifier: GPL-1.0+
2  /*
3   * Renesas USB
4   *
5   * Copyright (C) 2011 Renesas Solutions Corp.
6   * Copyright (C) 2019 Renesas Electronics Corporation
7   * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
8   */
9  #ifndef RENESAS_USB_H
10  #define RENESAS_USB_H
11  #include <linux/notifier.h>
12  #include <linux/platform_device.h>
13  #include <linux/usb/ch9.h>
14  
15  /*
16   * module type
17   *
18   * it will be return value from get_id
19   */
20  enum {
21  	USBHS_HOST = 0,
22  	USBHS_GADGET,
23  	USBHS_MAX,
24  };
25  
26  /*
27   * callback functions for platform
28   *
29   * These functions are called from driver for platform
30   */
31  struct renesas_usbhs_platform_callback {
32  
33  	/*
34  	 * option:
35  	 *
36  	 * Hardware init function for platform.
37  	 * it is called when driver was probed.
38  	 */
39  	int (*hardware_init)(struct platform_device *pdev);
40  
41  	/*
42  	 * option:
43  	 *
44  	 * Hardware exit function for platform.
45  	 * it is called when driver was removed
46  	 */
47  	int (*hardware_exit)(struct platform_device *pdev);
48  
49  	/*
50  	 * option:
51  	 *
52  	 * for board specific clock control
53  	 */
54  	int (*power_ctrl)(struct platform_device *pdev,
55  			   void __iomem *base, int enable);
56  
57  	/*
58  	 * option:
59  	 *
60  	 * Phy reset for platform
61  	 */
62  	int (*phy_reset)(struct platform_device *pdev);
63  
64  	/*
65  	 * get USB ID function
66  	 *  - USBHS_HOST
67  	 *  - USBHS_GADGET
68  	 */
69  	int (*get_id)(struct platform_device *pdev);
70  
71  	/*
72  	 * get VBUS status function.
73  	 */
74  	int (*get_vbus)(struct platform_device *pdev);
75  
76  	/*
77  	 * option:
78  	 *
79  	 * VBUS control is needed for Host
80  	 */
81  	int (*set_vbus)(struct platform_device *pdev, int enable);
82  
83  	/*
84  	 * option:
85  	 * extcon notifier to set host/peripheral mode.
86  	 */
87  	int (*notifier)(struct notifier_block *nb, unsigned long event,
88  			void *data);
89  };
90  
91  /*
92   * parameters for renesas usbhs
93   *
94   * some register needs USB chip specific parameters.
95   * This struct show it to driver
96   */
97  
98  struct renesas_usbhs_driver_pipe_config {
99  	u8 type;	/* USB_ENDPOINT_XFER_xxx */
100  	u16 bufsize;
101  	u8 bufnum;
102  	bool double_buf;
103  };
104  #define RENESAS_USBHS_PIPE(_type, _size, _num, _double_buf)	{	\
105  			.type = (_type),		\
106  			.bufsize = (_size),		\
107  			.bufnum = (_num),		\
108  			.double_buf = (_double_buf),	\
109  	}
110  
111  struct renesas_usbhs_driver_param {
112  	/*
113  	 * pipe settings
114  	 */
115  	struct renesas_usbhs_driver_pipe_config *pipe_configs;
116  	int pipe_size; /* pipe_configs array size */
117  
118  	/*
119  	 * option:
120  	 *
121  	 * for BUSWAIT :: BWAIT
122  	 * see
123  	 *	renesas_usbhs/common.c :: usbhsc_set_buswait()
124  	 * */
125  	int buswait_bwait;
126  
127  	/*
128  	 * option:
129  	 *
130  	 * delay time from notify_hotplug callback
131  	 */
132  	int detection_delay; /* msec */
133  
134  	/*
135  	 * option:
136  	 *
137  	 * dma id for dmaengine
138  	 * The data transfer direction on D0FIFO/D1FIFO should be
139  	 * fixed for keeping consistency.
140  	 * So, the platform id settings will be..
141  	 *	.d0_tx_id = xx_TX,
142  	 *	.d1_rx_id = xx_RX,
143  	 * or
144  	 *	.d1_tx_id = xx_TX,
145  	 *	.d0_rx_id = xx_RX,
146  	 */
147  	int d0_tx_id;
148  	int d0_rx_id;
149  	int d1_tx_id;
150  	int d1_rx_id;
151  	int d2_tx_id;
152  	int d2_rx_id;
153  	int d3_tx_id;
154  	int d3_rx_id;
155  
156  	/*
157  	 * option:
158  	 *
159  	 * pio <--> dma border.
160  	 */
161  	int pio_dma_border; /* default is 64byte */
162  
163  	/*
164  	 * option:
165  	 */
166  	u32 has_usb_dmac:1; /* for USB-DMAC */
167  	u32 runtime_pwctrl:1;
168  	u32 has_cnen:1;
169  	u32 cfifo_byte_addr:1; /* CFIFO is byte addressable */
170  #define USBHS_USB_DMAC_XFER_SIZE	32	/* hardcode the xfer size */
171  	u32 multi_clks:1;
172  	u32 has_new_pipe_configs:1;
173  };
174  
175  /*
176   * option:
177   *
178   * platform information for renesas_usbhs driver.
179   */
180  struct renesas_usbhs_platform_info {
181  	/*
182  	 * option:
183  	 *
184  	 * platform set these functions before
185  	 * call platform_add_devices if needed
186  	 */
187  	struct renesas_usbhs_platform_callback	platform_callback;
188  
189  	/*
190  	 * option:
191  	 *
192  	 * driver use these param for some register
193  	 */
194  	struct renesas_usbhs_driver_param	driver_param;
195  };
196  
197  #endif /* RENESAS_USB_H */
198