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