Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / pinctrl / vt8500 / pinctrl-wm8505.c
1 /*
2  * Pinctrl data for Wondermedia WM8505 SoC
3  *
4  * Copyright (c) 2013 Tony Prisk <linux@prisktech.co.nz>
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  */
15
16 #include <linux/io.h>
17 #include <linux/module.h>
18 #include <linux/pinctrl/pinctrl.h>
19 #include <linux/platform_device.h>
20 #include <linux/slab.h>
21
22 #include "pinctrl-wmt.h"
23
24 /*
25  * Describe the register offsets within the GPIO memory space
26  * The dedicated external GPIO's should always be listed in bank 0
27  * so they are exported in the 0..31 range which is what users
28  * expect.
29  *
30  * Do not reorder these banks as it will change the pin numbering
31  */
32 static const struct wmt_pinctrl_bank_registers wm8505_banks[] = {
33         WMT_PINCTRL_BANK(0x64, 0x8C, 0xB4, 0xDC, NO_REG, NO_REG),       /* 0 */
34         WMT_PINCTRL_BANK(0x40, 0x68, 0x90, 0xB8, NO_REG, NO_REG),       /* 1 */
35         WMT_PINCTRL_BANK(0x44, 0x6C, 0x94, 0xBC, NO_REG, NO_REG),       /* 2 */
36         WMT_PINCTRL_BANK(0x48, 0x70, 0x98, 0xC0, NO_REG, NO_REG),       /* 3 */
37         WMT_PINCTRL_BANK(0x4C, 0x74, 0x9C, 0xC4, NO_REG, NO_REG),       /* 4 */
38         WMT_PINCTRL_BANK(0x50, 0x78, 0xA0, 0xC8, NO_REG, NO_REG),       /* 5 */
39         WMT_PINCTRL_BANK(0x54, 0x7C, 0xA4, 0xD0, NO_REG, NO_REG),       /* 6 */
40         WMT_PINCTRL_BANK(0x58, 0x80, 0xA8, 0xD4, NO_REG, NO_REG),       /* 7 */
41         WMT_PINCTRL_BANK(0x5C, 0x84, 0xAC, 0xD8, NO_REG, NO_REG),       /* 8 */
42         WMT_PINCTRL_BANK(0x60, 0x88, 0xB0, 0xDC, NO_REG, NO_REG),       /* 9 */
43         WMT_PINCTRL_BANK(0x500, 0x504, 0x508, 0x50C, NO_REG, NO_REG),   /* 10 */
44 };
45
46 /* Please keep sorted by bank/bit */
47 #define WMT_PIN_EXTGPIO0        WMT_PIN(0, 0)
48 #define WMT_PIN_EXTGPIO1        WMT_PIN(0, 1)
49 #define WMT_PIN_EXTGPIO2        WMT_PIN(0, 2)
50 #define WMT_PIN_EXTGPIO3        WMT_PIN(0, 3)
51 #define WMT_PIN_EXTGPIO4        WMT_PIN(0, 4)
52 #define WMT_PIN_EXTGPIO5        WMT_PIN(0, 5)
53 #define WMT_PIN_EXTGPIO6        WMT_PIN(0, 6)
54 #define WMT_PIN_EXTGPIO7        WMT_PIN(0, 7)
55 #define WMT_PIN_WAKEUP0         WMT_PIN(0, 16)
56 #define WMT_PIN_WAKEUP1         WMT_PIN(0, 17)
57 #define WMT_PIN_WAKEUP2         WMT_PIN(0, 18)
58 #define WMT_PIN_WAKEUP3         WMT_PIN(0, 19)
59 #define WMT_PIN_SUSGPIO0        WMT_PIN(0, 21)
60 #define WMT_PIN_SDDATA0         WMT_PIN(1, 0)
61 #define WMT_PIN_SDDATA1         WMT_PIN(1, 1)
62 #define WMT_PIN_SDDATA2         WMT_PIN(1, 2)
63 #define WMT_PIN_SDDATA3         WMT_PIN(1, 3)
64 #define WMT_PIN_MMCDATA0        WMT_PIN(1, 4)
65 #define WMT_PIN_MMCDATA1        WMT_PIN(1, 5)
66 #define WMT_PIN_MMCDATA2        WMT_PIN(1, 6)
67 #define WMT_PIN_MMCDATA3        WMT_PIN(1, 7)
68 #define WMT_PIN_VDIN0           WMT_PIN(2, 0)
69 #define WMT_PIN_VDIN1           WMT_PIN(2, 1)
70 #define WMT_PIN_VDIN2           WMT_PIN(2, 2)
71 #define WMT_PIN_VDIN3           WMT_PIN(2, 3)
72 #define WMT_PIN_VDIN4           WMT_PIN(2, 4)
73 #define WMT_PIN_VDIN5           WMT_PIN(2, 5)
74 #define WMT_PIN_VDIN6           WMT_PIN(2, 6)
75 #define WMT_PIN_VDIN7           WMT_PIN(2, 7)
76 #define WMT_PIN_VDOUT0          WMT_PIN(2, 8)
77 #define WMT_PIN_VDOUT1          WMT_PIN(2, 9)
78 #define WMT_PIN_VDOUT2          WMT_PIN(2, 10)
79 #define WMT_PIN_VDOUT3          WMT_PIN(2, 11)
80 #define WMT_PIN_VDOUT4          WMT_PIN(2, 12)
81 #define WMT_PIN_VDOUT5          WMT_PIN(2, 13)
82 #define WMT_PIN_VDOUT6          WMT_PIN(2, 14)
83 #define WMT_PIN_VDOUT7          WMT_PIN(2, 15)
84 #define WMT_PIN_VDOUT8          WMT_PIN(2, 16)
85 #define WMT_PIN_VDOUT9          WMT_PIN(2, 17)
86 #define WMT_PIN_VDOUT10         WMT_PIN(2, 18)
87 #define WMT_PIN_VDOUT11         WMT_PIN(2, 19)
88 #define WMT_PIN_VDOUT12         WMT_PIN(2, 20)
89 #define WMT_PIN_VDOUT13         WMT_PIN(2, 21)
90 #define WMT_PIN_VDOUT14         WMT_PIN(2, 22)
91 #define WMT_PIN_VDOUT15         WMT_PIN(2, 23)
92 #define WMT_PIN_VDOUT16         WMT_PIN(2, 24)
93 #define WMT_PIN_VDOUT17         WMT_PIN(2, 25)
94 #define WMT_PIN_VDOUT18         WMT_PIN(2, 26)
95 #define WMT_PIN_VDOUT19         WMT_PIN(2, 27)
96 #define WMT_PIN_VDOUT20         WMT_PIN(2, 28)
97 #define WMT_PIN_VDOUT21         WMT_PIN(2, 29)
98 #define WMT_PIN_VDOUT22         WMT_PIN(2, 30)
99 #define WMT_PIN_VDOUT23         WMT_PIN(2, 31)
100 #define WMT_PIN_VHSYNC          WMT_PIN(3, 0)
101 #define WMT_PIN_VVSYNC          WMT_PIN(3, 1)
102 #define WMT_PIN_VGAHSYNC        WMT_PIN(3, 2)
103 #define WMT_PIN_VGAVSYNC        WMT_PIN(3, 3)
104 #define WMT_PIN_VDHSYNC         WMT_PIN(3, 4)
105 #define WMT_PIN_VDVSYNC         WMT_PIN(3, 5)
106 #define WMT_PIN_NORD0           WMT_PIN(4, 0)
107 #define WMT_PIN_NORD1           WMT_PIN(4, 1)
108 #define WMT_PIN_NORD2           WMT_PIN(4, 2)
109 #define WMT_PIN_NORD3           WMT_PIN(4, 3)
110 #define WMT_PIN_NORD4           WMT_PIN(4, 4)
111 #define WMT_PIN_NORD5           WMT_PIN(4, 5)
112 #define WMT_PIN_NORD6           WMT_PIN(4, 6)
113 #define WMT_PIN_NORD7           WMT_PIN(4, 7)
114 #define WMT_PIN_NORD8           WMT_PIN(4, 8)
115 #define WMT_PIN_NORD9           WMT_PIN(4, 9)
116 #define WMT_PIN_NORD10          WMT_PIN(4, 10)
117 #define WMT_PIN_NORD11          WMT_PIN(4, 11)
118 #define WMT_PIN_NORD12          WMT_PIN(4, 12)
119 #define WMT_PIN_NORD13          WMT_PIN(4, 13)
120 #define WMT_PIN_NORD14          WMT_PIN(4, 14)
121 #define WMT_PIN_NORD15          WMT_PIN(4, 15)
122 #define WMT_PIN_NORA0           WMT_PIN(5, 0)
123 #define WMT_PIN_NORA1           WMT_PIN(5, 1)
124 #define WMT_PIN_NORA2           WMT_PIN(5, 2)
125 #define WMT_PIN_NORA3           WMT_PIN(5, 3)
126 #define WMT_PIN_NORA4           WMT_PIN(5, 4)
127 #define WMT_PIN_NORA5           WMT_PIN(5, 5)
128 #define WMT_PIN_NORA6           WMT_PIN(5, 6)
129 #define WMT_PIN_NORA7           WMT_PIN(5, 7)
130 #define WMT_PIN_NORA8           WMT_PIN(5, 8)
131 #define WMT_PIN_NORA9           WMT_PIN(5, 9)
132 #define WMT_PIN_NORA10          WMT_PIN(5, 10)
133 #define WMT_PIN_NORA11          WMT_PIN(5, 11)
134 #define WMT_PIN_NORA12          WMT_PIN(5, 12)
135 #define WMT_PIN_NORA13          WMT_PIN(5, 13)
136 #define WMT_PIN_NORA14          WMT_PIN(5, 14)
137 #define WMT_PIN_NORA15          WMT_PIN(5, 15)
138 #define WMT_PIN_NORA16          WMT_PIN(5, 16)
139 #define WMT_PIN_NORA17          WMT_PIN(5, 17)
140 #define WMT_PIN_NORA18          WMT_PIN(5, 18)
141 #define WMT_PIN_NORA19          WMT_PIN(5, 19)
142 #define WMT_PIN_NORA20          WMT_PIN(5, 20)
143 #define WMT_PIN_NORA21          WMT_PIN(5, 21)
144 #define WMT_PIN_NORA22          WMT_PIN(5, 22)
145 #define WMT_PIN_NORA23          WMT_PIN(5, 23)
146 #define WMT_PIN_NORA24          WMT_PIN(5, 24)
147 #define WMT_PIN_AC97SDI         WMT_PIN(6, 0)
148 #define WMT_PIN_AC97SYNC        WMT_PIN(6, 1)
149 #define WMT_PIN_AC97SDO         WMT_PIN(6, 2)
150 #define WMT_PIN_AC97BCLK        WMT_PIN(6, 3)
151 #define WMT_PIN_AC97RST         WMT_PIN(6, 4)
152 #define WMT_PIN_SFDO            WMT_PIN(7, 0)
153 #define WMT_PIN_SFCS0           WMT_PIN(7, 1)
154 #define WMT_PIN_SFCS1           WMT_PIN(7, 2)
155 #define WMT_PIN_SFCLK           WMT_PIN(7, 3)
156 #define WMT_PIN_SFDI            WMT_PIN(7, 4)
157 #define WMT_PIN_SPI0CLK         WMT_PIN(8, 0)
158 #define WMT_PIN_SPI0MISO        WMT_PIN(8, 1)
159 #define WMT_PIN_SPI0MOSI        WMT_PIN(8, 2)
160 #define WMT_PIN_SPI0SS          WMT_PIN(8, 3)
161 #define WMT_PIN_SPI1CLK         WMT_PIN(8, 4)
162 #define WMT_PIN_SPI1MISO        WMT_PIN(8, 5)
163 #define WMT_PIN_SPI1MOSI        WMT_PIN(8, 6)
164 #define WMT_PIN_SPI1SS          WMT_PIN(8, 7)
165 #define WMT_PIN_SPI2CLK         WMT_PIN(8, 8)
166 #define WMT_PIN_SPI2MISO        WMT_PIN(8, 9)
167 #define WMT_PIN_SPI2MOSI        WMT_PIN(8, 10)
168 #define WMT_PIN_SPI2SS          WMT_PIN(8, 11)
169 #define WMT_PIN_UART0_RTS       WMT_PIN(9, 0)
170 #define WMT_PIN_UART0_TXD       WMT_PIN(9, 1)
171 #define WMT_PIN_UART0_CTS       WMT_PIN(9, 2)
172 #define WMT_PIN_UART0_RXD       WMT_PIN(9, 3)
173 #define WMT_PIN_UART1_RTS       WMT_PIN(9, 4)
174 #define WMT_PIN_UART1_TXD       WMT_PIN(9, 5)
175 #define WMT_PIN_UART1_CTS       WMT_PIN(9, 6)
176 #define WMT_PIN_UART1_RXD       WMT_PIN(9, 7)
177 #define WMT_PIN_UART2_RTS       WMT_PIN(9, 8)
178 #define WMT_PIN_UART2_TXD       WMT_PIN(9, 9)
179 #define WMT_PIN_UART2_CTS       WMT_PIN(9, 10)
180 #define WMT_PIN_UART2_RXD       WMT_PIN(9, 11)
181 #define WMT_PIN_UART3_RTS       WMT_PIN(9, 12)
182 #define WMT_PIN_UART3_TXD       WMT_PIN(9, 13)
183 #define WMT_PIN_UART3_CTS       WMT_PIN(9, 14)
184 #define WMT_PIN_UART3_RXD       WMT_PIN(9, 15)
185 #define WMT_PIN_I2C0SCL         WMT_PIN(10, 0)
186 #define WMT_PIN_I2C0SDA         WMT_PIN(10, 1)
187 #define WMT_PIN_I2C1SCL         WMT_PIN(10, 2)
188 #define WMT_PIN_I2C1SDA         WMT_PIN(10, 3)
189 #define WMT_PIN_I2C2SCL         WMT_PIN(10, 4)
190 #define WMT_PIN_I2C2SDA         WMT_PIN(10, 5)
191
192 static const struct pinctrl_pin_desc wm8505_pins[] = {
193         PINCTRL_PIN(WMT_PIN_EXTGPIO0, "extgpio0"),
194         PINCTRL_PIN(WMT_PIN_EXTGPIO1, "extgpio1"),
195         PINCTRL_PIN(WMT_PIN_EXTGPIO2, "extgpio2"),
196         PINCTRL_PIN(WMT_PIN_EXTGPIO3, "extgpio3"),
197         PINCTRL_PIN(WMT_PIN_EXTGPIO4, "extgpio4"),
198         PINCTRL_PIN(WMT_PIN_EXTGPIO5, "extgpio5"),
199         PINCTRL_PIN(WMT_PIN_EXTGPIO6, "extgpio6"),
200         PINCTRL_PIN(WMT_PIN_EXTGPIO7, "extgpio7"),
201         PINCTRL_PIN(WMT_PIN_WAKEUP0, "wakeup0"),
202         PINCTRL_PIN(WMT_PIN_WAKEUP1, "wakeup1"),
203         PINCTRL_PIN(WMT_PIN_WAKEUP2, "wakeup2"),
204         PINCTRL_PIN(WMT_PIN_WAKEUP3, "wakeup3"),
205         PINCTRL_PIN(WMT_PIN_SUSGPIO0, "susgpio0"),
206         PINCTRL_PIN(WMT_PIN_SDDATA0, "sd_data0"),
207         PINCTRL_PIN(WMT_PIN_SDDATA1, "sd_data1"),
208         PINCTRL_PIN(WMT_PIN_SDDATA2, "sd_data2"),
209         PINCTRL_PIN(WMT_PIN_SDDATA3, "sd_data3"),
210         PINCTRL_PIN(WMT_PIN_MMCDATA0, "mmc_data0"),
211         PINCTRL_PIN(WMT_PIN_MMCDATA1, "mmc_data1"),
212         PINCTRL_PIN(WMT_PIN_MMCDATA2, "mmc_data2"),
213         PINCTRL_PIN(WMT_PIN_MMCDATA3, "mmc_data3"),
214         PINCTRL_PIN(WMT_PIN_VDIN0, "vdin0"),
215         PINCTRL_PIN(WMT_PIN_VDIN1, "vdin1"),
216         PINCTRL_PIN(WMT_PIN_VDIN2, "vdin2"),
217         PINCTRL_PIN(WMT_PIN_VDIN3, "vdin3"),
218         PINCTRL_PIN(WMT_PIN_VDIN4, "vdin4"),
219         PINCTRL_PIN(WMT_PIN_VDIN5, "vdin5"),
220         PINCTRL_PIN(WMT_PIN_VDIN6, "vdin6"),
221         PINCTRL_PIN(WMT_PIN_VDIN7, "vdin7"),
222         PINCTRL_PIN(WMT_PIN_VDOUT0, "vdout0"),
223         PINCTRL_PIN(WMT_PIN_VDOUT1, "vdout1"),
224         PINCTRL_PIN(WMT_PIN_VDOUT2, "vdout2"),
225         PINCTRL_PIN(WMT_PIN_VDOUT3, "vdout3"),
226         PINCTRL_PIN(WMT_PIN_VDOUT4, "vdout4"),
227         PINCTRL_PIN(WMT_PIN_VDOUT5, "vdout5"),
228         PINCTRL_PIN(WMT_PIN_VDOUT6, "vdout6"),
229         PINCTRL_PIN(WMT_PIN_VDOUT7, "vdout7"),
230         PINCTRL_PIN(WMT_PIN_VDOUT8, "vdout8"),
231         PINCTRL_PIN(WMT_PIN_VDOUT9, "vdout9"),
232         PINCTRL_PIN(WMT_PIN_VDOUT10, "vdout10"),
233         PINCTRL_PIN(WMT_PIN_VDOUT11, "vdout11"),
234         PINCTRL_PIN(WMT_PIN_VDOUT12, "vdout12"),
235         PINCTRL_PIN(WMT_PIN_VDOUT13, "vdout13"),
236         PINCTRL_PIN(WMT_PIN_VDOUT14, "vdout14"),
237         PINCTRL_PIN(WMT_PIN_VDOUT15, "vdout15"),
238         PINCTRL_PIN(WMT_PIN_VDOUT16, "vdout16"),
239         PINCTRL_PIN(WMT_PIN_VDOUT17, "vdout17"),
240         PINCTRL_PIN(WMT_PIN_VDOUT18, "vdout18"),
241         PINCTRL_PIN(WMT_PIN_VDOUT19, "vdout19"),
242         PINCTRL_PIN(WMT_PIN_VDOUT20, "vdout20"),
243         PINCTRL_PIN(WMT_PIN_VDOUT21, "vdout21"),
244         PINCTRL_PIN(WMT_PIN_VDOUT22, "vdout22"),
245         PINCTRL_PIN(WMT_PIN_VDOUT23, "vdout23"),
246         PINCTRL_PIN(WMT_PIN_VHSYNC, "v_hsync"),
247         PINCTRL_PIN(WMT_PIN_VVSYNC, "v_vsync"),
248         PINCTRL_PIN(WMT_PIN_VGAHSYNC, "vga_hsync"),
249         PINCTRL_PIN(WMT_PIN_VGAVSYNC, "vga_vsync"),
250         PINCTRL_PIN(WMT_PIN_VDHSYNC, "vd_hsync"),
251         PINCTRL_PIN(WMT_PIN_VDVSYNC, "vd_vsync"),
252         PINCTRL_PIN(WMT_PIN_NORD0, "nor_d0"),
253         PINCTRL_PIN(WMT_PIN_NORD1, "nor_d1"),
254         PINCTRL_PIN(WMT_PIN_NORD2, "nor_d2"),
255         PINCTRL_PIN(WMT_PIN_NORD3, "nor_d3"),
256         PINCTRL_PIN(WMT_PIN_NORD4, "nor_d4"),
257         PINCTRL_PIN(WMT_PIN_NORD5, "nor_d5"),
258         PINCTRL_PIN(WMT_PIN_NORD6, "nor_d6"),
259         PINCTRL_PIN(WMT_PIN_NORD7, "nor_d7"),
260         PINCTRL_PIN(WMT_PIN_NORD8, "nor_d8"),
261         PINCTRL_PIN(WMT_PIN_NORD9, "nor_d9"),
262         PINCTRL_PIN(WMT_PIN_NORD10, "nor_d10"),
263         PINCTRL_PIN(WMT_PIN_NORD11, "nor_d11"),
264         PINCTRL_PIN(WMT_PIN_NORD12, "nor_d12"),
265         PINCTRL_PIN(WMT_PIN_NORD13, "nor_d13"),
266         PINCTRL_PIN(WMT_PIN_NORD14, "nor_d14"),
267         PINCTRL_PIN(WMT_PIN_NORD15, "nor_d15"),
268         PINCTRL_PIN(WMT_PIN_NORA0, "nor_a0"),
269         PINCTRL_PIN(WMT_PIN_NORA1, "nor_a1"),
270         PINCTRL_PIN(WMT_PIN_NORA2, "nor_a2"),
271         PINCTRL_PIN(WMT_PIN_NORA3, "nor_a3"),
272         PINCTRL_PIN(WMT_PIN_NORA4, "nor_a4"),
273         PINCTRL_PIN(WMT_PIN_NORA5, "nor_a5"),
274         PINCTRL_PIN(WMT_PIN_NORA6, "nor_a6"),
275         PINCTRL_PIN(WMT_PIN_NORA7, "nor_a7"),
276         PINCTRL_PIN(WMT_PIN_NORA8, "nor_a8"),
277         PINCTRL_PIN(WMT_PIN_NORA9, "nor_a9"),
278         PINCTRL_PIN(WMT_PIN_NORA10, "nor_a10"),
279         PINCTRL_PIN(WMT_PIN_NORA11, "nor_a11"),
280         PINCTRL_PIN(WMT_PIN_NORA12, "nor_a12"),
281         PINCTRL_PIN(WMT_PIN_NORA13, "nor_a13"),
282         PINCTRL_PIN(WMT_PIN_NORA14, "nor_a14"),
283         PINCTRL_PIN(WMT_PIN_NORA15, "nor_a15"),
284         PINCTRL_PIN(WMT_PIN_NORA16, "nor_a16"),
285         PINCTRL_PIN(WMT_PIN_NORA17, "nor_a17"),
286         PINCTRL_PIN(WMT_PIN_NORA18, "nor_a18"),
287         PINCTRL_PIN(WMT_PIN_NORA19, "nor_a19"),
288         PINCTRL_PIN(WMT_PIN_NORA20, "nor_a20"),
289         PINCTRL_PIN(WMT_PIN_NORA21, "nor_a21"),
290         PINCTRL_PIN(WMT_PIN_NORA22, "nor_a22"),
291         PINCTRL_PIN(WMT_PIN_NORA23, "nor_a23"),
292         PINCTRL_PIN(WMT_PIN_NORA24, "nor_a24"),
293         PINCTRL_PIN(WMT_PIN_AC97SDI, "ac97_sdi"),
294         PINCTRL_PIN(WMT_PIN_AC97SYNC, "ac97_sync"),
295         PINCTRL_PIN(WMT_PIN_AC97SDO, "ac97_sdo"),
296         PINCTRL_PIN(WMT_PIN_AC97BCLK, "ac97_bclk"),
297         PINCTRL_PIN(WMT_PIN_AC97RST, "ac97_rst"),
298         PINCTRL_PIN(WMT_PIN_SFDO, "sf_do"),
299         PINCTRL_PIN(WMT_PIN_SFCS0, "sf_cs0"),
300         PINCTRL_PIN(WMT_PIN_SFCS1, "sf_cs1"),
301         PINCTRL_PIN(WMT_PIN_SFCLK, "sf_clk"),
302         PINCTRL_PIN(WMT_PIN_SFDI, "sf_di"),
303         PINCTRL_PIN(WMT_PIN_SPI0CLK, "spi0_clk"),
304         PINCTRL_PIN(WMT_PIN_SPI0MISO, "spi0_miso"),
305         PINCTRL_PIN(WMT_PIN_SPI0MOSI, "spi0_mosi"),
306         PINCTRL_PIN(WMT_PIN_SPI0SS, "spi0_ss"),
307         PINCTRL_PIN(WMT_PIN_SPI1CLK, "spi1_clk"),
308         PINCTRL_PIN(WMT_PIN_SPI1MISO, "spi1_miso"),
309         PINCTRL_PIN(WMT_PIN_SPI1MOSI, "spi1_mosi"),
310         PINCTRL_PIN(WMT_PIN_SPI1SS, "spi1_ss"),
311         PINCTRL_PIN(WMT_PIN_SPI2CLK, "spi2_clk"),
312         PINCTRL_PIN(WMT_PIN_SPI2MISO, "spi2_miso"),
313         PINCTRL_PIN(WMT_PIN_SPI2MOSI, "spi2_mosi"),
314         PINCTRL_PIN(WMT_PIN_SPI2SS, "spi2_ss"),
315         PINCTRL_PIN(WMT_PIN_UART0_RTS, "uart0_rts"),
316         PINCTRL_PIN(WMT_PIN_UART0_TXD, "uart0_txd"),
317         PINCTRL_PIN(WMT_PIN_UART0_CTS, "uart0_cts"),
318         PINCTRL_PIN(WMT_PIN_UART0_RXD, "uart0_rxd"),
319         PINCTRL_PIN(WMT_PIN_UART1_RTS, "uart1_rts"),
320         PINCTRL_PIN(WMT_PIN_UART1_TXD, "uart1_txd"),
321         PINCTRL_PIN(WMT_PIN_UART1_CTS, "uart1_cts"),
322         PINCTRL_PIN(WMT_PIN_UART1_RXD, "uart1_rxd"),
323         PINCTRL_PIN(WMT_PIN_UART2_RTS, "uart2_rts"),
324         PINCTRL_PIN(WMT_PIN_UART2_TXD, "uart2_txd"),
325         PINCTRL_PIN(WMT_PIN_UART2_CTS, "uart2_cts"),
326         PINCTRL_PIN(WMT_PIN_UART2_RXD, "uart2_rxd"),
327         PINCTRL_PIN(WMT_PIN_UART3_RTS, "uart3_rts"),
328         PINCTRL_PIN(WMT_PIN_UART3_TXD, "uart3_txd"),
329         PINCTRL_PIN(WMT_PIN_UART3_CTS, "uart3_cts"),
330         PINCTRL_PIN(WMT_PIN_UART3_RXD, "uart3_rxd"),
331         PINCTRL_PIN(WMT_PIN_I2C0SCL, "i2c0_scl"),
332         PINCTRL_PIN(WMT_PIN_I2C0SDA, "i2c0_sda"),
333         PINCTRL_PIN(WMT_PIN_I2C1SCL, "i2c1_scl"),
334         PINCTRL_PIN(WMT_PIN_I2C1SDA, "i2c1_sda"),
335         PINCTRL_PIN(WMT_PIN_I2C2SCL, "i2c2_scl"),
336         PINCTRL_PIN(WMT_PIN_I2C2SDA, "i2c2_sda"),
337 };
338
339 /* Order of these names must match the above list */
340 static const char * const wm8505_groups[] = {
341         "extgpio0",
342         "extgpio1",
343         "extgpio2",
344         "extgpio3",
345         "extgpio4",
346         "extgpio5",
347         "extgpio6",
348         "extgpio7",
349         "wakeup0",
350         "wakeup1",
351         "wakeup2",
352         "wakeup3",
353         "susgpio0",
354         "sd_data0",
355         "sd_data1",
356         "sd_data2",
357         "sd_data3",
358         "mmc_data0",
359         "mmc_data1",
360         "mmc_data2",
361         "mmc_data3",
362         "vdin0",
363         "vdin1",
364         "vdin2",
365         "vdin3",
366         "vdin4",
367         "vdin5",
368         "vdin6",
369         "vdin7",
370         "vdout0",
371         "vdout1",
372         "vdout2",
373         "vdout3",
374         "vdout4",
375         "vdout5",
376         "vdout6",
377         "vdout7",
378         "vdout8",
379         "vdout9",
380         "vdout10",
381         "vdout11",
382         "vdout12",
383         "vdout13",
384         "vdout14",
385         "vdout15",
386         "vdout16",
387         "vdout17",
388         "vdout18",
389         "vdout19",
390         "vdout20",
391         "vdout21",
392         "vdout22",
393         "vdout23",
394         "v_hsync",
395         "v_vsync",
396         "vga_hsync",
397         "vga_vsync",
398         "vd_hsync",
399         "vd_vsync",
400         "nor_d0",
401         "nor_d1",
402         "nor_d2",
403         "nor_d3",
404         "nor_d4",
405         "nor_d5",
406         "nor_d6",
407         "nor_d7",
408         "nor_d8",
409         "nor_d9",
410         "nor_d10",
411         "nor_d11",
412         "nor_d12",
413         "nor_d13",
414         "nor_d14",
415         "nor_d15",
416         "nor_a0",
417         "nor_a1",
418         "nor_a2",
419         "nor_a3",
420         "nor_a4",
421         "nor_a5",
422         "nor_a6",
423         "nor_a7",
424         "nor_a8",
425         "nor_a9",
426         "nor_a10",
427         "nor_a11",
428         "nor_a12",
429         "nor_a13",
430         "nor_a14",
431         "nor_a15",
432         "nor_a16",
433         "nor_a17",
434         "nor_a18",
435         "nor_a19",
436         "nor_a20",
437         "nor_a21",
438         "nor_a22",
439         "nor_a23",
440         "nor_a24",
441         "ac97_sdi",
442         "ac97_sync",
443         "ac97_sdo",
444         "ac97_bclk",
445         "ac97_rst",
446         "sf_do",
447         "sf_cs0",
448         "sf_cs1",
449         "sf_clk",
450         "sf_di",
451         "spi0_clk",
452         "spi0_miso",
453         "spi0_mosi",
454         "spi0_ss",
455         "spi1_clk",
456         "spi1_miso",
457         "spi1_mosi",
458         "spi1_ss",
459         "spi2_clk",
460         "spi2_miso",
461         "spi2_mosi",
462         "spi2_ss",
463         "uart0_rts",
464         "uart0_txd",
465         "uart0_cts",
466         "uart0_rxd",
467         "uart1_rts",
468         "uart1_txd",
469         "uart1_cts",
470         "uart1_rxd",
471         "uart2_rts",
472         "uart2_txd",
473         "uart2_cts",
474         "uart2_rxd",
475         "uart3_rts",
476         "uart3_txd",
477         "uart3_cts",
478         "uart3_rxd",
479         "i2c0_scl",
480         "i2c0_sda",
481         "i2c1_scl",
482         "i2c1_sda",
483         "i2c2_scl",
484         "i2c2_sda",
485 };
486
487 static int wm8505_pinctrl_probe(struct platform_device *pdev)
488 {
489         struct wmt_pinctrl_data *data;
490
491         data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
492         if (!data) {
493                 dev_err(&pdev->dev, "failed to allocate data\n");
494                 return -ENOMEM;
495         }
496
497         data->banks = wm8505_banks;
498         data->nbanks = ARRAY_SIZE(wm8505_banks);
499         data->pins = wm8505_pins;
500         data->npins = ARRAY_SIZE(wm8505_pins);
501         data->groups = wm8505_groups;
502         data->ngroups = ARRAY_SIZE(wm8505_groups);
503
504         return wmt_pinctrl_probe(pdev, data);
505 }
506
507 static int wm8505_pinctrl_remove(struct platform_device *pdev)
508 {
509         return wmt_pinctrl_remove(pdev);
510 }
511
512 static const struct of_device_id wmt_pinctrl_of_match[] = {
513         { .compatible = "wm,wm8505-pinctrl" },
514         { /* sentinel */ },
515 };
516
517 static struct platform_driver wmt_pinctrl_driver = {
518         .probe  = wm8505_pinctrl_probe,
519         .remove = wm8505_pinctrl_remove,
520         .driver = {
521                 .name   = "pinctrl-wm8505",
522                 .of_match_table = wmt_pinctrl_of_match,
523         },
524 };
525
526 module_platform_driver(wmt_pinctrl_driver);
527
528 MODULE_AUTHOR("Tony Prisk <linux@prisktech.co.nz>");
529 MODULE_DESCRIPTION("Wondermedia WM8505 Pincontrol driver");
530 MODULE_LICENSE("GPL v2");
531 MODULE_DEVICE_TABLE(of, wmt_pinctrl_of_match);