2 * Copyright (c) 2016 Stanislav Galabov.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice unmodified, this list of conditions, and the following
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.
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
30 #ifndef _MTK_PINCTRL_H_
31 #define _MTK_PINCTRL_H_
33 struct mtk_pin_function {
38 struct mtk_pin_group {
43 struct mtk_pin_function *functions;
47 #define FUNC(_name, _value) \
48 { .name = (_name), .value = (_value) }
50 #define GROUP(_name, _reg, _off, _mask, _funcs) \
51 { .name = (_name), .sysc_reg = (_reg), .offset = (_off), \
52 .mask = (_mask), .functions = (_funcs), .funcnum = nitems(_funcs) }
54 #define GROUP_END { NULL, 0, 0, 0, NULL, 0 }
56 #define DECL_FUNC(_name) \
57 static struct mtk_pin_function _name[]
58 #define DECL_TABLE(_name) \
59 static struct mtk_pin_group _name[]
61 /* Pin function declarations */
62 DECL_FUNC(i2c_func) = {
63 FUNC("i2c", 0), FUNC("gpio", 1)
66 DECL_FUNC(spi_func) = {
67 FUNC("spi", 0), FUNC("gpio", 1)
70 DECL_FUNC(uartf_func) = {
71 FUNC("uartf", 0), FUNC("pcm uartf", 1), FUNC("pcm i2s", 2),
72 FUNC("i2s uartf", 3), FUNC("pcm gpio", 4), FUNC("gpio uartf", 5),
73 FUNC("gpio i2s", 6), FUNC("gpio", 7)
76 DECL_FUNC(wdt_func) = {
77 FUNC("wdt rst", 0), FUNC("wdt", 0), FUNC("wdt refclk", 1),
81 DECL_FUNC(uartlite_func) = {
82 FUNC("uartlite", 0), FUNC("gpio", 1)
85 DECL_FUNC(jtag_func) = {
86 FUNC("jtag", 0), FUNC("gpio", 1)
89 DECL_FUNC(mdio_func) = {
90 FUNC("mdio", 0), FUNC("gpio", 1)
93 DECL_FUNC(led_func) = {
94 FUNC("led", 0), FUNC("gpio", 1), FUNC("bt", 2)
97 DECL_FUNC(cs1_func) = {
98 FUNC("spi_cs1", 0), FUNC("wdt_cs1", 1), FUNC("gpio", 2)
101 DECL_FUNC(sdram_func) = {
102 FUNC("sdram", 0), FUNC("gpio", 1)
105 DECL_FUNC(rgmii_func) = {
106 FUNC("rgmii", 0), FUNC("rgmii1", 0), FUNC("rgmii2", 0), FUNC("gpio", 1)
109 DECL_FUNC(lna_func) = {
110 FUNC("lna", 0), FUNC("gpio", 1)
113 DECL_FUNC(pa_func) = {
114 FUNC("pa", 0), FUNC("gpio", 1)
117 DECL_FUNC(gex_func) = {
118 FUNC("ge1", 0), FUNC("ge2", 0), FUNC("gpio", 1)
121 DECL_FUNC(rt3883_pci_func) = {
122 FUNC("pci-dev", 0), FUNC("pci-host2", 1), FUNC("pci-host1", 2),
123 FUNC("pci-fnc", 3), FUNC("gpio", 7)
126 DECL_FUNC(mt7620_pcie_func) = {
127 FUNC("pcie rst", 0), FUNC("pcie refclk", 1), FUNC("gpio", 2)
130 DECL_FUNC(lna_a_func) = {
131 FUNC("lna a", 0), FUNC("lna g", 0), FUNC("codec", 2), FUNC("gpio", 3)
134 DECL_FUNC(nd_sd_func) = {
135 FUNC("nand", 0), FUNC("sd", 1), FUNC("gpio", 2)
138 DECL_FUNC(mt7620_mdio_func) = {
139 FUNC("mdio", 0), FUNC("mdio refclk", 1), FUNC("gpio", 2)
142 DECL_FUNC(spi_refclk_func) = {
143 FUNC("spi refclk", 0), FUNC("gpio", 1)
146 DECL_FUNC(wled_func) = {
147 FUNC("wled", 0), FUNC("gpio", 1)
150 DECL_FUNC(ephy_func) = {
151 FUNC("ephy", 0), FUNC("gpio", 1)
154 DECL_FUNC(mt7628_gpio_func) = {
155 FUNC("gpio", 0), FUNC("gpio", 1), FUNC("refclk", 2), FUNC("pcie", 3)
158 DECL_FUNC(mt7628_spis_func) = {
159 FUNC("spis", 0), FUNC("gpio", 1), FUNC("utif", 2), FUNC("pwm", 3)
162 DECL_FUNC(mt7628_spi_cs1_func) = {
163 FUNC("spi", 0), FUNC("gpio", 1), FUNC("refclk", 2), FUNC("-", 3)
166 DECL_FUNC(mt7628_i2s_func) = {
167 FUNC("i2s", 0), FUNC("gpio", 1), FUNC("pcm", 2), FUNC("anttenna", 3)
170 DECL_FUNC(mt7628_uart0_func) = {
171 FUNC("uart", 0), FUNC("gpio", 1), FUNC("-", 2), FUNC("-", 3)
174 DECL_FUNC(mt7628_sd_func) = {
175 FUNC("sdxc", 0), FUNC("gpio", 1), FUNC("utif", 2), FUNC("jtag", 3)
178 DECL_FUNC(mt7628_perst_func) = {
179 FUNC("perst", 0), FUNC("gpio", 1)
182 DECL_FUNC(mt7628_refclk_func) = {
183 FUNC("refclk", 0), FUNC("gpio", 1)
186 DECL_FUNC(mt7628_i2c_func) = {
187 FUNC("i2c", 0), FUNC("gpio", 1), FUNC("debug", 2), FUNC("-", 3)
190 DECL_FUNC(mt7628_uart1_func) = {
191 FUNC("uart", 0), FUNC("gpio", 1), FUNC("pwm", 2), FUNC("sw r", 3)
194 DECL_FUNC(mt7628_uart2_func) = {
195 FUNC("uart", 0), FUNC("gpio", 1), FUNC("pwm", 2), FUNC("sdxc", 3)
198 DECL_FUNC(mt7628_pwm0_func) = {
199 FUNC("pwm", 0), FUNC("gpio", 1), FUNC("utif", 2), FUNC("sdxc", 3)
202 DECL_FUNC(mt7621_uart1_func) = {
203 FUNC("uart1", 0), FUNC("gpio", 1)
206 DECL_FUNC(mt7621_i2c_func) = {
207 FUNC("i2c", 0), FUNC("gpio", 1)
210 DECL_FUNC(mt7621_uart3_func) = {
211 FUNC("uart3", 0), FUNC("gpio", 1), FUNC("i2s", 2), FUNC("spdif3", 3)
214 DECL_FUNC(mt7621_uart2_func) = {
215 FUNC("uart2", 0), FUNC("gpio", 1), FUNC("pcm", 2), FUNC("spdif2", 3)
218 DECL_FUNC(mt7621_jtag_func) = {
219 FUNC("jtag", 0), FUNC("gpio", 1)
222 DECL_FUNC(mt7621_wdt_func) = {
223 FUNC("wdt rst", 0), FUNC("gpio", 1), FUNC("wdt refclk", 2), FUNC("-", 3)
226 DECL_FUNC(mt7621_pcie_func) = {
227 FUNC("pcie rst", 0), FUNC("gpio", 1), FUNC("pcie refclk", 2),
231 DECL_FUNC(mt7621_mdio_func) = {
232 FUNC("mdio", 0), FUNC("gpio", 1), FUNC("-", 2), FUNC("-", 3)
235 DECL_FUNC(mt7621_rgmii_func) = {
236 FUNC("rgmii1", 0), FUNC("rgmii2", 0), FUNC("gpio", 1)
239 DECL_FUNC(mt7621_spi_func) = {
240 FUNC("spi", 0), FUNC("gpio", 1), FUNC("nand1", 2), FUNC("-", 3)
243 DECL_FUNC(mt7621_sdhci_func) = {
244 FUNC("sdhci", 0), FUNC("gpio", 1), FUNC("nand1", 2), FUNC("-", 3)
247 /* Pin groups declarations */
248 DECL_TABLE(mt7628_pintable) = {
249 GROUP("gpio", SYSCTL_GPIOMODE, 0, 3, mt7628_gpio_func),
250 GROUP("spis", SYSCTL_GPIOMODE, 2, 3, mt7628_spis_func),
251 GROUP("spi cs1", SYSCTL_GPIOMODE, 4, 3, mt7628_spi_cs1_func),
252 GROUP("i2s", SYSCTL_GPIOMODE, 6, 3, mt7628_i2s_func),
253 GROUP("uart0", SYSCTL_GPIOMODE, 8, 3, mt7628_uart0_func),
254 GROUP("sdmode", SYSCTL_GPIOMODE, 10, 3, mt7628_sd_func),
255 GROUP("spi", SYSCTL_GPIOMODE, 12, 1, spi_func),
256 GROUP("wdt", SYSCTL_GPIOMODE, 14, 1, wdt_func),
257 GROUP("perst", SYSCTL_GPIOMODE, 16, 1, mt7628_perst_func),
258 GROUP("refclk", SYSCTL_GPIOMODE, 18, 1, mt7628_refclk_func),
259 GROUP("i2c", SYSCTL_GPIOMODE, 20, 3, mt7628_i2c_func),
260 GROUP("uart1", SYSCTL_GPIOMODE, 24, 3, mt7628_uart1_func),
261 GROUP("uart2", SYSCTL_GPIOMODE, 26, 3, mt7628_uart2_func),
262 GROUP("pwm0", SYSCTL_GPIOMODE, 28, 3, mt7628_pwm0_func),
263 GROUP("pwm1", SYSCTL_GPIOMODE, 30, 3, mt7628_pwm0_func),
267 DECL_TABLE(mt7621_pintable) = {
268 GROUP("uart1", SYSCTL_GPIOMODE, 1, 1, mt7621_uart1_func),
269 GROUP("i2c", SYSCTL_GPIOMODE, 2, 1, mt7621_i2c_func),
270 GROUP("uart3", SYSCTL_GPIOMODE, 3, 3, mt7621_uart3_func),
271 GROUP("uart2", SYSCTL_GPIOMODE, 5, 3, mt7621_uart2_func),
272 GROUP("jtag", SYSCTL_GPIOMODE, 7, 1, mt7621_jtag_func),
273 GROUP("wdt", SYSCTL_GPIOMODE, 8, 3, mt7621_wdt_func),
274 GROUP("pcie", SYSCTL_GPIOMODE, 10, 3, mt7621_pcie_func),
275 GROUP("mdio", SYSCTL_GPIOMODE, 12, 3, mt7621_mdio_func),
276 GROUP("rgmii2", SYSCTL_GPIOMODE, 15, 1, mt7621_rgmii_func),
277 GROUP("spi", SYSCTL_GPIOMODE, 16, 3, mt7621_spi_func),
278 GROUP("sdhci", SYSCTL_GPIOMODE, 18, 3, mt7621_sdhci_func),
279 GROUP("rgmii1", SYSCTL_GPIOMODE, 14, 1, mt7621_rgmii_func),
283 DECL_TABLE(mt7620_pintable) = {
284 GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
285 GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
286 GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
287 GROUP("mdio", SYSCTL_GPIOMODE, 7, 3, mt7620_mdio_func),
288 GROUP("rgmii1", SYSCTL_GPIOMODE, 9, 1, rgmii_func),
289 GROUP("rgmii2", SYSCTL_GPIOMODE, 10, 1, rgmii_func),
290 GROUP("spi", SYSCTL_GPIOMODE, 11, 1, spi_func),
291 GROUP("spi refclk", SYSCTL_GPIOMODE, 12, 1, spi_refclk_func),
292 GROUP("wled", SYSCTL_GPIOMODE, 13, 1, wled_func),
293 GROUP("ephy", SYSCTL_GPIOMODE, 15, 1, ephy_func),
294 GROUP("pcie", SYSCTL_GPIOMODE, 16, 3, mt7620_pcie_func),
295 GROUP("nd_sd", SYSCTL_GPIOMODE, 18, 3, nd_sd_func),
296 GROUP("pa", SYSCTL_GPIOMODE, 20, 1, pa_func),
297 GROUP("wdt", SYSCTL_GPIOMODE, 21, 3, wdt_func),
301 DECL_TABLE(rt3050_pintable) = {
302 GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
303 GROUP("spi", SYSCTL_GPIOMODE, 1, 1, spi_func),
304 GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
305 GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
306 GROUP("jtag", SYSCTL_GPIOMODE, 6, 1, jtag_func),
307 GROUP("mdio", SYSCTL_GPIOMODE, 7, 1, mdio_func),
308 GROUP("sdram", SYSCTL_GPIOMODE, 8, 1, sdram_func),
309 GROUP("rgmii", SYSCTL_GPIOMODE, 9, 1, rgmii_func),
313 DECL_TABLE(rt3352_pintable) = {
314 GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
315 GROUP("spi", SYSCTL_GPIOMODE, 1, 1, i2c_func),
316 GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
317 GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
318 GROUP("jtag", SYSCTL_GPIOMODE, 6, 1, jtag_func),
319 GROUP("mdio", SYSCTL_GPIOMODE, 7, 1, mdio_func),
320 GROUP("rgmii", SYSCTL_GPIOMODE, 9, 1, rgmii_func),
321 GROUP("led", SYSCTL_GPIOMODE, 14, 3, led_func),
322 GROUP("lna", SYSCTL_GPIOMODE, 18, 1, lna_func),
323 GROUP("pa", SYSCTL_GPIOMODE, 20, 1, pa_func),
324 GROUP("spi_cs1", SYSCTL_GPIOMODE, 21, 3, cs1_func),
328 DECL_TABLE(rt3883_pintable) = {
329 GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
330 GROUP("spi", SYSCTL_GPIOMODE, 1, 1, spi_func),
331 GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
332 GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
333 GROUP("jtag", SYSCTL_GPIOMODE, 6, 1, jtag_func),
334 GROUP("mdio", SYSCTL_GPIOMODE, 7, 1, mdio_func),
335 GROUP("lna a", SYSCTL_GPIOMODE, 16, 3, lna_a_func),
336 GROUP("lna g", SYSCTL_GPIOMODE, 18, 3, lna_a_func),
337 GROUP("pci", SYSCTL_GPIOMODE, 11, 7, rt3883_pci_func),
338 GROUP("ge1", SYSCTL_GPIOMODE, 9, 1, gex_func),
339 GROUP("ge2", SYSCTL_GPIOMODE, 10, 1, gex_func),
343 DECL_TABLE(rt5350_pintable) = {
344 GROUP("i2c", SYSCTL_GPIOMODE, 0, 1, i2c_func),
345 GROUP("spi", SYSCTL_GPIOMODE, 1, 1, spi_func),
346 GROUP("uartf", SYSCTL_GPIOMODE, 2, 7, uartf_func),
347 GROUP("uartlite", SYSCTL_GPIOMODE, 5, 1, uartlite_func),
348 GROUP("jtag", SYSCTL_GPIOMODE, 6, 1, jtag_func),
349 GROUP("led", SYSCTL_GPIOMODE, 14, 3, led_func),
350 GROUP("spi_cs1", SYSCTL_GPIOMODE, 21, 3, cs1_func),
354 #endif /* _MTK_PINCTRL_H_ */