106763c74SThomas Petazzoni // SPDX-License-Identifier: GPL-2.0-or-later
206763c74SThomas Petazzoni /*
306763c74SThomas Petazzoni  * Marvell Kirkwood pinctrl driver based on mvebu pinctrl core
406763c74SThomas Petazzoni  *
506763c74SThomas Petazzoni  * Author: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
606763c74SThomas Petazzoni  */
706763c74SThomas Petazzoni 
806763c74SThomas Petazzoni #include <linux/err.h>
906763c74SThomas Petazzoni #include <linux/init.h>
1006763c74SThomas Petazzoni #include <linux/io.h>
1106763c74SThomas Petazzoni #include <linux/platform_device.h>
1206763c74SThomas Petazzoni #include <linux/clk.h>
1306763c74SThomas Petazzoni #include <linux/of.h>
1406763c74SThomas Petazzoni #include <linux/of_device.h>
1506763c74SThomas Petazzoni #include <linux/pinctrl/pinctrl.h>
1606763c74SThomas Petazzoni 
1706763c74SThomas Petazzoni #include "pinctrl-mvebu.h"
1806763c74SThomas Petazzoni 
1906763c74SThomas Petazzoni #define V(f6180, f6190, f6192, f6281, f6282, dx4122, dx1135)	\
2006763c74SThomas Petazzoni 	((f6180 << 0) | (f6190 << 1) | (f6192 << 2) |	\
2106763c74SThomas Petazzoni 	 (f6281 << 3) | (f6282 << 4) | (dx4122 << 5) |	\
2206763c74SThomas Petazzoni 	 (dx1135 << 6))
23eed43e7eSChris Packham 
2406763c74SThomas Petazzoni enum kirkwood_variant {
25eed43e7eSChris Packham 	VARIANT_MV88F6180	= V(1, 0, 0, 0, 0, 0, 0),
26eed43e7eSChris Packham 	VARIANT_MV88F6190	= V(0, 1, 0, 0, 0, 0, 0),
2706763c74SThomas Petazzoni 	VARIANT_MV88F6192	= V(0, 0, 1, 0, 0, 0, 0),
2806763c74SThomas Petazzoni 	VARIANT_MV88F6281	= V(0, 0, 0, 1, 0, 0, 0),
29eed43e7eSChris Packham 	VARIANT_MV88F6282	= V(0, 0, 0, 0, 1, 0, 0),
30eed43e7eSChris Packham 	VARIANT_MV98DX4122	= V(0, 0, 0, 0, 0, 1, 0),
31eed43e7eSChris Packham 	VARIANT_MV98DX1135	= V(0, 0, 0, 0, 0, 0, 1),
32eed43e7eSChris Packham };
33eed43e7eSChris Packham 
34eed43e7eSChris Packham static struct mvebu_mpp_mode mv88f6xxx_mpp_modes[] = {
35eed43e7eSChris Packham 	MPP_MODE(0,
3606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
3706763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x1, "nand", "io2",     V(1, 1, 1, 1, 1, 1, 1)),
3806763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x2, "spi", "cs",       V(1, 1, 1, 1, 1, 1, 1))),
3906763c74SThomas Petazzoni 	MPP_MODE(1,
40eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(1, 1, 1, 1, 1, 1, 1)),
41eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "io3",     V(1, 1, 1, 1, 1, 1, 1)),
42eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "spi", "mosi",     V(1, 1, 1, 1, 1, 1, 1))),
4306763c74SThomas Petazzoni 	MPP_MODE(2,
44eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(1, 1, 1, 1, 1, 1, 1)),
45eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "io4",     V(1, 1, 1, 1, 1, 1, 1)),
46eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "spi", "sck",      V(1, 1, 1, 1, 1, 1, 1))),
4706763c74SThomas Petazzoni 	MPP_MODE(3,
48eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(1, 1, 1, 1, 1, 1, 1)),
49eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "io5",     V(1, 1, 1, 1, 1, 1, 1)),
50eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "spi", "miso",     V(1, 1, 1, 1, 1, 1, 1))),
5106763c74SThomas Petazzoni 	MPP_MODE(4,
52eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
53eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "io6",     V(1, 1, 1, 1, 1, 1, 1)),
54eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "uart0", "rxd",    V(1, 1, 1, 1, 1, 1, 1)),
5506763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x5, "sata1", "act",    V(0, 0, 1, 1, 1, 0, 0)),
56eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "hsync",    V(0, 0, 0, 0, 1, 0, 0)),
57eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xd, "ptp", "clk",      V(1, 1, 1, 1, 0, 0, 0))),
58eed43e7eSChris Packham 	MPP_MODE(5,
59eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(1, 1, 1, 1, 1, 1, 1)),
60eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "io7",     V(1, 1, 1, 1, 1, 1, 1)),
61eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "uart0", "txd",    V(1, 1, 1, 1, 1, 1, 1)),
6206763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "ptp", "trig",     V(1, 1, 1, 1, 0, 0, 0)),
63eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x5, "sata0", "act",    V(0, 1, 1, 1, 1, 0, 0)),
64eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "vsync",    V(0, 0, 0, 0, 1, 0, 0))),
65eed43e7eSChris Packham 	MPP_MODE(6,
66eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "sysrst", "out",   V(1, 1, 1, 1, 1, 1, 1)),
67eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "spi", "mosi",     V(1, 1, 1, 1, 1, 1, 1)),
68eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x3, "ptp", "trig",     V(1, 1, 1, 1, 0, 0, 0))),
6906763c74SThomas Petazzoni 	MPP_MODE(7,
70eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(1, 1, 1, 1, 1, 1, 1)),
71eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "pex", "rsto",     V(1, 1, 1, 1, 0, 1, 1)),
72eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "spi", "cs",       V(1, 1, 1, 1, 1, 1, 1)),
7306763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ptp", "trig",     V(1, 1, 1, 1, 0, 0, 0)),
74eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "pwm",      V(0, 0, 0, 0, 1, 0, 0))),
75eed43e7eSChris Packham 	MPP_MODE(8,
76eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
77eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "twsi0", "sda",    V(1, 1, 1, 1, 1, 1, 1)),
78eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "uart0", "rts",    V(1, 1, 1, 1, 1, 1, 1)),
7906763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "uart1", "rts",    V(1, 1, 1, 1, 1, 1, 1)),
80eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "mii-1", "rxerr",  V(0, 1, 1, 1, 1, 0, 0)),
81eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x5, "sata1", "prsnt",  V(0, 0, 1, 1, 1, 0, 0)),
82eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xc, "ptp", "clk",      V(1, 1, 1, 1, 0, 0, 0)),
83eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xd, "mii", "col",      V(1, 1, 1, 1, 1, 0, 0))),
84eed43e7eSChris Packham 	MPP_MODE(9,
85eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
86eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "twsi0", "sck",    V(1, 1, 1, 1, 1, 1, 1)),
87eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "uart0", "cts",    V(1, 1, 1, 1, 1, 1, 1)),
8806763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "uart1", "cts",    V(1, 1, 1, 1, 1, 1, 1)),
89eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x5, "sata0", "prsnt",  V(0, 1, 1, 1, 1, 0, 0)),
90eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xc, "ptp", "evreq",    V(1, 1, 1, 1, 0, 0, 0)),
91eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xd, "mii", "crs",      V(1, 1, 1, 1, 1, 0, 0))),
92eed43e7eSChris Packham 	MPP_MODE(10,
93eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(1, 1, 1, 1, 1, 1, 1)),
94eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "spi", "sck",      V(1, 1, 1, 1, 1, 1, 1)),
95eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0X3, "uart0", "txd",    V(1, 1, 1, 1, 1, 1, 1)),
9606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x5, "sata1", "act",    V(0, 0, 1, 1, 1, 0, 0)),
97eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xc, "ptp", "trig",     V(1, 1, 1, 1, 0, 0, 0))),
98eed43e7eSChris Packham 	MPP_MODE(11,
99eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
100eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "spi", "miso",     V(1, 1, 1, 1, 1, 1, 1)),
101eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x3, "uart0", "rxd",    V(1, 1, 1, 1, 1, 1, 1)),
10206763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "ptp-1", "evreq",  V(1, 1, 1, 1, 0, 0, 0)),
103eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xc, "ptp-2", "trig",   V(1, 1, 1, 1, 0, 0, 0)),
104eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xd, "ptp", "clk",      V(1, 1, 1, 1, 0, 0, 0)),
105eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x5, "sata0", "act",    V(0, 1, 1, 1, 1, 0, 0))),
106eed43e7eSChris Packham 	MPP_MODE(12,
107eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(1, 1, 1, 0, 1, 0, 0)),
108eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 0, 0, 1, 0, 0, 0)),
109eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "sdio", "clk",     V(1, 1, 1, 1, 1, 0, 0)),
11006763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0xa, "audio", "spdifo", V(0, 0, 0, 0, 1, 0, 0)),
111eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "spi", "mosi",     V(0, 0, 0, 0, 1, 0, 0)),
112eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xd, "twsi1", "sda",    V(0, 0, 0, 0, 1, 0, 0))),
113eed43e7eSChris Packham 	MPP_MODE(13,
114eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
115eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "sdio", "cmd",     V(1, 1, 1, 1, 1, 0, 0)),
116eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x3, "uart1", "txd",    V(1, 1, 1, 1, 1, 1, 1)),
11706763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0xa, "audio", "rmclk",  V(0, 0, 0, 0, 1, 0, 0)),
118eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "pwm",      V(0, 0, 0, 0, 1, 0, 0))),
119eed43e7eSChris Packham 	MPP_MODE(14,
120eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
121eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "sdio", "d0",      V(1, 1, 1, 1, 1, 0, 0)),
122eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x3, "uart1", "rxd",    V(1, 1, 1, 1, 1, 1, 1)),
12306763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "sata1", "prsnt",  V(0, 0, 1, 1, 1, 0, 0)),
124eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xa, "audio", "spdifi", V(0, 0, 0, 0, 1, 0, 0)),
125eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "audio-1", "sdi",  V(0, 0, 0, 0, 1, 0, 0)),
126eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xd, "mii", "col",      V(1, 1, 1, 1, 1, 0, 0))),
127eed43e7eSChris Packham 	MPP_MODE(15,
128eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
129eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "sdio", "d1",      V(1, 1, 1, 1, 1, 0, 0)),
130eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "uart0", "rts",    V(1, 1, 1, 1, 1, 1, 1)),
13106763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "uart1", "txd",    V(1, 1, 1, 1, 1, 0, 0)),
132eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "sata0", "act",    V(0, 1, 1, 1, 1, 0, 0)),
133eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "spi", "cs",       V(0, 0, 0, 0, 1, 0, 0))),
134eed43e7eSChris Packham 	MPP_MODE(16,
135eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
136eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "sdio", "d2",      V(1, 1, 1, 1, 1, 0, 0)),
137eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "uart0", "cts",    V(1, 1, 1, 1, 1, 1, 1)),
13806763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "uart1", "rxd",    V(1, 1, 1, 1, 1, 0, 0)),
139eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "sata1", "act",    V(0, 0, 1, 1, 1, 0, 0)),
140eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "extclk",   V(0, 0, 0, 0, 1, 0, 0)),
141eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xd, "mii", "crs",      V(1, 1, 1, 1, 1, 0, 0))),
142eed43e7eSChris Packham 	MPP_MODE(17,
143eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 0, 0)),
144eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "sdio", "d3",      V(1, 1, 1, 1, 1, 0, 0)),
145eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "sata0", "prsnt",  V(0, 1, 1, 1, 1, 0, 0)),
14606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0xa, "sata1", "act",    V(0, 0, 0, 0, 1, 0, 0)),
147eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xd, "twsi1", "sck",    V(0, 0, 0, 0, 1, 0, 0))),
148eed43e7eSChris Packham 	MPP_MODE(18,
149eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(1, 1, 1, 1, 1, 1, 1)),
150eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "io0",     V(1, 1, 1, 1, 1, 1, 1)),
151eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "pex", "clkreq",   V(0, 0, 0, 0, 1, 0, 0))),
15206763c74SThomas Petazzoni 	MPP_MODE(19,
153eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(1, 1, 1, 1, 1, 1, 1)),
154eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "io1",     V(1, 1, 1, 1, 1, 1, 1))),
155eed43e7eSChris Packham 	MPP_MODE(20,
15606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
157eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp0",       V(0, 0, 1, 1, 1, 0, 0)),
158eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "tx0ql",    V(0, 0, 1, 1, 1, 0, 0)),
15906763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "txd0",     V(0, 1, 1, 1, 1, 0, 0)),
160eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "spdifi", V(0, 0, 1, 1, 1, 0, 0)),
161eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x5, "sata1", "act",    V(0, 0, 1, 1, 1, 0, 0)),
162eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d0",       V(0, 0, 0, 0, 1, 0, 0)),
163eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xc, "mii", "rxerr",    V(0, 0, 0, 0, 0, 0, 0))),
164eed43e7eSChris Packham 	MPP_MODE(21,
165eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
166eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp1",       V(0, 0, 1, 1, 1, 0, 0)),
167eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "rx0ql",    V(0, 0, 1, 1, 1, 0, 0)),
16806763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "txd1",     V(0, 1, 1, 1, 1, 0, 0)),
169eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "spdifi", V(0, 0, 0, 0, 0, 0, 0)),
170eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "spdifo", V(0, 0, 1, 1, 1, 0, 0)),
171eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x5, "sata0", "act",    V(0, 1, 1, 1, 1, 0, 0)),
172eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d1",       V(0, 0, 0, 0, 1, 0, 0))),
173eed43e7eSChris Packham 	MPP_MODE(22,
174eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
175eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp2",       V(0, 0, 1, 1, 1, 0, 0)),
176eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "tx2ql",    V(0, 0, 1, 1, 1, 0, 0)),
17706763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "txd2",     V(0, 1, 1, 1, 1, 0, 0)),
178eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "spdifo", V(0, 0, 0, 0, 0, 0, 0)),
179eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "rmclk",  V(0, 0, 1, 1, 1, 0, 0)),
180eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x5, "sata1", "prsnt",  V(0, 0, 1, 1, 1, 0, 0)),
181eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d2",       V(0, 0, 0, 0, 1, 0, 0))),
182eed43e7eSChris Packham 	MPP_MODE(23,
183eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
184eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp3",       V(0, 0, 1, 1, 1, 0, 0)),
185eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "rx2ql",    V(0, 0, 1, 1, 1, 0, 0)),
18606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "txd3",     V(0, 1, 1, 1, 1, 0, 0)),
187eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "rmclk",  V(0, 0, 0, 0, 0, 0, 0)),
188eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "bclk",   V(0, 0, 1, 1, 1, 0, 0)),
189eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x5, "sata0", "prsnt",  V(0, 1, 1, 1, 1, 0, 0)),
190eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d3",       V(0, 0, 0, 0, 1, 0, 0))),
191eed43e7eSChris Packham 	MPP_MODE(24,
192eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
193eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp4",       V(0, 0, 1, 1, 1, 0, 0)),
194eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-cs0",  V(0, 0, 1, 1, 1, 0, 0)),
19506763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "rxd0",     V(0, 1, 1, 1, 1, 0, 0)),
196eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "bclk",   V(0, 0, 0, 0, 0, 0, 0)),
197eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "sdo",    V(0, 0, 1, 1, 1, 0, 0)),
198eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d4",       V(0, 0, 0, 0, 1, 0, 0))),
199eed43e7eSChris Packham 	MPP_MODE(25,
200eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
201eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp5",       V(0, 0, 1, 1, 1, 0, 0)),
202eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-sck",  V(0, 0, 1, 1, 1, 0, 0)),
20306763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "rxd1",     V(0, 1, 1, 1, 1, 0, 0)),
204eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "sdo",    V(0, 0, 0, 0, 0, 0, 0)),
205eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "lrclk",  V(0, 0, 1, 1, 1, 0, 0)),
206eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d5",       V(0, 0, 0, 0, 1, 0, 0))),
207eed43e7eSChris Packham 	MPP_MODE(26,
208eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
209eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp6",       V(0, 0, 1, 1, 1, 0, 0)),
210eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-miso", V(0, 0, 1, 1, 1, 0, 0)),
21106763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "rxd2",     V(0, 1, 1, 1, 1, 0, 0)),
212eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "lrclk",  V(0, 0, 0, 0, 0, 0, 0)),
213eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "mclk",   V(0, 0, 1, 1, 1, 0, 0)),
214eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d6",       V(0, 0, 0, 0, 1, 0, 0))),
215eed43e7eSChris Packham 	MPP_MODE(27,
216eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
217eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp7",       V(0, 0, 1, 1, 1, 0, 0)),
218eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-mosi", V(0, 0, 1, 1, 1, 0, 0)),
21906763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "rxd3",     V(0, 1, 1, 1, 1, 0, 0)),
220eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "mclk",   V(0, 0, 0, 0, 0, 0, 0)),
221eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "sdi",    V(0, 0, 1, 1, 1, 0, 0)),
222eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d7",       V(0, 0, 0, 0, 1, 0, 0))),
223eed43e7eSChris Packham 	MPP_MODE(28,
224eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 0)),
225eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp8",       V(0, 0, 1, 1, 1, 0, 0)),
226eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "int",      V(0, 0, 1, 1, 1, 0, 0)),
22706763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "col",      V(0, 1, 1, 1, 1, 0, 0)),
228eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "sdi",    V(0, 0, 0, 0, 0, 0, 0)),
229eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "extclk", V(0, 0, 1, 1, 1, 0, 0)),
230eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d8",       V(0, 0, 0, 0, 1, 0, 0)),
231eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "ren",     V(0, 0, 0, 0, 0, 0, 1))),
232eed43e7eSChris Packham 	MPP_MODE(29,
233eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 0)),
234eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp9",       V(0, 0, 1, 1, 1, 0, 0)),
235eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "rst",      V(0, 0, 1, 1, 1, 0, 0)),
23606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "txclk",    V(0, 1, 1, 1, 1, 0, 0)),
237eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x4, "audio", "extclk", V(0, 0, 0, 0, 0, 0, 0)),
238eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d9",       V(0, 0, 0, 0, 1, 0, 0)),
239eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "wen",     V(0, 0, 0, 0, 0, 0, 1))),
240eed43e7eSChris Packham 	MPP_MODE(30,
241eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
242eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp10",      V(0, 0, 1, 1, 1, 0, 0)),
243eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "pclk",     V(0, 0, 1, 1, 1, 0, 0)),
24406763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "rxctl",    V(0, 1, 1, 1, 1, 0, 0)),
245eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d10",      V(0, 0, 0, 0, 1, 0, 0))),
246eed43e7eSChris Packham 	MPP_MODE(31,
247eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
248eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp11",      V(0, 0, 1, 1, 1, 0, 0)),
249eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "fs",       V(0, 0, 1, 1, 1, 0, 0)),
25006763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "rxclk",    V(0, 1, 1, 1, 1, 0, 0)),
251eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d11",      V(0, 0, 0, 0, 1, 0, 0))),
252eed43e7eSChris Packham 	MPP_MODE(32,
253eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 0, 1)),
254eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp12",      V(0, 0, 1, 1, 1, 0, 0)),
255eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "drx",      V(0, 0, 1, 1, 1, 0, 0)),
25606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x3, "ge1", "txclko",   V(0, 1, 1, 1, 1, 0, 0)),
257eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d12",      V(0, 0, 0, 0, 1, 0, 0))),
258eed43e7eSChris Packham 	MPP_MODE(33,
259eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(0, 1, 1, 1, 1, 0, 1)),
260eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "dtx",      V(0, 0, 1, 1, 1, 0, 0)),
261eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x3, "ge1", "txctl",    V(0, 1, 1, 1, 1, 0, 0)),
26206763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0xb, "lcd", "d13",      V(0, 0, 0, 0, 1, 0, 0))),
263eed43e7eSChris Packham 	MPP_MODE(34,
264eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 1, 1, 1, 1, 1, 1)),
265eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-cs1",  V(0, 0, 1, 1, 1, 0, 0)),
266eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x3, "ge1", "txen",     V(0, 1, 1, 1, 1, 0, 0)),
26706763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x5, "sata1", "act",    V(0, 0, 0, 1, 1, 0, 0)),
268eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d14",      V(0, 0, 0, 0, 1, 0, 0)),
269eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "ale",     V(0, 0, 0, 0, 0, 0, 1))),
270eed43e7eSChris Packham 	MPP_MODE(35,
271eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 1, 1, 1, 1, 1, 1)),
272eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "tx0ql",    V(0, 0, 1, 1, 1, 0, 0)),
273eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x3, "ge1", "rxerr",    V(0, 1, 1, 1, 1, 0, 0)),
27406763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x5, "sata0", "act",    V(0, 1, 1, 1, 1, 0, 0)),
275eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d15",      V(0, 0, 0, 0, 1, 0, 0)),
276eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xc, "mii", "rxerr",    V(1, 1, 1, 1, 1, 0, 0)),
277eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "nand", "cen",     V(0, 0, 0, 0, 0, 0, 1))),
278eed43e7eSChris Packham 	MPP_MODE(36,
279eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 0, 0, 1, 1, 1, 1)),
280eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp0",       V(0, 0, 0, 1, 1, 0, 0)),
281eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-cs1",  V(0, 0, 0, 1, 1, 0, 0)),
28206763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "audio", "spdifi", V(1, 0, 0, 1, 1, 0, 0)),
283eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "twsi1", "sda",    V(0, 0, 0, 0, 1, 0, 0))),
284eed43e7eSChris Packham 	MPP_MODE(37,
285eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 0, 0, 1, 1, 1, 1)),
286eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp1",       V(0, 0, 0, 1, 1, 0, 0)),
287eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "tx2ql",    V(0, 0, 0, 1, 1, 0, 0)),
28806763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "audio", "spdifo", V(1, 0, 0, 1, 1, 0, 0)),
289eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "twsi1", "sck",    V(0, 0, 0, 0, 1, 0, 0))),
290eed43e7eSChris Packham 	MPP_MODE(38,
291eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 0, 0, 1, 1, 1, 1)),
292eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp2",       V(0, 0, 0, 1, 1, 0, 0)),
293eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "rx2ql",    V(0, 0, 0, 1, 1, 0, 0)),
29406763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "audio", "rmclk",  V(1, 0, 0, 1, 1, 0, 0)),
295eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d18",      V(0, 0, 0, 0, 1, 0, 0))),
296eed43e7eSChris Packham 	MPP_MODE(39,
297eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 0, 0, 1, 1, 1, 1)),
298eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp3",       V(0, 0, 0, 1, 1, 0, 0)),
299eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-cs0",  V(0, 0, 0, 1, 1, 0, 0)),
30006763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "audio", "bclk",   V(1, 0, 0, 1, 1, 0, 0)),
301eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d19",      V(0, 0, 0, 0, 1, 0, 0))),
302eed43e7eSChris Packham 	MPP_MODE(40,
303eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 0, 0, 1, 1, 1, 1)),
304eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp4",       V(0, 0, 0, 1, 1, 0, 0)),
305eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-sck",  V(0, 0, 0, 1, 1, 0, 0)),
30606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "audio", "sdo",    V(1, 0, 0, 1, 1, 0, 0)),
307eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d20",      V(0, 0, 0, 0, 1, 0, 0))),
308eed43e7eSChris Packham 	MPP_MODE(41,
309eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 0, 0, 1, 1, 1, 1)),
310eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp5",       V(0, 0, 0, 1, 1, 0, 0)),
311eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-miso", V(0, 0, 0, 1, 1, 0, 0)),
31206763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "audio", "lrclk",  V(1, 0, 0, 1, 1, 0, 0)),
313eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d21",      V(0, 0, 0, 0, 1, 0, 0))),
314eed43e7eSChris Packham 	MPP_MODE(42,
315eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 0, 0, 1, 1, 1, 1)),
316eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp6",       V(0, 0, 0, 1, 1, 0, 0)),
317eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "spi-mosi", V(0, 0, 0, 1, 1, 0, 0)),
31806763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "audio", "mclk",   V(1, 0, 0, 1, 1, 0, 0)),
319eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d22",      V(0, 0, 0, 0, 1, 0, 0))),
320eed43e7eSChris Packham 	MPP_MODE(43,
321eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 0, 0, 1, 1, 1, 1)),
322eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp7",       V(0, 0, 0, 1, 1, 0, 0)),
323eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "int",      V(0, 0, 0, 1, 1, 0, 0)),
32406763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "audio", "sdi",    V(1, 0, 0, 1, 1, 0, 0)),
325eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d23",      V(0, 0, 0, 0, 1, 0, 0))),
326eed43e7eSChris Packham 	MPP_MODE(44,
327eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(1, 0, 0, 1, 1, 1, 1)),
328eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp8",       V(0, 0, 0, 1, 1, 0, 0)),
329eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "rst",      V(0, 0, 0, 1, 1, 0, 0)),
33006763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x4, "audio", "extclk", V(1, 0, 0, 1, 1, 0, 0)),
331eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "clk",      V(0, 0, 0, 0, 1, 0, 0))),
332eed43e7eSChris Packham 	MPP_MODE(45,
333eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 0, 0, 1, 1, 1, 1)),
334eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp9",       V(0, 0, 0, 1, 1, 0, 0)),
335eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "pclk",     V(0, 0, 0, 1, 1, 0, 0)),
33606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0xb, "lcd", "e",        V(0, 0, 0, 0, 1, 0, 0))),
337eed43e7eSChris Packham 	MPP_MODE(46,
338eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 0, 0, 1, 1, 0, 0)),
339eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp10",      V(0, 0, 0, 1, 1, 0, 0)),
340eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "fs",       V(0, 0, 0, 1, 1, 0, 0)),
34106763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0xb, "lcd", "hsync",    V(0, 0, 0, 0, 1, 0, 0))),
342eed43e7eSChris Packham 	MPP_MODE(47,
343eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 0, 0, 1, 1, 0, 0)),
344eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp11",      V(0, 0, 0, 1, 1, 0, 0)),
345eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "drx",      V(0, 0, 0, 1, 1, 0, 0)),
34606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0xb, "lcd", "vsync",    V(0, 0, 0, 0, 1, 0, 0))),
347eed43e7eSChris Packham 	MPP_MODE(48,
348eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 0, 0, 1, 1, 0, 0)),
349eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp12",      V(0, 0, 0, 1, 1, 0, 0)),
350eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x2, "tdm", "dtx",      V(0, 0, 0, 1, 1, 0, 0)),
35106763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0xb, "lcd", "d16",      V(0, 0, 0, 0, 1, 0, 0))),
352eed43e7eSChris Packham 	MPP_MODE(49,
353eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpio", NULL,      V(0, 0, 0, 1, 0, 1, 1)),
354eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x0, "gpo", NULL,       V(0, 0, 0, 0, 1, 0, 0)),
355eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x1, "ts", "mp9",       V(0, 0, 0, 1, 0, 0, 0)),
35606763c74SThomas Petazzoni 		MPP_VAR_FUNCTION(0x2, "tdm", "rx0ql",    V(0, 0, 0, 1, 1, 0, 0)),
357eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0x5, "ptp", "clk",      V(0, 0, 0, 1, 0, 0, 0)),
358eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xa, "pex", "clkreq",   V(0, 0, 0, 0, 1, 0, 0)),
359eed43e7eSChris Packham 		MPP_VAR_FUNCTION(0xb, "lcd", "d17",      V(0, 0, 0, 0, 1, 0, 0))),
360eed43e7eSChris Packham };
361eed43e7eSChris Packham 
362eed43e7eSChris Packham static const struct mvebu_mpp_ctrl mv88f6180_mpp_controls[] = {
363eed43e7eSChris Packham 	MPP_FUNC_CTRL(0, 44, NULL, mvebu_mmio_mpp_ctrl),
36406763c74SThomas Petazzoni };
36506763c74SThomas Petazzoni 
36630be3fb9SRussell King static struct pinctrl_gpio_range mv88f6180_gpio_ranges[] = {
367ad9ec4ecSRussell King 	MPP_GPIO_RANGE(0,  0,  0, 20),
36806763c74SThomas Petazzoni 	MPP_GPIO_RANGE(1, 35, 35, 10),
36906763c74SThomas Petazzoni };
37006763c74SThomas Petazzoni 
3719573e792SAndreas Klinger static const struct mvebu_mpp_ctrl mv88f619x_mpp_controls[] = {
3729573e792SAndreas Klinger 	MPP_FUNC_CTRL(0, 35, NULL, mvebu_mmio_mpp_ctrl),
37306763c74SThomas Petazzoni };
37406763c74SThomas Petazzoni 
37530be3fb9SRussell King static struct pinctrl_gpio_range mv88f619x_gpio_ranges[] = {
376ad9ec4ecSRussell King 	MPP_GPIO_RANGE(0,  0,  0, 32),
37706763c74SThomas Petazzoni 	MPP_GPIO_RANGE(1, 32, 32,  4),
37806763c74SThomas Petazzoni };
37906763c74SThomas Petazzoni 
38006763c74SThomas Petazzoni static const struct mvebu_mpp_ctrl mv88f628x_mpp_controls[] = {
38106763c74SThomas Petazzoni 	MPP_FUNC_CTRL(0, 49, NULL, mvebu_mmio_mpp_ctrl),
38206763c74SThomas Petazzoni };
38306763c74SThomas Petazzoni 
38430be3fb9SRussell King static struct pinctrl_gpio_range mv88f628x_gpio_ranges[] = {
385ad9ec4ecSRussell King 	MPP_GPIO_RANGE(0,  0,  0, 32),
38606763c74SThomas Petazzoni 	MPP_GPIO_RANGE(1, 32, 32, 18),
38706763c74SThomas Petazzoni };
38806763c74SThomas Petazzoni 
38906763c74SThomas Petazzoni static struct mvebu_pinctrl_soc_info mv88f6180_info = {
39006763c74SThomas Petazzoni 	.variant = VARIANT_MV88F6180,
39106763c74SThomas Petazzoni 	.controls = mv88f6180_mpp_controls,
39206763c74SThomas Petazzoni 	.ncontrols = ARRAY_SIZE(mv88f6180_mpp_controls),
39306763c74SThomas Petazzoni 	.modes = mv88f6xxx_mpp_modes,
39406763c74SThomas Petazzoni 	.nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes),
39506763c74SThomas Petazzoni 	.gpioranges = mv88f6180_gpio_ranges,
39606763c74SThomas Petazzoni 	.ngpioranges = ARRAY_SIZE(mv88f6180_gpio_ranges),
39706763c74SThomas Petazzoni };
39806763c74SThomas Petazzoni 
39906763c74SThomas Petazzoni static struct mvebu_pinctrl_soc_info mv88f6190_info = {
40006763c74SThomas Petazzoni 	.variant = VARIANT_MV88F6190,
40106763c74SThomas Petazzoni 	.controls = mv88f619x_mpp_controls,
40206763c74SThomas Petazzoni 	.ncontrols = ARRAY_SIZE(mv88f619x_mpp_controls),
40306763c74SThomas Petazzoni 	.modes = mv88f6xxx_mpp_modes,
40406763c74SThomas Petazzoni 	.nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes),
40506763c74SThomas Petazzoni 	.gpioranges = mv88f619x_gpio_ranges,
40606763c74SThomas Petazzoni 	.ngpioranges = ARRAY_SIZE(mv88f619x_gpio_ranges),
40706763c74SThomas Petazzoni };
40806763c74SThomas Petazzoni 
40906763c74SThomas Petazzoni static struct mvebu_pinctrl_soc_info mv88f6192_info = {
41006763c74SThomas Petazzoni 	.variant = VARIANT_MV88F6192,
41106763c74SThomas Petazzoni 	.controls = mv88f619x_mpp_controls,
41206763c74SThomas Petazzoni 	.ncontrols = ARRAY_SIZE(mv88f619x_mpp_controls),
41306763c74SThomas Petazzoni 	.modes = mv88f6xxx_mpp_modes,
41406763c74SThomas Petazzoni 	.nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes),
41506763c74SThomas Petazzoni 	.gpioranges = mv88f619x_gpio_ranges,
41606763c74SThomas Petazzoni 	.ngpioranges = ARRAY_SIZE(mv88f619x_gpio_ranges),
41706763c74SThomas Petazzoni };
41806763c74SThomas Petazzoni 
41906763c74SThomas Petazzoni static struct mvebu_pinctrl_soc_info mv88f6281_info = {
42006763c74SThomas Petazzoni 	.variant = VARIANT_MV88F6281,
42106763c74SThomas Petazzoni 	.controls = mv88f628x_mpp_controls,
42206763c74SThomas Petazzoni 	.ncontrols = ARRAY_SIZE(mv88f628x_mpp_controls),
42306763c74SThomas Petazzoni 	.modes = mv88f6xxx_mpp_modes,
42406763c74SThomas Petazzoni 	.nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes),
42506763c74SThomas Petazzoni 	.gpioranges = mv88f628x_gpio_ranges,
42606763c74SThomas Petazzoni 	.ngpioranges = ARRAY_SIZE(mv88f628x_gpio_ranges),
42706763c74SThomas Petazzoni };
42806763c74SThomas Petazzoni 
42906763c74SThomas Petazzoni static struct mvebu_pinctrl_soc_info mv88f6282_info = {
43006763c74SThomas Petazzoni 	.variant = VARIANT_MV88F6282,
43106763c74SThomas Petazzoni 	.controls = mv88f628x_mpp_controls,
43206763c74SThomas Petazzoni 	.ncontrols = ARRAY_SIZE(mv88f628x_mpp_controls),
43306763c74SThomas Petazzoni 	.modes = mv88f6xxx_mpp_modes,
43406763c74SThomas Petazzoni 	.nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes),
43506763c74SThomas Petazzoni 	.gpioranges = mv88f628x_gpio_ranges,
43606763c74SThomas Petazzoni 	.ngpioranges = ARRAY_SIZE(mv88f628x_gpio_ranges),
43706763c74SThomas Petazzoni };
43806763c74SThomas Petazzoni 
43906763c74SThomas Petazzoni static struct mvebu_pinctrl_soc_info mv98dx4122_info = {
44006763c74SThomas Petazzoni 	.variant = VARIANT_MV98DX4122,
44106763c74SThomas Petazzoni 	.controls = mv88f628x_mpp_controls,
44206763c74SThomas Petazzoni 	.ncontrols = ARRAY_SIZE(mv88f628x_mpp_controls),
4434e5bc99cSValentin Longchamp 	.modes = mv88f6xxx_mpp_modes,
4444e5bc99cSValentin Longchamp 	.nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes),
4454e5bc99cSValentin Longchamp 	.gpioranges = mv88f628x_gpio_ranges,
4464e5bc99cSValentin Longchamp 	.ngpioranges = ARRAY_SIZE(mv88f628x_gpio_ranges),
4474e5bc99cSValentin Longchamp };
4484e5bc99cSValentin Longchamp 
4494e5bc99cSValentin Longchamp static struct mvebu_pinctrl_soc_info mv98dx1135_info = {
4504e5bc99cSValentin Longchamp 	.variant = VARIANT_MV98DX1135,
4514e5bc99cSValentin Longchamp 	.controls = mv88f628x_mpp_controls,
4524e5bc99cSValentin Longchamp 	.ncontrols = ARRAY_SIZE(mv88f628x_mpp_controls),
453eed43e7eSChris Packham 	.modes = mv88f6xxx_mpp_modes,
454eed43e7eSChris Packham 	.nmodes = ARRAY_SIZE(mv88f6xxx_mpp_modes),
455eed43e7eSChris Packham 	.gpioranges = mv88f628x_gpio_ranges,
456eed43e7eSChris Packham 	.ngpioranges = ARRAY_SIZE(mv88f628x_gpio_ranges),
457eed43e7eSChris Packham };
458eed43e7eSChris Packham 
459eed43e7eSChris Packham 
460eed43e7eSChris Packham static const struct of_device_id kirkwood_pinctrl_of_match[] = {
461eed43e7eSChris Packham 	{ .compatible = "marvell,88f6180-pinctrl", .data = &mv88f6180_info },
462eed43e7eSChris Packham 	{ .compatible = "marvell,88f6190-pinctrl", .data = &mv88f6190_info },
463eed43e7eSChris Packham 	{ .compatible = "marvell,88f6192-pinctrl", .data = &mv88f6192_info },
464baa9946eSFabian Frederick 	{ .compatible = "marvell,88f6281-pinctrl", .data = &mv88f6281_info },
46506763c74SThomas Petazzoni 	{ .compatible = "marvell,88f6282-pinctrl", .data = &mv88f6282_info },
46606763c74SThomas Petazzoni 	{ .compatible = "marvell,98dx4122-pinctrl", .data = &mv98dx4122_info },
46706763c74SThomas Petazzoni 	{ .compatible = "marvell,98dx1135-pinctrl", .data = &mv98dx1135_info },
46806763c74SThomas Petazzoni 	{ }
46906763c74SThomas Petazzoni };
4704e5bc99cSValentin Longchamp 
kirkwood_pinctrl_probe(struct platform_device * pdev)471eed43e7eSChris Packham static int kirkwood_pinctrl_probe(struct platform_device *pdev)
47206763c74SThomas Petazzoni {
47306763c74SThomas Petazzoni 	const struct of_device_id *match =
47406763c74SThomas Petazzoni 		of_match_device(kirkwood_pinctrl_of_match, &pdev->dev);
475150632b0SGreg Kroah-Hartman 
47606763c74SThomas Petazzoni 	pdev->dev.platform_data = (void *)match->data;
47706763c74SThomas Petazzoni 
47806763c74SThomas Petazzoni 	return mvebu_pinctrl_simple_mmio_probe(pdev);
479ad9ec4ecSRussell King }
48016fa36beSAndrew Lunn 
4811217b790SSebastian Hesselbarth static struct platform_driver kirkwood_pinctrl_driver = {
482ad9ec4ecSRussell King 	.driver = {
48306763c74SThomas Petazzoni 		.name = "kirkwood-pinctrl",
48406763c74SThomas Petazzoni 		.of_match_table = kirkwood_pinctrl_of_match,
48506763c74SThomas Petazzoni 	},
48606763c74SThomas Petazzoni 	.probe = kirkwood_pinctrl_probe,
48706763c74SThomas Petazzoni };
488f2e9394dSSachin Kamat builtin_platform_driver(kirkwood_pinctrl_driver);
48906763c74SThomas Petazzoni