xref: /f-stack/freebsd/mips/mediatek/mtk_pinctrl.h (revision 22ce4aff)
1 /*-
2  * Copyright (c) 2016 Stanislav Galabov.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice unmodified, this list of conditions, and the following
10  *    disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25  * SUCH DAMAGE.
26  *
27  * $FreeBSD$
28  */
29 
30 #ifndef _MTK_PINCTRL_H_
31 #define _MTK_PINCTRL_H_
32 
33 struct mtk_pin_function {
34 	const char		*name;
35 	uint32_t		value;
36 };
37 
38 struct mtk_pin_group {
39 	const char		*name;
40 	uint32_t		sysc_reg;
41 	uint32_t		offset;
42 	uint32_t		mask;
43 	struct mtk_pin_function	*functions;
44 	uint32_t		funcnum;
45 };
46 
47 #define FUNC(_name, _value)			\
48     { .name = (_name), .value = (_value) }
49 
50 #define GROUP(_name, _reg, _off, _mask, _funcs)	\
51     { .name = (_name), .sysc_reg = (_reg), .offset = (_off),		\
52     .mask = (_mask), .functions = (_funcs), .funcnum = nitems(_funcs) }
53 #define GROUP_END	{ NULL, 0, 0, 0, NULL, 0 }
54 
55 #define DECL_FUNC(_name)	\
56     static struct mtk_pin_function _name[]
57 #define DECL_TABLE(_name)	\
58     static struct mtk_pin_group _name[]
59 
60 /* Pin function declarations */
61 DECL_FUNC(i2c_func) = {
62 	FUNC("i2c", 0), FUNC("gpio", 1)
63 };
64 
65 DECL_FUNC(spi_func) = {
66 	FUNC("spi", 0), FUNC("gpio", 1)
67 };
68 
69 DECL_FUNC(uartf_func) = {
70 	FUNC("uartf", 0), FUNC("pcm uartf", 1), FUNC("pcm i2s", 2),
71 	FUNC("i2s uartf", 3), FUNC("pcm gpio", 4), FUNC("gpio uartf", 5),
72 	FUNC("gpio i2s", 6), FUNC("gpio", 7)
73 };
74 
75 DECL_FUNC(wdt_func) = {
76 	FUNC("wdt rst", 0), FUNC("wdt", 0), FUNC("wdt refclk", 1),
77 	FUNC("gpio", 2)
78 };
79 
80 DECL_FUNC(uartlite_func) = {
81 	FUNC("uartlite", 0), FUNC("gpio", 1)
82 };
83 
84 DECL_FUNC(jtag_func) = {
85 	FUNC("jtag", 0), FUNC("gpio", 1)
86 };
87 
88 DECL_FUNC(mdio_func) = {
89 	FUNC("mdio", 0), FUNC("gpio", 1)
90 };
91 
92 DECL_FUNC(led_func) = {
93 	FUNC("led", 0), FUNC("gpio", 1), FUNC("bt", 2)
94 };
95 
96 DECL_FUNC(cs1_func) = {
97 	FUNC("spi_cs1", 0), FUNC("wdt_cs1", 1), FUNC("gpio", 2)
98 };
99 
100 DECL_FUNC(sdram_func) = {
101 	FUNC("sdram", 0), FUNC("gpio", 1)
102 };
103 
104 DECL_FUNC(rgmii_func) = {
105 	FUNC("rgmii", 0), FUNC("rgmii1", 0), FUNC("rgmii2", 0), FUNC("gpio", 1)
106 };
107 
108 DECL_FUNC(lna_func) = {
109 	FUNC("lna", 0), FUNC("gpio", 1)
110 };
111 
112 DECL_FUNC(pa_func) = {
113 	FUNC("pa", 0), FUNC("gpio", 1)
114 };
115 
116 DECL_FUNC(gex_func) = {
117 	FUNC("ge1", 0), FUNC("ge2", 0), FUNC("gpio", 1)
118 };
119 
120 DECL_FUNC(rt2880_uartf_func) = {
121 	FUNC("uartf", 0), FUNC("gpio", 1)
122 };
123 
124 DECL_FUNC(rt2880_pci_func) = {
125 	FUNC("pci", 0), FUNC("gpio", 1)
126 };
127 
128 DECL_FUNC(rt3883_pci_func) = {
129 	FUNC("pci-dev", 0), FUNC("pci-host2", 1), FUNC("pci-host1", 2),
130 	FUNC("pci-fnc", 3), FUNC("gpio", 7)
131 };
132 
133 DECL_FUNC(mt7620_pcie_func) = {
134 	FUNC("pcie rst", 0), FUNC("pcie refclk", 1), FUNC("gpio", 2)
135 };
136 
137 DECL_FUNC(lna_a_func) = {
138 	FUNC("lna a", 0), FUNC("lna g", 0), FUNC("codec", 2), FUNC("gpio", 3)
139 };
140 
141 DECL_FUNC(nd_sd_func) = {
142 	FUNC("nand", 0), FUNC("sd", 1), FUNC("gpio", 2)
143 };
144 
145 DECL_FUNC(mt7620_mdio_func) = {
146 	FUNC("mdio", 0), FUNC("mdio refclk", 1), FUNC("gpio", 2)
147 };
148 
149 DECL_FUNC(spi_refclk_func) = {
150 	FUNC("spi refclk", 0), FUNC("gpio", 1)
151 };
152 
153 DECL_FUNC(wled_func) = {
154 	FUNC("wled", 0), FUNC("gpio", 1)
155 };
156 
157 DECL_FUNC(ephy_func) = {
158 	FUNC("ephy", 0), FUNC("gpio", 1)
159 };
160 
161 DECL_FUNC(mt7628_gpio_func) = {
162 	FUNC("gpio", 0), FUNC("gpio", 1), FUNC("refclk", 2), FUNC("pcie", 3)
163 };
164 
165 DECL_FUNC(mt7628_spis_func) = {
166 	FUNC("spis", 0), FUNC("gpio", 1), FUNC("utif", 2), FUNC("pwm", 3)
167 };
168 
169 DECL_FUNC(mt7628_spi_cs1_func) = {
170 	FUNC("spi", 0), FUNC("gpio", 1), FUNC("refclk", 2), FUNC("-", 3)
171 };
172 
173 DECL_FUNC(mt7628_i2s_func) = {
174 	FUNC("i2s", 0), FUNC("gpio", 1), FUNC("pcm", 2), FUNC("anttenna", 3)
175 };
176 
177 DECL_FUNC(mt7628_uart0_func) = {
178 	FUNC("uart0", 0), FUNC("gpio", 1), FUNC("-", 2), FUNC("-", 3)
179 };
180 
181 DECL_FUNC(mt7628_sd_func) = {
182 	FUNC("sdxc", 0), FUNC("gpio", 1), FUNC("utif", 2), FUNC("jtag", 3)
183 };
184 
185 DECL_FUNC(mt7628_perst_func) = {
186 	FUNC("perst", 0), FUNC("gpio", 1)
187 };
188 
189 DECL_FUNC(mt7628_refclk_func) = {
190 	FUNC("refclk", 0), FUNC("gpio", 1)
191 };
192 
193 DECL_FUNC(mt7628_i2c_func) = {
194 	FUNC("i2c", 0), FUNC("gpio", 1), FUNC("debug", 2), FUNC("-", 3)
195 };
196 
197 DECL_FUNC(mt7628_uart1_func) = {
198 	FUNC("uart1", 0), FUNC("gpio", 1), FUNC("pwm", 2), FUNC("sw r", 3)
199 };
200 
201 DECL_FUNC(mt7628_uart2_func) = {
202 	FUNC("uart2", 0), FUNC("gpio", 1), FUNC("pwm", 2), FUNC("sdxc", 3)
203 };
204 
205 DECL_FUNC(mt7628_pwm0_func) = {
206 	FUNC("pwm", 0), FUNC("gpio", 1), FUNC("utif", 2), FUNC("sdxc", 3)
207 };
208 
209 DECL_FUNC(mt7621_uart1_func) = {
210 	FUNC("uart1", 0), FUNC("gpio", 1)
211 };
212 
213 DECL_FUNC(mt7621_i2c_func) = {
214 	FUNC("i2c", 0), FUNC("gpio", 1)
215 };
216 
217 DECL_FUNC(mt7621_uart3_func) = {
218 	FUNC("uart3", 0), FUNC("gpio", 1), FUNC("i2s", 2), FUNC("spdif3", 3)
219 };
220 
221 DECL_FUNC(mt7621_uart2_func) = {
222 	FUNC("uart2", 0), FUNC("gpio", 1), FUNC("pcm", 2), FUNC("spdif2", 3)
223 };
224 
225 DECL_FUNC(mt7621_jtag_func) = {
226 	FUNC("jtag", 0), FUNC("gpio", 1)
227 };
228 
229 DECL_FUNC(mt7621_wdt_func) = {
230 	FUNC("wdt rst", 0), FUNC("gpio", 1), FUNC("wdt refclk", 2), FUNC("-", 3)
231 };
232 
233 DECL_FUNC(mt7621_pcie_func) = {
234 	FUNC("pcie rst", 0), FUNC("gpio", 1), FUNC("pcie refclk", 2),
235 	FUNC("-", 3)
236 };
237 
238 DECL_FUNC(mt7621_mdio_func) = {
239 	FUNC("mdio", 0), FUNC("gpio", 1), FUNC("-", 2), FUNC("-", 3)
240 };
241 
242 DECL_FUNC(mt7621_rgmii_func) = {
243 	FUNC("rgmii1", 0), FUNC("rgmii2", 0), FUNC("gpio", 1)
244 };
245 
246 DECL_FUNC(mt7621_spi_func) = {
247 	FUNC("spi", 0), FUNC("gpio", 1), FUNC("nand1", 2), FUNC("-", 3)
248 };
249 
250 DECL_FUNC(mt7621_sdhci_func) = {
251 	FUNC("sdhci", 0), FUNC("gpio", 1), FUNC("nand1", 2), FUNC("-", 3)
252 };
253 
254 /* Pin groups declarations */
255 DECL_TABLE(mt7628_pintable) = {
256 	GROUP("gpio", SYSCTL_GPIOMODE, 0, 3, mt7628_gpio_func),
257 	GROUP("spis", SYSCTL_GPIOMODE, 2, 3, mt7628_spis_func),
258 	GROUP("spi cs1", SYSCTL_GPIOMODE, 4, 3, mt7628_spi_cs1_func),
259 	GROUP("i2s", SYSCTL_GPIOMODE, 6, 3, mt7628_i2s_func),
260 	GROUP("uart0", SYSCTL_GPIOMODE, 8, 3, mt7628_uart0_func),
261 	GROUP("sdmode", SYSCTL_GPIOMODE, 10, 3, mt7628_sd_func),
262 	GROUP("spi", SYSCTL_GPIOMODE, 12, 1, spi_func),
263 	GROUP("wdt", SYSCTL_GPIOMODE, 14, 1, wdt_func),
264 	GROUP("perst", SYSCTL_GPIOMODE, 16, 1, mt7628_perst_func),
265 	GROUP("refclk", SYSCTL_GPIOMODE, 18, 1, mt7628_refclk_func),
266 	GROUP("i2c", SYSCTL_GPIOMODE, 20, 3, mt7628_i2c_func),
267 	GROUP("uart1", SYSCTL_GPIOMODE, 24, 3, mt7628_uart1_func),
268 	GROUP("uart2", SYSCTL_GPIOMODE, 26, 3, mt7628_uart2_func),
269 	GROUP("pwm0", SYSCTL_GPIOMODE, 28, 3, mt7628_pwm0_func),
270 	GROUP("pwm1", SYSCTL_GPIOMODE, 30, 3, mt7628_pwm0_func),
271 	GROUP_END
272 };
273 
274 DECL_TABLE(mt7621_pintable) = {
275 	GROUP("uart1", SYSCTL_GPIOMODE, 1, 1, mt7621_uart1_func),
276 	GROUP("i2c", SYSCTL_GPIOMODE, 2, 1, mt7621_i2c_func),
277 	GROUP("uart3", SYSCTL_GPIOMODE, 3, 3, mt7621_uart3_func),
278 	GROUP("uart2", SYSCTL_GPIOMODE, 5, 3, mt7621_uart2_func),
279 	GROUP("jtag", SYSCTL_GPIOMODE, 7, 1, mt7621_jtag_func),
280 	GROUP("wdt", SYSCTL_GPIOMODE, 8, 3, mt7621_wdt_func),
281 	GROUP("pcie", SYSCTL_GPIOMODE, 10, 3, mt7621_pcie_func),
282 	GROUP("mdio", SYSCTL_GPIOMODE, 12, 3, mt7621_mdio_func),
283 	GROUP("rgmii2", SYSCTL_GPIOMODE, 15, 1, mt7621_rgmii_func),
284 	GROUP("spi", SYSCTL_GPIOMODE, 16, 3, mt7621_spi_func),
285 	GROUP("sdhci", SYSCTL_GPIOMODE, 18, 3, mt7621_sdhci_func),
286 	GROUP("rgmii1", SYSCTL_GPIOMODE, 14, 1, mt7621_rgmii_func),
287 	GROUP_END
288 };
289 
290 DECL_TABLE(mt7620_pintable) = {
291 	GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
292 	GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
293 	GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
294 	GROUP("mdio", SYSCTL_GPIOMODE, 7, 3, mt7620_mdio_func),
295 	GROUP("rgmii1", SYSCTL_GPIOMODE, 9, 1, rgmii_func),
296 	GROUP("rgmii2", SYSCTL_GPIOMODE, 10, 1, rgmii_func),
297 	GROUP("spi", SYSCTL_GPIOMODE, 11, 1, spi_func),
298 	GROUP("spi refclk", SYSCTL_GPIOMODE, 12, 1, spi_refclk_func),
299 	GROUP("wled", SYSCTL_GPIOMODE, 13, 1, wled_func),
300 	GROUP("ephy", SYSCTL_GPIOMODE, 15, 1, ephy_func),
301 	GROUP("pcie", SYSCTL_GPIOMODE, 16, 3, mt7620_pcie_func),
302 	GROUP("nd_sd", SYSCTL_GPIOMODE, 18, 3, nd_sd_func),
303 	GROUP("pa", SYSCTL_GPIOMODE, 20, 1, pa_func),
304 	GROUP("wdt", SYSCTL_GPIOMODE, 21, 3, wdt_func),
305 	GROUP_END
306 };
307 
308 DECL_TABLE(rt2880_pintable) = {
309 	GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
310 	GROUP("uartf", SYSCTL_GPIOMODE, 1, 1, rt2880_uartf_func),
311 	GROUP("spi", SYSCTL_GPIOMODE, 2, 1, spi_func),
312 	GROUP("uartlite", SYSCTL_GPIOMODE, 3, 1, uartlite_func),
313 	GROUP("jtag", SYSCTL_GPIOMODE, 4, 1, jtag_func),
314 	GROUP("mdio", SYSCTL_GPIOMODE, 5, 1, mdio_func),
315 	GROUP("sdram", SYSCTL_GPIOMODE, 6, 1, sdram_func),
316 	GROUP("pci", SYSCTL_GPIOMODE, 7, 1, rt2880_pci_func),
317 	GROUP_END
318 };
319 
320 DECL_TABLE(rt3050_pintable) = {
321 	GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
322 	GROUP("spi", SYSCTL_GPIOMODE, 1, 1, spi_func),
323 	GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
324 	GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
325 	GROUP("jtag", SYSCTL_GPIOMODE, 6, 1, jtag_func),
326 	GROUP("mdio", SYSCTL_GPIOMODE, 7, 1, mdio_func),
327 	GROUP("sdram", SYSCTL_GPIOMODE, 8, 1, sdram_func),
328 	GROUP("rgmii", SYSCTL_GPIOMODE, 9, 1, rgmii_func),
329 	GROUP_END
330 };
331 
332 DECL_TABLE(rt3352_pintable) = {
333 	GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
334 	GROUP("spi", SYSCTL_GPIOMODE, 1, 1, i2c_func),
335 	GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
336 	GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
337 	GROUP("jtag", SYSCTL_GPIOMODE, 6, 1, jtag_func),
338 	GROUP("mdio", SYSCTL_GPIOMODE, 7, 1, mdio_func),
339 	GROUP("rgmii", SYSCTL_GPIOMODE, 9, 1, rgmii_func),
340 	GROUP("led", SYSCTL_GPIOMODE, 14, 3, led_func),
341 	GROUP("lna", SYSCTL_GPIOMODE, 18, 1, lna_func),
342 	GROUP("pa", SYSCTL_GPIOMODE, 20, 1, pa_func),
343 	GROUP("spi_cs1", SYSCTL_GPIOMODE, 21, 3, cs1_func),
344 	GROUP_END
345 };
346 
347 DECL_TABLE(rt3883_pintable) = {
348 	GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
349 	GROUP("spi", SYSCTL_GPIOMODE, 1, 1, spi_func),
350 	GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
351 	GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
352 	GROUP("jtag", SYSCTL_GPIOMODE, 6, 1, jtag_func),
353 	GROUP("mdio", SYSCTL_GPIOMODE, 7, 1, mdio_func),
354 	GROUP("lna a", SYSCTL_GPIOMODE, 16, 3, lna_a_func),
355 	GROUP("lna g", SYSCTL_GPIOMODE, 18, 3, lna_a_func),
356 	GROUP("pci", SYSCTL_GPIOMODE, 11, 7, rt3883_pci_func),
357 	GROUP("ge1", SYSCTL_GPIOMODE, 9, 1, gex_func),
358 	GROUP("ge2", SYSCTL_GPIOMODE, 10, 1, gex_func),
359 	GROUP_END
360 };
361 
362 DECL_TABLE(rt5350_pintable) = {
363 	GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
364 	GROUP("spi", SYSCTL_GPIOMODE, 1, 1, spi_func),
365 	GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
366 	GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
367 	GROUP("jtag", SYSCTL_GPIOMODE, 6, 1, jtag_func),
368 	GROUP("led", SYSCTL_GPIOMODE, 14, 3, led_func),
369 	GROUP("spi_cs1", SYSCTL_GPIOMODE, 21, 3, cs1_func),
370 	GROUP_END
371 };
372 
373 #endif /* _MTK_PINCTRL_H_ */
374