xref: /OK3568_Linux_fs/kernel/drivers/pinctrl/mvebu/pinctrl-armada-cp110.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-or-later
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Marvell Armada CP110 pinctrl driver based on mvebu pinctrl core
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (C) 2017 Marvell
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Hanna Hawa <hannah@marvell.com>
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <linux/err.h>
11*4882a593Smuzhiyun #include <linux/init.h>
12*4882a593Smuzhiyun #include <linux/io.h>
13*4882a593Smuzhiyun #include <linux/mfd/syscon.h>
14*4882a593Smuzhiyun #include <linux/of.h>
15*4882a593Smuzhiyun #include <linux/of_device.h>
16*4882a593Smuzhiyun #include <linux/pinctrl/pinctrl.h>
17*4882a593Smuzhiyun #include <linux/platform_device.h>
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #include "pinctrl-mvebu.h"
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /*
22*4882a593Smuzhiyun  * Even if the pin controller is the same the MMP available depend on the SoC
23*4882a593Smuzhiyun  * integration.
24*4882a593Smuzhiyun  *  - In Armada7K (single CP) almost all the MPPs are available (except the
25*4882a593Smuzhiyun  *    MMP 39 to 43)
26*4882a593Smuzhiyun  *  - In Armada8K (dual CP) the MPPs are split into 2 parts, MPPs 0-31 from
27*4882a593Smuzhiyun  *    CPS, and MPPs 32-62 from CPM, the below flags (V_ARMADA_8K_CPM,
28*4882a593Smuzhiyun  *    V_ARMADA_8K_CPS) set which MPP is available to the CPx.
29*4882a593Smuzhiyun  * The x_PLUS enum mean that the MPP available for CPx and for Armada70x0
30*4882a593Smuzhiyun  */
31*4882a593Smuzhiyun enum {
32*4882a593Smuzhiyun 	V_ARMADA_7K = BIT(0),
33*4882a593Smuzhiyun 	V_ARMADA_8K_CPM = BIT(1),
34*4882a593Smuzhiyun 	V_ARMADA_8K_CPS = BIT(2),
35*4882a593Smuzhiyun 	V_CP115_STANDALONE = BIT(3),
36*4882a593Smuzhiyun 	V_ARMADA_7K_8K_CPM = (V_ARMADA_7K | V_ARMADA_8K_CPM),
37*4882a593Smuzhiyun 	V_ARMADA_7K_8K_CPS = (V_ARMADA_7K | V_ARMADA_8K_CPS),
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun static struct mvebu_mpp_mode armada_cp110_mpp_modes[] = {
41*4882a593Smuzhiyun 	MPP_MODE(0,
42*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
43*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ale1"),
44*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"au",		"i2smclk"),
45*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"rxd3"),
46*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"pclk"),
47*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"ptp",		"pulse"),
48*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"mss_i2c",	"sda"),
49*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart0",	"rxd"),
50*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata0",	"present_act"),
51*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"ge",		"mdio")),
52*4882a593Smuzhiyun 	MPP_MODE(1,
53*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
54*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ale0"),
55*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"au",		"i2sdo_spdifo"),
56*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"rxd2"),
57*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"drx"),
58*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"ptp",		"clk"),
59*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"mss_i2c",	"sck"),
60*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart0",	"txd"),
61*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata1",	"present_act"),
62*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"ge",		"mdc")),
63*4882a593Smuzhiyun 	MPP_MODE(2,
64*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
65*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad15"),
66*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"au",		"i2sextclk"),
67*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"rxd1"),
68*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"dtx"),
69*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"mss_uart",	"rxd"),
70*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"ptp",		"pclk_out"),
71*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"i2c1",		"sck"),
72*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart1",	"rxd"),
73*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata0",	"present_act"),
74*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"xg",		"mdc")),
75*4882a593Smuzhiyun 	MPP_MODE(3,
76*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
77*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad14"),
78*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"au",		"i2slrclk"),
79*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"rxd0"),
80*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"fsync"),
81*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"mss_uart",	"txd"),
82*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"pcie",		"rstoutn"),
83*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"i2c1",		"sda"),
84*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart1",	"txd"),
85*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata1",	"present_act"),
86*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"xg",		"mdio")),
87*4882a593Smuzhiyun 	MPP_MODE(4,
88*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
89*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad13"),
90*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"au",		"i2sbclk"),
91*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"rxctl"),
92*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"rstn"),
93*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"mss_uart",	"rxd"),
94*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"uart1",	"cts"),
95*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"pcie0",	"clkreq"),
96*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart3",	"rxd"),
97*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"ge",		"mdc")),
98*4882a593Smuzhiyun 	MPP_MODE(5,
99*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
100*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad12"),
101*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"au",		"i2sdi"),
102*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"rxclk"),
103*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"intn"),
104*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"mss_uart",	"txd"),
105*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"uart1",	"rts"),
106*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"pcie1",	"clkreq"),
107*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart3",	"txd"),
108*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"ge",		"mdio")),
109*4882a593Smuzhiyun 	MPP_MODE(6,
110*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
111*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad11"),
112*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"txd3"),
113*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"spi0",		"csn2"),
114*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sextclk"),
115*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"sata1",	"present_act"),
116*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"pcie2",	"clkreq"),
117*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart0",	"rxd"),
118*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"ptp",		"pulse")),
119*4882a593Smuzhiyun 	MPP_MODE(7,
120*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
121*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad10"),
122*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"txd2"),
123*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"spi0",		"csn1"),
124*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"csn1"),
125*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"sata0",	"present_act"),
126*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"led",		"data"),
127*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart0",	"txd"),
128*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"ptp",		"clk")),
129*4882a593Smuzhiyun 	MPP_MODE(8,
130*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
131*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad9"),
132*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"txd1"),
133*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"spi0",		"csn0"),
134*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"csn0"),
135*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"uart0",	"cts"),
136*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"led",		"stb"),
137*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart2",	"rxd"),
138*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"ptp",		"pclk_out"),
139*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"synce1",	"clk")),
140*4882a593Smuzhiyun 	MPP_MODE(9,
141*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
142*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad8"),
143*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"txd0"),
144*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"spi0",		"mosi"),
145*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"mosi"),
146*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"pcie",		"rstoutn"),
147*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"synce2",	"clk")),
148*4882a593Smuzhiyun 	MPP_MODE(10,
149*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
150*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"readyn"),
151*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"txctl"),
152*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"spi0",		"miso"),
153*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"miso"),
154*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"uart0",	"cts"),
155*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"sata1",	"present_act")),
156*4882a593Smuzhiyun 	MPP_MODE(11,
157*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
158*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"wen1"),
159*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ge0",		"txclkout"),
160*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"spi0",		"clk"),
161*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"clk"),
162*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"uart0",	"rts"),
163*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"led",		"clk"),
164*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart2",	"txd"),
165*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata0",	"present_act")),
166*4882a593Smuzhiyun 	MPP_MODE(12,
167*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
168*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"clk_out"),
169*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"nf",		"rbn1"),
170*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"spi1",		"csn1"),
171*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"rxclk")),
172*4882a593Smuzhiyun 	MPP_MODE(13,
173*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
174*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"burstn"),
175*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"nf",		"rbn0"),
176*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"spi1",		"miso"),
177*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"rxctl"),
178*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"mss_spi",	"miso")),
179*4882a593Smuzhiyun 	MPP_MODE(14,
180*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
181*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"bootcsn"),
182*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"dev",		"csn0"),
183*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"spi1",		"csn0"),
184*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"spi0",		"csn3"),
185*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sextclk"),
186*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"miso"),
187*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"sata0",	"present_act"),
188*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"mss_spi",	"csn")),
189*4882a593Smuzhiyun 	MPP_MODE(15,
190*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
191*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad7"),
192*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"spi1",		"mosi"),
193*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"mosi"),
194*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"mss_spi",	"mosi"),
195*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"ptp",		"pulse_cp2cp")),
196*4882a593Smuzhiyun 	MPP_MODE(16,
197*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
198*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad6"),
199*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"spi1",		"clk"),
200*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"mss_spi",	"clk")),
201*4882a593Smuzhiyun 	MPP_MODE(17,
202*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
203*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad5"),
204*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"txd3")),
205*4882a593Smuzhiyun 	MPP_MODE(18,
206*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
207*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad4"),
208*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"txd2"),
209*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"ptp",		"clk_cp2cp")),
210*4882a593Smuzhiyun 	MPP_MODE(19,
211*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
212*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad3"),
213*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"txd1"),
214*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"wakeup",	"out_cp2cp")),
215*4882a593Smuzhiyun 	MPP_MODE(20,
216*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
217*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad2"),
218*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"txd0")),
219*4882a593Smuzhiyun 	MPP_MODE(21,
220*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
221*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad1"),
222*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"txctl"),
223*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"sei",		"in_cp2cp")),
224*4882a593Smuzhiyun 	MPP_MODE(22,
225*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
226*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"ad0"),
227*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"txclkout"),
228*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"wakeup",	"in_cp2cp")),
229*4882a593Smuzhiyun 	MPP_MODE(23,
230*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
231*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"a1"),
232*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2smclk"),
233*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"link",		"rd_in_cp2cp")),
234*4882a593Smuzhiyun 	MPP_MODE(24,
235*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
236*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"a0"),
237*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2slrclk")),
238*4882a593Smuzhiyun 	MPP_MODE(25,
239*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
240*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"oen"),
241*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sdo_spdifo")),
242*4882a593Smuzhiyun 	MPP_MODE(26,
243*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
244*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"wen0"),
245*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sbclk")),
246*4882a593Smuzhiyun 	MPP_MODE(27,
247*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
248*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"csn0"),
249*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"spi1",		"miso"),
250*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_gpio4",	NULL),
251*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"rxd3"),
252*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi0",		"csn4"),
253*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"ge",		"mdio"),
254*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata0",	"present_act"),
255*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"uart0",	"rts"),
256*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"rei",		"in_cp2cp")),
257*4882a593Smuzhiyun 	MPP_MODE(28,
258*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
259*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"csn1"),
260*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"spi1",		"csn0"),
261*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_gpio5",	NULL),
262*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"rxd2"),
263*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi0",		"csn5"),
264*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"pcie2",	"clkreq"),
265*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"ptp",		"pulse"),
266*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"ge",		"mdc"),
267*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata1",	"present_act"),
268*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"uart0",	"cts"),
269*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"led",		"data")),
270*4882a593Smuzhiyun 	MPP_MODE(29,
271*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
272*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"csn2"),
273*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"spi1",		"mosi"),
274*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_gpio6",	NULL),
275*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"rxd1"),
276*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi0",		"csn6"),
277*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"pcie1",	"clkreq"),
278*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"ptp",		"clk"),
279*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"mss_i2c",	"sda"),
280*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata0",	"present_act"),
281*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"uart0",	"rxd"),
282*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"led",		"stb")),
283*4882a593Smuzhiyun 	MPP_MODE(30,
284*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
285*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"csn3"),
286*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"spi1",		"clk"),
287*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_gpio7",	NULL),
288*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"ge0",		"rxd0"),
289*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi0",		"csn7"),
290*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"pcie0",	"clkreq"),
291*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"ptp",		"pclk_out"),
292*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"mss_i2c",	"sck"),
293*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata1",	"present_act"),
294*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"uart0",	"txd"),
295*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"led",		"clk")),
296*4882a593Smuzhiyun 	MPP_MODE(31,
297*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
298*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"dev",		"a2"),
299*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_gpio4",	NULL),
300*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"pcie",		"rstoutn"),
301*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"ge",		"mdc")),
302*4882a593Smuzhiyun 	MPP_MODE(32,
303*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
304*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"mii",		"col"),
305*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"mii",		"txerr"),
306*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_spi",	"miso"),
307*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"drx"),
308*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sextclk"),
309*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"au",		"i2sdi"),
310*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"ge",		"mdio"),
311*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"sdio",		"v18_en"),
312*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"pcie1",	"clkreq"),
313*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio0",	NULL)),
314*4882a593Smuzhiyun 	MPP_MODE(33,
315*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
316*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"mii",		"txclk"),
317*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"sdio",		"pwr10"),
318*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_spi",	"csn"),
319*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"fsync"),
320*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2smclk"),
321*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"sdio",		"bus_pwr"),
322*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"xg",		"mdio"),
323*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"pcie2",	"clkreq"),
324*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio1",	NULL)),
325*4882a593Smuzhiyun 	MPP_MODE(34,
326*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
327*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"mii",		"rxerr"),
328*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"sdio",		"pwr11"),
329*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_spi",	"mosi"),
330*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"dtx"),
331*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2slrclk"),
332*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"sdio",		"wr_protect"),
333*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"ge",		"mdc"),
334*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"pcie0",	"clkreq"),
335*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio2",	NULL)),
336*4882a593Smuzhiyun 	MPP_MODE(35,
337*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
338*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"sata1",	"present_act"),
339*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"i2c1",		"sda"),
340*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_spi",	"clk"),
341*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"pclk"),
342*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sdo_spdifo"),
343*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"sdio",		"card_detect"),
344*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"xg",		"mdio"),
345*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"ge",		"mdio"),
346*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"pcie",		"rstoutn"),
347*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio3",	NULL)),
348*4882a593Smuzhiyun 	MPP_MODE(36,
349*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
350*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"synce2",	"clk"),
351*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"i2c1",		"sck"),
352*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"clk"),
353*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"synce1",	"clk"),
354*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sbclk"),
355*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"sata0",	"present_act"),
356*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"xg",		"mdc"),
357*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"ge",		"mdc"),
358*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"pcie2",	"clkreq"),
359*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio5",	NULL)),
360*4882a593Smuzhiyun 	MPP_MODE(37,
361*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
362*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"uart2",	"rxd"),
363*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"i2c0",		"sck"),
364*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),
365*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"intn"),
366*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"mss_i2c",	"sck"),
367*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"sata1",	"present_act"),
368*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"ge",		"mdc"),
369*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"xg",		"mdc"),
370*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"pcie1",	"clkreq"),
371*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio6",	NULL),
372*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"link",		"rd_out_cp2cp")),
373*4882a593Smuzhiyun 	MPP_MODE(38,
374*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
375*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"uart2",	"txd"),
376*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"i2c0",		"sda"),
377*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"pulse"),
378*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"rstn"),
379*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"mss_i2c",	"sda"),
380*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"sata0",	"present_act"),
381*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"ge",		"mdio"),
382*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"xg",		"mdio"),
383*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"au",		"i2sextclk"),
384*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio7",	NULL),
385*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"ptp",		"pulse_cp2cp")),
386*4882a593Smuzhiyun 	MPP_MODE(39,
387*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
388*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"sdio",		"wr_protect"),
389*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"au",		"i2sbclk"),
390*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"ptp",		"clk"),
391*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"csn1"),
392*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata1",	"present_act"),
393*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio0",	NULL)),
394*4882a593Smuzhiyun 	MPP_MODE(40,
395*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
396*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"sdio",		"pwr11"),
397*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"synce1",	"clk"),
398*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_i2c",	"sda"),
399*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"au",		"i2sdo_spdifo"),
400*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"ptp",		"pclk_out"),
401*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"clk"),
402*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"txd"),
403*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"ge",		"mdio"),
404*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata0",	"present_act"),
405*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio1",	NULL)),
406*4882a593Smuzhiyun 	MPP_MODE(41,
407*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
408*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"sdio",		"pwr10"),
409*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"sdio",		"bus_pwr"),
410*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"mss_i2c",	"sck"),
411*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"au",		"i2slrclk"),
412*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"ptp",		"pulse"),
413*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"mosi"),
414*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"rxd"),
415*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"ge",		"mdc"),
416*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata1",	"present_act"),
417*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio2",	NULL),
418*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"rei",		"out_cp2cp")),
419*4882a593Smuzhiyun 	MPP_MODE(42,
420*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
421*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"sdio",		"v18_en"),
422*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"sdio",		"wr_protect"),
423*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"synce2",	"clk"),
424*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"au",		"i2smclk"),
425*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"mss_uart",	"txd"),
426*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"miso"),
427*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"cts"),
428*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"xg",		"mdc"),
429*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata0",	"present_act"),
430*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio4",	NULL)),
431*4882a593Smuzhiyun 	MPP_MODE(43,
432*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
433*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"sdio",		"card_detect"),
434*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"synce1",	"clk"),
435*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"au",		"i2sextclk"),
436*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"mss_uart",	"rxd"),
437*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"csn0"),
438*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"rts"),
439*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"xg",		"mdio"),
440*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata1",	"present_act"),
441*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"mss_gpio5",	NULL),
442*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"wakeup",	"out_cp2cp")),
443*4882a593Smuzhiyun 	MPP_MODE(44,
444*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
445*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"txd2"),
446*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart0",	"rts"),
447*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"ptp",		"clk_cp2cp")),
448*4882a593Smuzhiyun 	MPP_MODE(45,
449*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
450*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"txd3"),
451*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart0",	"txd"),
452*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"pcie",		"rstoutn")),
453*4882a593Smuzhiyun 	MPP_MODE(46,
454*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
455*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"txd1"),
456*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"rts")),
457*4882a593Smuzhiyun 	MPP_MODE(47,
458*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
459*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"txd0"),
460*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"clk"),
461*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"txd"),
462*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"ge",		"mdc")),
463*4882a593Smuzhiyun 	MPP_MODE(48,
464*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
465*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"txctl_txen"),
466*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"mosi"),
467*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"xg",		"mdc"),
468*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"wakeup",	"in_cp2cp")),
469*4882a593Smuzhiyun 	MPP_MODE(49,
470*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
471*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"txclkout"),
472*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"mii",		"crs"),
473*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"miso"),
474*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"rxd"),
475*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"ge",		"mdio"),
476*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"pcie0",	"clkreq"),
477*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"sdio",		"v18_en"),
478*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"sei",		"out_cp2cp")),
479*4882a593Smuzhiyun 	MPP_MODE(50,
480*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
481*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"rxclk"),
482*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"mss_i2c",	"sda"),
483*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"csn0"),
484*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"uart2",	"txd"),
485*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart0",	"rxd"),
486*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"xg",		"mdio"),
487*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"sdio",		"pwr11")),
488*4882a593Smuzhiyun 	MPP_MODE(51,
489*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
490*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"rxd0"),
491*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"mss_i2c",	"sck"),
492*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"csn1"),
493*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"uart2",	"rxd"),
494*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart0",	"cts"),
495*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"sdio",		"pwr10")),
496*4882a593Smuzhiyun 	MPP_MODE(52,
497*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
498*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"rxd1"),
499*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"synce1",	"clk"),
500*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"synce2",	"clk"),
501*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"csn2"),
502*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"cts"),
503*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"led",		"clk"),
504*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"pcie",		"rstoutn"),
505*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"pcie0",	"clkreq")),
506*4882a593Smuzhiyun 	MPP_MODE(53,
507*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
508*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"rxd2"),
509*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"clk"),
510*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"spi1",		"csn3"),
511*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"rxd"),
512*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"led",		"stb"),
513*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"sdio",		"led")),
514*4882a593Smuzhiyun 	MPP_MODE(54,
515*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
516*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"rxd3"),
517*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"synce2",	"clk"),
518*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),
519*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"synce1",	"clk"),
520*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"led",		"data"),
521*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"sdio",		"hw_rst"),
522*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"sdio",		"wr_protect")),
523*4882a593Smuzhiyun 	MPP_MODE(55,
524*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
525*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"ge1",		"rxctl_rxdv"),
526*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"pulse"),
527*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"sdio",		"led"),
528*4882a593Smuzhiyun 		 MPP_FUNCTION(11,	"sdio",		"card_detect")),
529*4882a593Smuzhiyun 	MPP_MODE(56,
530*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
531*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"drx"),
532*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sdo_spdifo"),
533*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"clk"),
534*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"rxd"),
535*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata1",	"present_act"),
536*4882a593Smuzhiyun 		 MPP_FUNCTION(14,	"sdio",		"clk")),
537*4882a593Smuzhiyun 	MPP_MODE(57,
538*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
539*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"mss_i2c",	"sda"),
540*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),
541*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"intn"),
542*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sbclk"),
543*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"mosi"),
544*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"txd"),
545*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata0",	"present_act"),
546*4882a593Smuzhiyun 		 MPP_FUNCTION(14,	"sdio",		"cmd")),
547*4882a593Smuzhiyun 	MPP_MODE(58,
548*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
549*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"mss_i2c",	"sck"),
550*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"clk"),
551*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"rstn"),
552*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sdi"),
553*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"miso"),
554*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart1",	"cts"),
555*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"led",		"clk"),
556*4882a593Smuzhiyun 		 MPP_FUNCTION(14,	"sdio",		"d0")),
557*4882a593Smuzhiyun 	MPP_MODE(59,
558*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
559*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"mss_gpio7",	NULL),
560*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"synce2",	"clk"),
561*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"fsync"),
562*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2slrclk"),
563*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"csn0"),
564*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart0",	"cts"),
565*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"led",		"stb"),
566*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"uart1",	"txd"),
567*4882a593Smuzhiyun 		 MPP_FUNCTION(14,	"sdio",		"d1")),
568*4882a593Smuzhiyun 	MPP_MODE(60,
569*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
570*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"mss_gpio6",	NULL),
571*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"pulse"),
572*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"dtx"),
573*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2smclk"),
574*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"csn1"),
575*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart0",	"rts"),
576*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"led",		"data"),
577*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"uart1",	"rxd"),
578*4882a593Smuzhiyun 		 MPP_FUNCTION(14,	"sdio",		"d2")),
579*4882a593Smuzhiyun 	MPP_MODE(61,
580*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
581*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"mss_gpio5",	NULL),
582*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"clk"),
583*4882a593Smuzhiyun 		 MPP_FUNCTION(4,	"tdm",		"pclk"),
584*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"au",		"i2sextclk"),
585*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"csn2"),
586*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart0",	"txd"),
587*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart2",	"txd"),
588*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata1",	"present_act"),
589*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"ge",		"mdio"),
590*4882a593Smuzhiyun 		 MPP_FUNCTION(14,	"sdio",		"d3")),
591*4882a593Smuzhiyun 	MPP_MODE(62,
592*4882a593Smuzhiyun 		 MPP_FUNCTION(0,	"gpio",		NULL),
593*4882a593Smuzhiyun 		 MPP_FUNCTION(1,	"mss_gpio4",	NULL),
594*4882a593Smuzhiyun 		 MPP_FUNCTION(2,	"synce1",	"clk"),
595*4882a593Smuzhiyun 		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),
596*4882a593Smuzhiyun 		 MPP_FUNCTION(5,	"sata1",	"present_act"),
597*4882a593Smuzhiyun 		 MPP_FUNCTION(6,	"spi0",		"csn3"),
598*4882a593Smuzhiyun 		 MPP_FUNCTION(7,	"uart0",	"rxd"),
599*4882a593Smuzhiyun 		 MPP_FUNCTION(8,	"uart2",	"rxd"),
600*4882a593Smuzhiyun 		 MPP_FUNCTION(9,	"sata0",	"present_act"),
601*4882a593Smuzhiyun 		 MPP_FUNCTION(10,	"ge",		"mdc"),
602*4882a593Smuzhiyun 		 MPP_FUNCTION(14,	"sdio",		"ds")),
603*4882a593Smuzhiyun };
604*4882a593Smuzhiyun 
605*4882a593Smuzhiyun static const struct of_device_id armada_cp110_pinctrl_of_match[] = {
606*4882a593Smuzhiyun 	{
607*4882a593Smuzhiyun 		.compatible	= "marvell,armada-7k-pinctrl",
608*4882a593Smuzhiyun 		.data		= (void *) V_ARMADA_7K,
609*4882a593Smuzhiyun 	},
610*4882a593Smuzhiyun 	{
611*4882a593Smuzhiyun 		.compatible	= "marvell,armada-8k-cpm-pinctrl",
612*4882a593Smuzhiyun 		.data		= (void *) V_ARMADA_8K_CPM,
613*4882a593Smuzhiyun 	},
614*4882a593Smuzhiyun 	{
615*4882a593Smuzhiyun 		.compatible	= "marvell,armada-8k-cps-pinctrl",
616*4882a593Smuzhiyun 		.data		= (void *) V_ARMADA_8K_CPS,
617*4882a593Smuzhiyun 	},
618*4882a593Smuzhiyun 	{
619*4882a593Smuzhiyun 		.compatible	= "marvell,cp115-standalone-pinctrl",
620*4882a593Smuzhiyun 		.data		= (void *) V_CP115_STANDALONE,
621*4882a593Smuzhiyun 	},
622*4882a593Smuzhiyun 	{ },
623*4882a593Smuzhiyun };
624*4882a593Smuzhiyun 
625*4882a593Smuzhiyun static const struct mvebu_mpp_ctrl armada_cp110_mpp_controls[] = {
626*4882a593Smuzhiyun 	MPP_FUNC_CTRL(0, 62, NULL, mvebu_regmap_mpp_ctrl),
627*4882a593Smuzhiyun };
628*4882a593Smuzhiyun 
mvebu_pinctrl_assign_variant(struct mvebu_mpp_mode * m,u8 variant)629*4882a593Smuzhiyun static void mvebu_pinctrl_assign_variant(struct mvebu_mpp_mode *m,
630*4882a593Smuzhiyun 					 u8 variant)
631*4882a593Smuzhiyun {
632*4882a593Smuzhiyun 	struct mvebu_mpp_ctrl_setting *s;
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun 	for (s = m->settings ; s->name ; s++)
635*4882a593Smuzhiyun 		s->variant = variant;
636*4882a593Smuzhiyun }
637*4882a593Smuzhiyun 
armada_cp110_pinctrl_probe(struct platform_device * pdev)638*4882a593Smuzhiyun static int armada_cp110_pinctrl_probe(struct platform_device *pdev)
639*4882a593Smuzhiyun {
640*4882a593Smuzhiyun 	struct mvebu_pinctrl_soc_info *soc;
641*4882a593Smuzhiyun 	const struct of_device_id *match =
642*4882a593Smuzhiyun 		of_match_device(armada_cp110_pinctrl_of_match, &pdev->dev);
643*4882a593Smuzhiyun 	int i;
644*4882a593Smuzhiyun 
645*4882a593Smuzhiyun 	if (!pdev->dev.parent)
646*4882a593Smuzhiyun 		return -ENODEV;
647*4882a593Smuzhiyun 
648*4882a593Smuzhiyun 	soc = devm_kzalloc(&pdev->dev,
649*4882a593Smuzhiyun 			   sizeof(struct mvebu_pinctrl_soc_info), GFP_KERNEL);
650*4882a593Smuzhiyun 	if (!soc)
651*4882a593Smuzhiyun 		return -ENOMEM;
652*4882a593Smuzhiyun 
653*4882a593Smuzhiyun 	soc->variant = (unsigned long) match->data & 0xff;
654*4882a593Smuzhiyun 	soc->controls = armada_cp110_mpp_controls;
655*4882a593Smuzhiyun 	soc->ncontrols = ARRAY_SIZE(armada_cp110_mpp_controls);
656*4882a593Smuzhiyun 	soc->modes = armada_cp110_mpp_modes;
657*4882a593Smuzhiyun 	soc->nmodes = ARRAY_SIZE(armada_cp110_mpp_modes);
658*4882a593Smuzhiyun 	for (i = 0; i < ARRAY_SIZE(armada_cp110_mpp_modes); i++) {
659*4882a593Smuzhiyun 		struct mvebu_mpp_mode *m = &armada_cp110_mpp_modes[i];
660*4882a593Smuzhiyun 
661*4882a593Smuzhiyun 		switch (i) {
662*4882a593Smuzhiyun 		case 0 ... 31:
663*4882a593Smuzhiyun 			mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPS |
664*4882a593Smuzhiyun 							 V_CP115_STANDALONE));
665*4882a593Smuzhiyun 			break;
666*4882a593Smuzhiyun 		case 32 ... 38:
667*4882a593Smuzhiyun 			mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM |
668*4882a593Smuzhiyun 							 V_CP115_STANDALONE));
669*4882a593Smuzhiyun 			break;
670*4882a593Smuzhiyun 		case 39 ... 43:
671*4882a593Smuzhiyun 			mvebu_pinctrl_assign_variant(m, (V_ARMADA_8K_CPM |
672*4882a593Smuzhiyun 							 V_CP115_STANDALONE));
673*4882a593Smuzhiyun 			break;
674*4882a593Smuzhiyun 		case 44 ... 62:
675*4882a593Smuzhiyun 			mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM |
676*4882a593Smuzhiyun 							 V_CP115_STANDALONE));
677*4882a593Smuzhiyun 			break;
678*4882a593Smuzhiyun 		}
679*4882a593Smuzhiyun 	}
680*4882a593Smuzhiyun 	pdev->dev.platform_data = soc;
681*4882a593Smuzhiyun 
682*4882a593Smuzhiyun 	return mvebu_pinctrl_simple_regmap_probe(pdev, pdev->dev.parent, 0);
683*4882a593Smuzhiyun }
684*4882a593Smuzhiyun 
685*4882a593Smuzhiyun static struct platform_driver armada_cp110_pinctrl_driver = {
686*4882a593Smuzhiyun 	.driver = {
687*4882a593Smuzhiyun 		.name = "armada-cp110-pinctrl",
688*4882a593Smuzhiyun 		.of_match_table = of_match_ptr(armada_cp110_pinctrl_of_match),
689*4882a593Smuzhiyun 	},
690*4882a593Smuzhiyun 	.probe = armada_cp110_pinctrl_probe,
691*4882a593Smuzhiyun };
692*4882a593Smuzhiyun 
693*4882a593Smuzhiyun builtin_platform_driver(armada_cp110_pinctrl_driver);
694