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 */
20enum {
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 */
31struct 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
98struct 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
111struct 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 */
180struct 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/*
198 * macro for platform
199 */
200#define renesas_usbhs_get_info(pdev)\
201 ((struct renesas_usbhs_platform_info *)(pdev)->dev.platform_data)
202#endif /* RENESAS_USB_H */
203

source code of linux/include/linux/usb/renesas_usbhs.h