brcmsmac: rework of mac80211 .flush() callback operation
[pandora-kernel.git] / drivers / pinctrl / pinctrl-mmp2.c
1 /*
2  *  linux/drivers/pinctrl/pinmux-mmp2.c
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License version 2 as
6  *  publishhed by the Free Software Foundation.
7  *
8  *  Copyright (C) 2011, Marvell Technology Group Ltd.
9  *
10  *  Author: Haojian Zhuang <haojian.zhuang@marvell.com>
11  *
12  */
13
14 #include <linux/device.h>
15 #include <linux/module.h>
16 #include <linux/io.h>
17 #include <linux/platform_device.h>
18 #include "pinctrl-pxa3xx.h"
19
20 #define MMP2_DS_MASK            0x1800
21 #define MMP2_DS_SHIFT           11
22 #define MMP2_SLEEP_MASK         0x38
23 #define MMP2_SLEEP_SELECT       (1 << 9)
24 #define MMP2_SLEEP_DATA         (1 << 8)
25 #define MMP2_SLEEP_DIR          (1 << 7)
26
27 #define MFPR_MMP2(a, r, f0, f1, f2, f3, f4, f5, f6, f7)         \
28         {                                                       \
29                 .name = #a,                                     \
30                 .pin = a,                                       \
31                 .mfpr = r,                                      \
32                 .func = {                                       \
33                         MMP2_MUX_##f0,                          \
34                         MMP2_MUX_##f1,                          \
35                         MMP2_MUX_##f2,                          \
36                         MMP2_MUX_##f3,                          \
37                         MMP2_MUX_##f4,                          \
38                         MMP2_MUX_##f5,                          \
39                         MMP2_MUX_##f6,                          \
40                         MMP2_MUX_##f7,                          \
41                 },                                              \
42         }
43
44 #define GRP_MMP2(a, m, p)               \
45         { .name = a, .mux = MMP2_MUX_##m, .pins = p, .npins = ARRAY_SIZE(p), }
46
47 /* 174 pins */
48 enum mmp2_pin_list {
49         /* 0~168: GPIO0~GPIO168 */
50         TWSI4_SCL = 169,
51         TWSI4_SDA, /* 170 */
52         G_CLKREQ,
53         VCXO_REQ,
54         VCXO_OUT,
55 };
56
57 enum mmp2_mux {
58         /* PXA3xx_MUX_GPIO = 0 (predefined in pinctrl-pxa3xx.h) */
59         MMP2_MUX_GPIO = 0,
60         MMP2_MUX_G_CLKREQ,
61         MMP2_MUX_VCXO_REQ,
62         MMP2_MUX_VCXO_OUT,
63         MMP2_MUX_KP_MK,
64         MMP2_MUX_KP_DK,
65         MMP2_MUX_CCIC1,
66         MMP2_MUX_CCIC2,
67         MMP2_MUX_SPI,
68         MMP2_MUX_SSPA2,
69         MMP2_MUX_ROT,
70         MMP2_MUX_I2S,
71         MMP2_MUX_TB,
72         MMP2_MUX_CAM2,
73         MMP2_MUX_HDMI,
74         MMP2_MUX_TWSI2,
75         MMP2_MUX_TWSI3,
76         MMP2_MUX_TWSI4,
77         MMP2_MUX_TWSI5,
78         MMP2_MUX_TWSI6,
79         MMP2_MUX_UART1,
80         MMP2_MUX_UART2,
81         MMP2_MUX_UART3,
82         MMP2_MUX_UART4,
83         MMP2_MUX_SSP1_RX,
84         MMP2_MUX_SSP1_FRM,
85         MMP2_MUX_SSP1_TXRX,
86         MMP2_MUX_SSP2_RX,
87         MMP2_MUX_SSP2_FRM,
88         MMP2_MUX_SSP1,
89         MMP2_MUX_SSP2,
90         MMP2_MUX_SSP3,
91         MMP2_MUX_SSP4,
92         MMP2_MUX_MMC1,
93         MMP2_MUX_MMC2,
94         MMP2_MUX_MMC3,
95         MMP2_MUX_MMC4,
96         MMP2_MUX_ULPI,
97         MMP2_MUX_AC,
98         MMP2_MUX_CA,
99         MMP2_MUX_PWM,
100         MMP2_MUX_USIM,
101         MMP2_MUX_TIPU,
102         MMP2_MUX_PLL,
103         MMP2_MUX_NAND,
104         MMP2_MUX_FSIC,
105         MMP2_MUX_SLEEP_IND,
106         MMP2_MUX_EXT_DMA,
107         MMP2_MUX_ONE_WIRE,
108         MMP2_MUX_LCD,
109         MMP2_MUX_SMC,
110         MMP2_MUX_SMC_INT,
111         MMP2_MUX_MSP,
112         MMP2_MUX_G_CLKOUT,
113         MMP2_MUX_32K_CLKOUT,
114         MMP2_MUX_PRI_JTAG,
115         MMP2_MUX_AAS_JTAG,
116         MMP2_MUX_AAS_GPIO,
117         MMP2_MUX_AAS_SPI,
118         MMP2_MUX_AAS_TWSI,
119         MMP2_MUX_AAS_DEU_EX,
120         MMP2_MUX_NONE = 0xffff,
121 };
122
123 static struct pinctrl_pin_desc mmp2_pads[] = {
124         /*
125          * The name indicates function 0 of this pin.
126          * After reset, function 0 is the default function of pin.
127          */
128         PINCTRL_PIN(GPIO0, "GPIO0"),
129         PINCTRL_PIN(GPIO1, "GPIO1"),
130         PINCTRL_PIN(GPIO2, "GPIO2"),
131         PINCTRL_PIN(GPIO3, "GPIO3"),
132         PINCTRL_PIN(GPIO4, "GPIO4"),
133         PINCTRL_PIN(GPIO5, "GPIO5"),
134         PINCTRL_PIN(GPIO6, "GPIO6"),
135         PINCTRL_PIN(GPIO7, "GPIO7"),
136         PINCTRL_PIN(GPIO8, "GPIO8"),
137         PINCTRL_PIN(GPIO9, "GPIO9"),
138         PINCTRL_PIN(GPIO10, "GPIO10"),
139         PINCTRL_PIN(GPIO11, "GPIO11"),
140         PINCTRL_PIN(GPIO12, "GPIO12"),
141         PINCTRL_PIN(GPIO13, "GPIO13"),
142         PINCTRL_PIN(GPIO14, "GPIO14"),
143         PINCTRL_PIN(GPIO15, "GPIO15"),
144         PINCTRL_PIN(GPIO16, "GPIO16"),
145         PINCTRL_PIN(GPIO17, "GPIO17"),
146         PINCTRL_PIN(GPIO18, "GPIO18"),
147         PINCTRL_PIN(GPIO19, "GPIO19"),
148         PINCTRL_PIN(GPIO20, "GPIO20"),
149         PINCTRL_PIN(GPIO21, "GPIO21"),
150         PINCTRL_PIN(GPIO22, "GPIO22"),
151         PINCTRL_PIN(GPIO23, "GPIO23"),
152         PINCTRL_PIN(GPIO24, "GPIO24"),
153         PINCTRL_PIN(GPIO25, "GPIO25"),
154         PINCTRL_PIN(GPIO26, "GPIO26"),
155         PINCTRL_PIN(GPIO27, "GPIO27"),
156         PINCTRL_PIN(GPIO28, "GPIO28"),
157         PINCTRL_PIN(GPIO29, "GPIO29"),
158         PINCTRL_PIN(GPIO30, "GPIO30"),
159         PINCTRL_PIN(GPIO31, "GPIO31"),
160         PINCTRL_PIN(GPIO32, "GPIO32"),
161         PINCTRL_PIN(GPIO33, "GPIO33"),
162         PINCTRL_PIN(GPIO34, "GPIO34"),
163         PINCTRL_PIN(GPIO35, "GPIO35"),
164         PINCTRL_PIN(GPIO36, "GPIO36"),
165         PINCTRL_PIN(GPIO37, "GPIO37"),
166         PINCTRL_PIN(GPIO38, "GPIO38"),
167         PINCTRL_PIN(GPIO39, "GPIO39"),
168         PINCTRL_PIN(GPIO40, "GPIO40"),
169         PINCTRL_PIN(GPIO41, "GPIO41"),
170         PINCTRL_PIN(GPIO42, "GPIO42"),
171         PINCTRL_PIN(GPIO43, "GPIO43"),
172         PINCTRL_PIN(GPIO44, "GPIO44"),
173         PINCTRL_PIN(GPIO45, "GPIO45"),
174         PINCTRL_PIN(GPIO46, "GPIO46"),
175         PINCTRL_PIN(GPIO47, "GPIO47"),
176         PINCTRL_PIN(GPIO48, "GPIO48"),
177         PINCTRL_PIN(GPIO49, "GPIO49"),
178         PINCTRL_PIN(GPIO50, "GPIO50"),
179         PINCTRL_PIN(GPIO51, "GPIO51"),
180         PINCTRL_PIN(GPIO52, "GPIO52"),
181         PINCTRL_PIN(GPIO53, "GPIO53"),
182         PINCTRL_PIN(GPIO54, "GPIO54"),
183         PINCTRL_PIN(GPIO55, "GPIO55"),
184         PINCTRL_PIN(GPIO56, "GPIO56"),
185         PINCTRL_PIN(GPIO57, "GPIO57"),
186         PINCTRL_PIN(GPIO58, "GPIO58"),
187         PINCTRL_PIN(GPIO59, "GPIO59"),
188         PINCTRL_PIN(GPIO60, "GPIO60"),
189         PINCTRL_PIN(GPIO61, "GPIO61"),
190         PINCTRL_PIN(GPIO62, "GPIO62"),
191         PINCTRL_PIN(GPIO63, "GPIO63"),
192         PINCTRL_PIN(GPIO64, "GPIO64"),
193         PINCTRL_PIN(GPIO65, "GPIO65"),
194         PINCTRL_PIN(GPIO66, "GPIO66"),
195         PINCTRL_PIN(GPIO67, "GPIO67"),
196         PINCTRL_PIN(GPIO68, "GPIO68"),
197         PINCTRL_PIN(GPIO69, "GPIO69"),
198         PINCTRL_PIN(GPIO70, "GPIO70"),
199         PINCTRL_PIN(GPIO71, "GPIO71"),
200         PINCTRL_PIN(GPIO72, "GPIO72"),
201         PINCTRL_PIN(GPIO73, "GPIO73"),
202         PINCTRL_PIN(GPIO74, "GPIO74"),
203         PINCTRL_PIN(GPIO75, "GPIO75"),
204         PINCTRL_PIN(GPIO76, "GPIO76"),
205         PINCTRL_PIN(GPIO77, "GPIO77"),
206         PINCTRL_PIN(GPIO78, "GPIO78"),
207         PINCTRL_PIN(GPIO79, "GPIO79"),
208         PINCTRL_PIN(GPIO80, "GPIO80"),
209         PINCTRL_PIN(GPIO81, "GPIO81"),
210         PINCTRL_PIN(GPIO82, "GPIO82"),
211         PINCTRL_PIN(GPIO83, "GPIO83"),
212         PINCTRL_PIN(GPIO84, "GPIO84"),
213         PINCTRL_PIN(GPIO85, "GPIO85"),
214         PINCTRL_PIN(GPIO86, "GPIO86"),
215         PINCTRL_PIN(GPIO87, "GPIO87"),
216         PINCTRL_PIN(GPIO88, "GPIO88"),
217         PINCTRL_PIN(GPIO89, "GPIO89"),
218         PINCTRL_PIN(GPIO90, "GPIO90"),
219         PINCTRL_PIN(GPIO91, "GPIO91"),
220         PINCTRL_PIN(GPIO92, "GPIO92"),
221         PINCTRL_PIN(GPIO93, "GPIO93"),
222         PINCTRL_PIN(GPIO94, "GPIO94"),
223         PINCTRL_PIN(GPIO95, "GPIO95"),
224         PINCTRL_PIN(GPIO96, "GPIO96"),
225         PINCTRL_PIN(GPIO97, "GPIO97"),
226         PINCTRL_PIN(GPIO98, "GPIO98"),
227         PINCTRL_PIN(GPIO99, "GPIO99"),
228         PINCTRL_PIN(GPIO100, "GPIO100"),
229         PINCTRL_PIN(GPIO101, "GPIO101"),
230         PINCTRL_PIN(GPIO102, "GPIO102"),
231         PINCTRL_PIN(GPIO103, "GPIO103"),
232         PINCTRL_PIN(GPIO104, "GPIO104"),
233         PINCTRL_PIN(GPIO105, "GPIO105"),
234         PINCTRL_PIN(GPIO106, "GPIO106"),
235         PINCTRL_PIN(GPIO107, "GPIO107"),
236         PINCTRL_PIN(GPIO108, "GPIO108"),
237         PINCTRL_PIN(GPIO109, "GPIO109"),
238         PINCTRL_PIN(GPIO110, "GPIO110"),
239         PINCTRL_PIN(GPIO111, "GPIO111"),
240         PINCTRL_PIN(GPIO112, "GPIO112"),
241         PINCTRL_PIN(GPIO113, "GPIO113"),
242         PINCTRL_PIN(GPIO114, "GPIO114"),
243         PINCTRL_PIN(GPIO115, "GPIO115"),
244         PINCTRL_PIN(GPIO116, "GPIO116"),
245         PINCTRL_PIN(GPIO117, "GPIO117"),
246         PINCTRL_PIN(GPIO118, "GPIO118"),
247         PINCTRL_PIN(GPIO119, "GPIO119"),
248         PINCTRL_PIN(GPIO120, "GPIO120"),
249         PINCTRL_PIN(GPIO121, "GPIO121"),
250         PINCTRL_PIN(GPIO122, "GPIO122"),
251         PINCTRL_PIN(GPIO123, "GPIO123"),
252         PINCTRL_PIN(GPIO124, "GPIO124"),
253         PINCTRL_PIN(GPIO125, "GPIO125"),
254         PINCTRL_PIN(GPIO126, "GPIO126"),
255         PINCTRL_PIN(GPIO127, "GPIO127"),
256         PINCTRL_PIN(GPIO128, "GPIO128"),
257         PINCTRL_PIN(GPIO129, "GPIO129"),
258         PINCTRL_PIN(GPIO130, "GPIO130"),
259         PINCTRL_PIN(GPIO131, "GPIO131"),
260         PINCTRL_PIN(GPIO132, "GPIO132"),
261         PINCTRL_PIN(GPIO133, "GPIO133"),
262         PINCTRL_PIN(GPIO134, "GPIO134"),
263         PINCTRL_PIN(GPIO135, "GPIO135"),
264         PINCTRL_PIN(GPIO136, "GPIO136"),
265         PINCTRL_PIN(GPIO137, "GPIO137"),
266         PINCTRL_PIN(GPIO138, "GPIO138"),
267         PINCTRL_PIN(GPIO139, "GPIO139"),
268         PINCTRL_PIN(GPIO140, "GPIO140"),
269         PINCTRL_PIN(GPIO141, "GPIO141"),
270         PINCTRL_PIN(GPIO142, "GPIO142"),
271         PINCTRL_PIN(GPIO143, "GPIO143"),
272         PINCTRL_PIN(GPIO144, "GPIO144"),
273         PINCTRL_PIN(GPIO145, "GPIO145"),
274         PINCTRL_PIN(GPIO146, "GPIO146"),
275         PINCTRL_PIN(GPIO147, "GPIO147"),
276         PINCTRL_PIN(GPIO148, "GPIO148"),
277         PINCTRL_PIN(GPIO149, "GPIO149"),
278         PINCTRL_PIN(GPIO150, "GPIO150"),
279         PINCTRL_PIN(GPIO151, "GPIO151"),
280         PINCTRL_PIN(GPIO152, "GPIO152"),
281         PINCTRL_PIN(GPIO153, "GPIO153"),
282         PINCTRL_PIN(GPIO154, "GPIO154"),
283         PINCTRL_PIN(GPIO155, "GPIO155"),
284         PINCTRL_PIN(GPIO156, "GPIO156"),
285         PINCTRL_PIN(GPIO157, "GPIO157"),
286         PINCTRL_PIN(GPIO158, "GPIO158"),
287         PINCTRL_PIN(GPIO159, "GPIO159"),
288         PINCTRL_PIN(GPIO160, "GPIO160"),
289         PINCTRL_PIN(GPIO161, "GPIO161"),
290         PINCTRL_PIN(GPIO162, "GPIO162"),
291         PINCTRL_PIN(GPIO163, "GPIO163"),
292         PINCTRL_PIN(GPIO164, "GPIO164"),
293         PINCTRL_PIN(GPIO165, "GPIO165"),
294         PINCTRL_PIN(GPIO166, "GPIO166"),
295         PINCTRL_PIN(GPIO167, "GPIO167"),
296         PINCTRL_PIN(GPIO168, "GPIO168"),
297         PINCTRL_PIN(TWSI4_SCL, "TWSI4_SCL"),
298         PINCTRL_PIN(TWSI4_SDA, "TWSI4_SDA"),
299         PINCTRL_PIN(G_CLKREQ, "G_CLKREQ"),
300         PINCTRL_PIN(VCXO_REQ, "VCXO_REQ"),
301         PINCTRL_PIN(VCXO_OUT, "VCXO_OUT"),
302 };
303
304 struct pxa3xx_mfp_pin mmp2_mfp[] = {
305         /*       pin         offs   f0        f1          f2          f3          f4          f5        f6        f7  */
306         MFPR_MMP2(GPIO0,     0x054, GPIO,     KP_MK,      NONE,       SPI,        NONE,       NONE,     NONE,     NONE),
307         MFPR_MMP2(GPIO1,     0x058, GPIO,     KP_MK,      NONE,       SPI,        NONE,       NONE,     NONE,     NONE),
308         MFPR_MMP2(GPIO2,     0x05C, GPIO,     KP_MK,      NONE,       SPI,        NONE,       NONE,     NONE,     NONE),
309         MFPR_MMP2(GPIO3,     0x060, GPIO,     KP_MK,      NONE,       SPI,        NONE,       NONE,     NONE,     NONE),
310         MFPR_MMP2(GPIO4,     0x064, GPIO,     KP_MK,      NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
311         MFPR_MMP2(GPIO5,     0x068, GPIO,     KP_MK,      NONE,       SPI,        NONE,       NONE,     NONE,     NONE),
312         MFPR_MMP2(GPIO6,     0x06C, GPIO,     KP_MK,      NONE,       SPI,        NONE,       NONE,     NONE,     NONE),
313         MFPR_MMP2(GPIO7,     0x070, GPIO,     KP_MK,      NONE,       SPI,        NONE,       NONE,     NONE,     NONE),
314         MFPR_MMP2(GPIO8,     0x074, GPIO,     KP_MK,      NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
315         MFPR_MMP2(GPIO9,     0x078, GPIO,     KP_MK,      NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
316         MFPR_MMP2(GPIO10,    0x07C, GPIO,     KP_MK,      NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
317         MFPR_MMP2(GPIO11,    0x080, GPIO,     KP_MK,      NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
318         MFPR_MMP2(GPIO12,    0x084, GPIO,     KP_MK,      NONE,       CCIC1,      NONE,       NONE,     NONE,     NONE),
319         MFPR_MMP2(GPIO13,    0x088, GPIO,     KP_MK,      NONE,       CCIC1,      NONE,       NONE,     NONE,     NONE),
320         MFPR_MMP2(GPIO14,    0x08C, GPIO,     KP_MK,      NONE,       CCIC1,      NONE,       NONE,     NONE,     NONE),
321         MFPR_MMP2(GPIO15,    0x090, GPIO,     KP_MK,      KP_DK,      CCIC1,      NONE,       NONE,     NONE,     NONE),
322         MFPR_MMP2(GPIO16,    0x094, GPIO,     KP_DK,      ROT,        CCIC1,      NONE,       NONE,     NONE,     NONE),
323         MFPR_MMP2(GPIO17,    0x098, GPIO,     KP_DK,      ROT,        CCIC1,      NONE,       NONE,     NONE,     NONE),
324         MFPR_MMP2(GPIO18,    0x09C, GPIO,     KP_DK,      ROT,        CCIC1,      NONE,       NONE,     NONE,     NONE),
325         MFPR_MMP2(GPIO19,    0x0A0, GPIO,     KP_DK,      ROT,        CCIC1,      NONE,       NONE,     NONE,     NONE),
326         MFPR_MMP2(GPIO20,    0x0A4, GPIO,     KP_DK,      TB,         CCIC1,      NONE,       NONE,     NONE,     NONE),
327         MFPR_MMP2(GPIO21,    0x0A8, GPIO,     KP_DK,      TB,         CCIC1,      NONE,       NONE,     NONE,     NONE),
328         MFPR_MMP2(GPIO22,    0x0AC, GPIO,     KP_DK,      TB,         CCIC1,      NONE,       NONE,     NONE,     NONE),
329         MFPR_MMP2(GPIO23,    0x0B0, GPIO,     KP_DK,      TB,         CCIC1,      NONE,       NONE,     NONE,     NONE),
330         MFPR_MMP2(GPIO24,    0x0B4, GPIO,     I2S,        VCXO_OUT,   NONE,       NONE,       NONE,     NONE,     NONE),
331         MFPR_MMP2(GPIO25,    0x0B8, GPIO,     I2S,        HDMI,       SSPA2,      NONE,       NONE,     NONE,     NONE),
332         MFPR_MMP2(GPIO26,    0x0BC, GPIO,     I2S,        HDMI,       SSPA2,      NONE,       NONE,     NONE,     NONE),
333         MFPR_MMP2(GPIO27,    0x0C0, GPIO,     I2S,        HDMI,       SSPA2,      NONE,       NONE,     NONE,     NONE),
334         MFPR_MMP2(GPIO28,    0x0C4, GPIO,     I2S,        NONE,       SSPA2,      NONE,       NONE,     NONE,     NONE),
335         MFPR_MMP2(GPIO29,    0x0C8, GPIO,     UART1,      KP_MK,      NONE,       NONE,       NONE,     AAS_SPI,  NONE),
336         MFPR_MMP2(GPIO30,    0x0CC, GPIO,     UART1,      KP_MK,      NONE,       NONE,       NONE,     AAS_SPI,  NONE),
337         MFPR_MMP2(GPIO31,    0x0D0, GPIO,     UART1,      KP_MK,      NONE,       NONE,       NONE,     AAS_SPI,  NONE),
338         MFPR_MMP2(GPIO32,    0x0D4, GPIO,     UART1,      KP_MK,      NONE,       NONE,       NONE,     AAS_SPI,  NONE),
339         MFPR_MMP2(GPIO33,    0x0D8, GPIO,     SSPA2,      I2S,        NONE,       NONE,       NONE,     NONE,     NONE),
340         MFPR_MMP2(GPIO34,    0x0DC, GPIO,     SSPA2,      I2S,        NONE,       NONE,       NONE,     NONE,     NONE),
341         MFPR_MMP2(GPIO35,    0x0E0, GPIO,     SSPA2,      I2S,        NONE,       NONE,       NONE,     NONE,     NONE),
342         MFPR_MMP2(GPIO36,    0x0E4, GPIO,     SSPA2,      I2S,        NONE,       NONE,       NONE,     NONE,     NONE),
343         MFPR_MMP2(GPIO37,    0x0E8, GPIO,     MMC2,       SSP1,       TWSI2,      UART2,      UART3,    AAS_SPI,  AAS_TWSI),
344         MFPR_MMP2(GPIO38,    0x0EC, GPIO,     MMC2,       SSP1,       TWSI2,      UART2,      UART3,    AAS_SPI,  AAS_TWSI),
345         MFPR_MMP2(GPIO39,    0x0F0, GPIO,     MMC2,       SSP1,       TWSI2,      UART2,      UART3,    AAS_SPI,  AAS_TWSI),
346         MFPR_MMP2(GPIO40,    0x0F4, GPIO,     MMC2,       SSP1,       TWSI2,      UART2,      UART3,    AAS_SPI,  AAS_TWSI),
347         MFPR_MMP2(GPIO41,    0x0F8, GPIO,     MMC2,       TWSI5,      NONE,       NONE,       NONE,     NONE,     NONE),
348         MFPR_MMP2(GPIO42,    0x0FC, GPIO,     MMC2,       TWSI5,      NONE,       NONE,       NONE,     NONE,     NONE),
349         MFPR_MMP2(GPIO43,    0x100, GPIO,     TWSI2,      UART4,      SSP1,       UART2,      UART3,    NONE,     AAS_TWSI),
350         MFPR_MMP2(GPIO44,    0x104, GPIO,     TWSI2,      UART4,      SSP1,       UART2,      UART3,    NONE,     AAS_TWSI),
351         MFPR_MMP2(GPIO45,    0x108, GPIO,     UART1,      UART4,      SSP1,       UART2,      UART3,    NONE,     NONE),
352         MFPR_MMP2(GPIO46,    0x10C, GPIO,     UART1,      UART4,      SSP1,       UART2,      UART3,    NONE,     NONE),
353         MFPR_MMP2(GPIO47,    0x110, GPIO,     UART2,      SSP2,       TWSI6,      CAM2,       AAS_SPI,  AAS_GPIO, NONE),
354         MFPR_MMP2(GPIO48,    0x114, GPIO,     UART2,      SSP2,       TWSI6,      CAM2,       AAS_SPI,  AAS_GPIO, NONE),
355         MFPR_MMP2(GPIO49,    0x118, GPIO,     UART2,      SSP2,       PWM,        CCIC2,      AAS_SPI,  NONE,     NONE),
356         MFPR_MMP2(GPIO50,    0x11C, GPIO,     UART2,      SSP2,       PWM,        CCIC2,      AAS_SPI,  NONE,     NONE),
357         MFPR_MMP2(GPIO51,    0x120, GPIO,     UART3,      ROT,        AAS_GPIO,   PWM,        NONE,     NONE,     NONE),
358         MFPR_MMP2(GPIO52,    0x124, GPIO,     UART3,      ROT,        AAS_GPIO,   PWM,        NONE,     NONE,     NONE),
359         MFPR_MMP2(GPIO53,    0x128, GPIO,     UART3,      TWSI2,      VCXO_REQ,   NONE,       PWM,      NONE,     AAS_TWSI),
360         MFPR_MMP2(GPIO54,    0x12C, GPIO,     UART3,      TWSI2,      VCXO_OUT,   HDMI,       PWM,      NONE,     AAS_TWSI),
361         MFPR_MMP2(GPIO55,    0x130, GPIO,     SSP2,       SSP1,       UART2,      ROT,        TWSI2,    SSP3,     AAS_TWSI),
362         MFPR_MMP2(GPIO56,    0x134, GPIO,     SSP2,       SSP1,       UART2,      ROT,        TWSI2,    KP_DK,    AAS_TWSI),
363         MFPR_MMP2(GPIO57,    0x138, GPIO,     SSP2_RX,    SSP1_TXRX,  SSP2_FRM,   SSP1_RX,    VCXO_REQ, KP_DK,    NONE),
364         MFPR_MMP2(GPIO58,    0x13C, GPIO,     SSP2,       SSP1_RX,    SSP1_FRM,   SSP1_TXRX,  VCXO_REQ, KP_DK,    NONE),
365         MFPR_MMP2(GPIO59,    0x280, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      UART3,    UART4,    NONE),
366         MFPR_MMP2(GPIO60,    0x284, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      UART3,    UART4,    NONE),
367         MFPR_MMP2(GPIO61,    0x288, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      UART3,    HDMI,     NONE),
368         MFPR_MMP2(GPIO62,    0x28C, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      UART3,    NONE,     NONE),
369         MFPR_MMP2(GPIO63,    0x290, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      MSP,      UART4,    NONE),
370         MFPR_MMP2(GPIO64,    0x294, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      MSP,      UART4,    NONE),
371         MFPR_MMP2(GPIO65,    0x298, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      MSP,      UART4,    NONE),
372         MFPR_MMP2(GPIO66,    0x29C, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      MSP,      UART4,    NONE),
373         MFPR_MMP2(GPIO67,    0x2A0, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      MSP,      NONE,     NONE),
374         MFPR_MMP2(GPIO68,    0x2A4, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      MSP,      LCD,      NONE),
375         MFPR_MMP2(GPIO69,    0x2A8, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      NONE,     LCD,      NONE),
376         MFPR_MMP2(GPIO70,    0x2AC, GPIO,     CCIC1,      ULPI,       MMC3,       CCIC2,      MSP,      LCD,      NONE),
377         MFPR_MMP2(GPIO71,    0x2B0, GPIO,     TWSI3,      NONE,       PWM,        NONE,       NONE,     LCD,      AAS_TWSI),
378         MFPR_MMP2(GPIO72,    0x2B4, GPIO,     TWSI3,      HDMI,       PWM,        NONE,       NONE,     LCD,      AAS_TWSI),
379         MFPR_MMP2(GPIO73,    0x2B8, GPIO,     VCXO_REQ,   32K_CLKOUT, PWM,        VCXO_OUT,   NONE,     LCD,      NONE),
380         MFPR_MMP2(GPIO74,    0x170, GPIO,     LCD,        SMC,        MMC4,       SSP3,       UART2,    UART4,    TIPU),
381         MFPR_MMP2(GPIO75,    0x174, GPIO,     LCD,        SMC,        MMC4,       SSP3,       UART2,    UART4,    TIPU),
382         MFPR_MMP2(GPIO76,    0x178, GPIO,     LCD,        SMC,        MMC4,       SSP3,       UART2,    UART4,    TIPU),
383         MFPR_MMP2(GPIO77,    0x17C, GPIO,     LCD,        SMC,        MMC4,       SSP3,       UART2,    UART4,    TIPU),
384         MFPR_MMP2(GPIO78,    0x180, GPIO,     LCD,        HDMI,       MMC4,       NONE,       SSP4,     AAS_SPI,  TIPU),
385         MFPR_MMP2(GPIO79,    0x184, GPIO,     LCD,        AAS_GPIO,   MMC4,       NONE,       SSP4,     AAS_SPI,  TIPU),
386         MFPR_MMP2(GPIO80,    0x188, GPIO,     LCD,        AAS_GPIO,   MMC4,       NONE,       SSP4,     AAS_SPI,  TIPU),
387         MFPR_MMP2(GPIO81,    0x18C, GPIO,     LCD,        AAS_GPIO,   MMC4,       NONE,       SSP4,     AAS_SPI,  TIPU),
388         MFPR_MMP2(GPIO82,    0x190, GPIO,     LCD,        NONE,       MMC4,       NONE,       NONE,     CCIC2,    TIPU),
389         MFPR_MMP2(GPIO83,    0x194, GPIO,     LCD,        NONE,       MMC4,       NONE,       NONE,     CCIC2,    TIPU),
390         MFPR_MMP2(GPIO84,    0x198, GPIO,     LCD,        SMC,        MMC2,       NONE,       TWSI5,    AAS_TWSI, TIPU),
391         MFPR_MMP2(GPIO85,    0x19C, GPIO,     LCD,        SMC,        MMC2,       NONE,       TWSI5,    AAS_TWSI, TIPU),
392         MFPR_MMP2(GPIO86,    0x1A0, GPIO,     LCD,        SMC,        MMC2,       NONE,       TWSI6,    CCIC2,    TIPU),
393         MFPR_MMP2(GPIO87,    0x1A4, GPIO,     LCD,        SMC,        MMC2,       NONE,       TWSI6,    CCIC2,    TIPU),
394         MFPR_MMP2(GPIO88,    0x1A8, GPIO,     LCD,        AAS_GPIO,   MMC2,       NONE,       NONE,     CCIC2,    TIPU),
395         MFPR_MMP2(GPIO89,    0x1AC, GPIO,     LCD,        AAS_GPIO,   MMC2,       NONE,       NONE,     CCIC2,    TIPU),
396         MFPR_MMP2(GPIO90,    0x1B0, GPIO,     LCD,        AAS_GPIO,   MMC2,       NONE,       NONE,     CCIC2,    TIPU),
397         MFPR_MMP2(GPIO91,    0x1B4, GPIO,     LCD,        AAS_GPIO,   MMC2,       NONE,       NONE,     CCIC2,    TIPU),
398         MFPR_MMP2(GPIO92,    0x1B8, GPIO,     LCD,        AAS_GPIO,   MMC2,       NONE,       NONE,     CCIC2,    TIPU),
399         MFPR_MMP2(GPIO93,    0x1BC, GPIO,     LCD,        AAS_GPIO,   MMC2,       NONE,       NONE,     CCIC2,    TIPU),
400         MFPR_MMP2(GPIO94,    0x1C0, GPIO,     LCD,        AAS_GPIO,   SPI,        NONE,       AAS_SPI,  CCIC2,    TIPU),
401         MFPR_MMP2(GPIO95,    0x1C4, GPIO,     LCD,        TWSI3,      SPI,        AAS_DEU_EX, AAS_SPI,  CCIC2,    TIPU),
402         MFPR_MMP2(GPIO96,    0x1C8, GPIO,     LCD,        TWSI3,      SPI,        AAS_DEU_EX, AAS_SPI,  NONE,     TIPU),
403         MFPR_MMP2(GPIO97,    0x1CC, GPIO,     LCD,        TWSI6,      SPI,        AAS_DEU_EX, AAS_SPI,  NONE,     TIPU),
404         MFPR_MMP2(GPIO98,    0x1D0, GPIO,     LCD,        TWSI6,      SPI,        ONE_WIRE,   NONE,     NONE,     TIPU),
405         MFPR_MMP2(GPIO99,    0x1D4, GPIO,     LCD,        SMC,        SPI,        TWSI5,      NONE,     NONE,     TIPU),
406         MFPR_MMP2(GPIO100,   0x1D8, GPIO,     LCD,        SMC,        SPI,        TWSI5,      NONE,     NONE,     TIPU),
407         MFPR_MMP2(GPIO101,   0x1DC, GPIO,     LCD,        SMC,        SPI,        NONE,       NONE,     NONE,     TIPU),
408         MFPR_MMP2(GPIO102,   0x000, USIM,     GPIO,       FSIC,       KP_DK,      LCD,        NONE,     NONE,     NONE),
409         MFPR_MMP2(GPIO103,   0x004, USIM,     GPIO,       FSIC,       KP_DK,      LCD,        NONE,     NONE,     NONE),
410         MFPR_MMP2(GPIO104,   0x1FC, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
411         MFPR_MMP2(GPIO105,   0x1F8, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
412         MFPR_MMP2(GPIO106,   0x1F4, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
413         MFPR_MMP2(GPIO107,   0x1F0, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
414         MFPR_MMP2(GPIO108,   0x21C, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
415         MFPR_MMP2(GPIO109,   0x218, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
416         MFPR_MMP2(GPIO110,   0x214, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
417         MFPR_MMP2(GPIO111,   0x200, NAND,     GPIO,       MMC3,       NONE,       NONE,       NONE,     NONE,     NONE),
418         MFPR_MMP2(GPIO112,   0x244, NAND,     GPIO,       MMC3,       SMC,        NONE,       NONE,     NONE,     NONE),
419         MFPR_MMP2(GPIO113,   0x25C, SMC,      GPIO,       EXT_DMA,    MMC3,       SMC,        HDMI,     NONE,     NONE),
420         MFPR_MMP2(GPIO114,   0x164, G_CLKOUT, 32K_CLKOUT, HDMI,       NONE,       NONE,       NONE,     NONE,     NONE),
421         MFPR_MMP2(GPIO115,   0x260, GPIO,     NONE,       AC,         UART4,      UART3,      SSP1,     NONE,     NONE),
422         MFPR_MMP2(GPIO116,   0x264, GPIO,     NONE,       AC,         UART4,      UART3,      SSP1,     NONE,     NONE),
423         MFPR_MMP2(GPIO117,   0x268, GPIO,     NONE,       AC,         UART4,      UART3,      SSP1,     NONE,     NONE),
424         MFPR_MMP2(GPIO118,   0x26C, GPIO,     NONE,       AC,         UART4,      UART3,      SSP1,     NONE,     NONE),
425         MFPR_MMP2(GPIO119,   0x270, GPIO,     NONE,       CA,         SSP3,       NONE,       NONE,     NONE,     NONE),
426         MFPR_MMP2(GPIO120,   0x274, GPIO,     NONE,       CA,         SSP3,       NONE,       NONE,     NONE,     NONE),
427         MFPR_MMP2(GPIO121,   0x278, GPIO,     NONE,       CA,         SSP3,       NONE,       NONE,     NONE,     NONE),
428         MFPR_MMP2(GPIO122,   0x27C, GPIO,     NONE,       CA,         SSP3,       NONE,       NONE,     NONE,     NONE),
429         MFPR_MMP2(GPIO123,   0x148, GPIO,     SLEEP_IND,  ONE_WIRE,   32K_CLKOUT, NONE,       NONE,     NONE,     NONE),
430         MFPR_MMP2(GPIO124,   0x00C, GPIO,     MMC1,       LCD,        MMC3,       NAND,       NONE,     NONE,     NONE),
431         MFPR_MMP2(GPIO125,   0x010, GPIO,     MMC1,       LCD,        MMC3,       NAND,       NONE,     NONE,     NONE),
432         MFPR_MMP2(GPIO126,   0x014, GPIO,     MMC1,       LCD,        MMC3,       NAND,       NONE,     NONE,     NONE),
433         MFPR_MMP2(GPIO127,   0x018, GPIO,     NONE,       LCD,        MMC3,       NAND,       NONE,     NONE,     NONE),
434         MFPR_MMP2(GPIO128,   0x01C, GPIO,     NONE,       LCD,        MMC3,       NAND,       NONE,     NONE,     NONE),
435         MFPR_MMP2(GPIO129,   0x020, GPIO,     MMC1,       LCD,        MMC3,       NAND,       NONE,     NONE,     NONE),
436         MFPR_MMP2(GPIO130,   0x024, GPIO,     MMC1,       LCD,        MMC3,       NAND,       NONE,     NONE,     NONE),
437         MFPR_MMP2(GPIO131,   0x028, GPIO,     MMC1,       NONE,       MSP,        NONE,       NONE,     NONE,     NONE),
438         MFPR_MMP2(GPIO132,   0x02C, GPIO,     MMC1,       PRI_JTAG,   MSP,        SSP3,       AAS_JTAG, NONE,     NONE),
439         MFPR_MMP2(GPIO133,   0x030, GPIO,     MMC1,       PRI_JTAG,   MSP,        SSP3,       AAS_JTAG, NONE,     NONE),
440         MFPR_MMP2(GPIO134,   0x034, GPIO,     MMC1,       PRI_JTAG,   MSP,        SSP3,       AAS_JTAG, NONE,     NONE),
441         MFPR_MMP2(GPIO135,   0x038, GPIO,     NONE,       LCD,        MMC3,       NAND,       NONE,     NONE,     NONE),
442         MFPR_MMP2(GPIO136,   0x03C, GPIO,     MMC1,       PRI_JTAG,   MSP,        SSP3,       AAS_JTAG, NONE,     NONE),
443         MFPR_MMP2(GPIO137,   0x040, GPIO,     HDMI,       LCD,        MSP,        NONE,       NONE,     NONE,     NONE),
444         MFPR_MMP2(GPIO138,   0x044, GPIO,     NONE,       LCD,        MMC3,       SMC,        NONE,     NONE,     NONE),
445         MFPR_MMP2(GPIO139,   0x048, GPIO,     MMC1,       PRI_JTAG,   MSP,        NONE,       AAS_JTAG, NONE,     NONE),
446         MFPR_MMP2(GPIO140,   0x04C, GPIO,     MMC1,       LCD,        NONE,       NONE,       UART2,    UART1,    NONE),
447         MFPR_MMP2(GPIO141,   0x050, GPIO,     MMC1,       LCD,        NONE,       NONE,       UART2,    UART1,    NONE),
448         MFPR_MMP2(GPIO142,   0x008, USIM,     GPIO,       FSIC,       KP_DK,      NONE,       NONE,     NONE,     NONE),
449         MFPR_MMP2(GPIO143,   0x220, NAND,     GPIO,       SMC,        NONE,       NAND,       NONE,     NONE,     NONE),
450         MFPR_MMP2(GPIO144,   0x224, NAND,     GPIO,       SMC_INT,    SMC,        NAND,       NONE,     NONE,     NONE),
451         MFPR_MMP2(GPIO145,   0x228, SMC,      GPIO,       NONE,       NONE,       SMC,        NONE,     NONE,     NONE),
452         MFPR_MMP2(GPIO146,   0x22C, SMC,      GPIO,       NONE,       NONE,       SMC,        NONE,     NONE,     NONE),
453         MFPR_MMP2(GPIO147,   0x230, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
454         MFPR_MMP2(GPIO148,   0x234, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
455         MFPR_MMP2(GPIO149,   0x238, NAND,     GPIO,       NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
456         MFPR_MMP2(GPIO150,   0x23C, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
457         MFPR_MMP2(GPIO151,   0x240, SMC,      GPIO,       MMC3,       NONE,       NONE,       NONE,     NONE,     NONE),
458         MFPR_MMP2(GPIO152,   0x248, SMC,      GPIO,       NONE,       NONE,       SMC,        NONE,     NONE,     NONE),
459         MFPR_MMP2(GPIO153,   0x24C, SMC,      GPIO,       NONE,       NONE,       SMC,        NONE,     NONE,     NONE),
460         MFPR_MMP2(GPIO154,   0x254, SMC_INT,  GPIO,       SMC,        NONE,       NAND,       NONE,     NONE,     NONE),
461         MFPR_MMP2(GPIO155,   0x258, EXT_DMA,  GPIO,       SMC,        NONE,       EXT_DMA,    NONE,     NONE,     NONE),
462         MFPR_MMP2(GPIO156,   0x14C, PRI_JTAG, GPIO,       PWM,        NONE,       NONE,       NONE,     NONE,     NONE),
463         MFPR_MMP2(GPIO157,   0x150, PRI_JTAG, GPIO,       PWM,        NONE,       NONE,       NONE,     NONE,     NONE),
464         MFPR_MMP2(GPIO158,   0x154, PRI_JTAG, GPIO,       PWM,        NONE,       NONE,       NONE,     NONE,     NONE),
465         MFPR_MMP2(GPIO159,   0x158, PRI_JTAG, GPIO,       PWM,        NONE,       NONE,       NONE,     NONE,     NONE),
466         MFPR_MMP2(GPIO160,   0x250, NAND,     GPIO,       SMC,        NONE,       NAND,       NONE,     NONE,     NONE),
467         MFPR_MMP2(GPIO161,   0x210, NAND,     GPIO,       NONE,       NONE,       NAND,       NONE,     NONE,     NONE),
468         MFPR_MMP2(GPIO162,   0x20C, NAND,     GPIO,       MMC3,       NONE,       NONE,       NONE,     NONE,     NONE),
469         MFPR_MMP2(GPIO163,   0x208, NAND,     GPIO,       MMC3,       NONE,       NONE,       NONE,     NONE,     NONE),
470         MFPR_MMP2(GPIO164,   0x204, NAND,     GPIO,       MMC3,       NONE,       NONE,       NONE,     NONE,     NONE),
471         MFPR_MMP2(GPIO165,   0x1EC, NAND,     GPIO,       MMC3,       NONE,       NONE,       NONE,     NONE,     NONE),
472         MFPR_MMP2(GPIO166,   0x1E8, NAND,     GPIO,       MMC3,       NONE,       NONE,       NONE,     NONE,     NONE),
473         MFPR_MMP2(GPIO167,   0x1E4, NAND,     GPIO,       MMC3,       NONE,       NONE,       NONE,     NONE,     NONE),
474         MFPR_MMP2(GPIO168,   0x1E0, NAND,     GPIO,       MMC3,       NONE,       NONE,       NONE,     NONE,     NONE),
475         MFPR_MMP2(TWSI4_SCL, 0x2BC, TWSI4,    LCD,        NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
476         MFPR_MMP2(TWSI4_SDA, 0x2C0, TWSI4,    LCD,        NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
477         MFPR_MMP2(G_CLKREQ,  0x160, G_CLKREQ, ONE_WIRE,   NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
478         MFPR_MMP2(VCXO_REQ,  0x168, VCXO_REQ, ONE_WIRE,   PLL,        NONE,       NONE,       NONE,     NONE,     NONE),
479         MFPR_MMP2(VCXO_OUT,  0x16C, VCXO_OUT, 32K_CLKOUT, NONE,       NONE,       NONE,       NONE,     NONE,     NONE),
480 };
481
482 static const unsigned mmp2_uart1_pin1[] = {GPIO29, GPIO30, GPIO31, GPIO32};
483 static const unsigned mmp2_uart1_pin2[] = {GPIO45, GPIO46};
484 static const unsigned mmp2_uart1_pin3[] = {GPIO140, GPIO141};
485 static const unsigned mmp2_uart2_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40};
486 static const unsigned mmp2_uart2_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
487 static const unsigned mmp2_uart2_pin3[] = {GPIO47, GPIO48, GPIO49, GPIO50};
488 static const unsigned mmp2_uart2_pin4[] = {GPIO74, GPIO75, GPIO76, GPIO77};
489 static const unsigned mmp2_uart2_pin5[] = {GPIO55, GPIO56};
490 static const unsigned mmp2_uart2_pin6[] = {GPIO140, GPIO141};
491 static const unsigned mmp2_uart3_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40};
492 static const unsigned mmp2_uart3_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
493 static const unsigned mmp2_uart3_pin3[] = {GPIO51, GPIO52, GPIO53, GPIO54};
494 static const unsigned mmp2_uart3_pin4[] = {GPIO59, GPIO60, GPIO61, GPIO62};
495 static const unsigned mmp2_uart3_pin5[] = {GPIO115, GPIO116, GPIO117, GPIO118};
496 static const unsigned mmp2_uart3_pin6[] = {GPIO51, GPIO52};
497 static const unsigned mmp2_uart4_pin1[] = {GPIO43, GPIO44, GPIO45, GPIO46};
498 static const unsigned mmp2_uart4_pin2[] = {GPIO63, GPIO64, GPIO65, GPIO66};
499 static const unsigned mmp2_uart4_pin3[] = {GPIO74, GPIO75, GPIO76, GPIO77};
500 static const unsigned mmp2_uart4_pin4[] = {GPIO115, GPIO116, GPIO117, GPIO118};
501 static const unsigned mmp2_uart4_pin5[] = {GPIO59, GPIO60};
502 static const unsigned mmp2_kpdk_pin1[] = {GPIO16, GPIO17, GPIO18, GPIO19};
503 static const unsigned mmp2_kpdk_pin2[] = {GPIO16, GPIO17};
504 static const unsigned mmp2_twsi2_pin1[] = {GPIO37, GPIO38};
505 static const unsigned mmp2_twsi2_pin2[] = {GPIO39, GPIO40};
506 static const unsigned mmp2_twsi2_pin3[] = {GPIO43, GPIO44};
507 static const unsigned mmp2_twsi2_pin4[] = {GPIO53, GPIO54};
508 static const unsigned mmp2_twsi2_pin5[] = {GPIO55, GPIO56};
509 static const unsigned mmp2_twsi3_pin1[] = {GPIO71, GPIO72};
510 static const unsigned mmp2_twsi3_pin2[] = {GPIO95, GPIO96};
511 static const unsigned mmp2_twsi4_pin1[] = {TWSI4_SCL, TWSI4_SDA};
512 static const unsigned mmp2_twsi5_pin1[] = {GPIO41, GPIO42};
513 static const unsigned mmp2_twsi5_pin2[] = {GPIO84, GPIO85};
514 static const unsigned mmp2_twsi5_pin3[] = {GPIO99, GPIO100};
515 static const unsigned mmp2_twsi6_pin1[] = {GPIO47, GPIO48};
516 static const unsigned mmp2_twsi6_pin2[] = {GPIO86, GPIO87};
517 static const unsigned mmp2_twsi6_pin3[] = {GPIO97, GPIO98};
518 static const unsigned mmp2_ccic1_pin1[] = {GPIO12, GPIO13, GPIO14, GPIO15,
519         GPIO16, GPIO17, GPIO18, GPIO19, GPIO20, GPIO21, GPIO22, GPIO23};
520 static const unsigned mmp2_ccic1_pin2[] = {GPIO59, GPIO60, GPIO61, GPIO62,
521         GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70};
522 static const unsigned mmp2_ccic2_pin1[] = {GPIO59, GPIO60, GPIO61, GPIO62,
523         GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70};
524 static const unsigned mmp2_ccic2_pin2[] = {GPIO82, GPIO83, GPIO86, GPIO87,
525         GPIO88, GPIO89, GPIO90, GPIO91, GPIO92, GPIO93, GPIO94, GPIO95};
526 static const unsigned mmp2_ulpi_pin1[] = {GPIO59, GPIO60, GPIO61, GPIO62,
527         GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70};
528 static const unsigned mmp2_ro_pin1[] = {GPIO16, GPIO17};
529 static const unsigned mmp2_ro_pin2[] = {GPIO18, GPIO19};
530 static const unsigned mmp2_ro_pin3[] = {GPIO51, GPIO52};
531 static const unsigned mmp2_ro_pin4[] = {GPIO55, GPIO56};
532 static const unsigned mmp2_i2s_pin1[] = {GPIO24, GPIO25, GPIO26, GPIO27,
533         GPIO28};
534 static const unsigned mmp2_i2s_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36};
535 static const unsigned mmp2_ssp1_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40};
536 static const unsigned mmp2_ssp1_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
537 static const unsigned mmp2_ssp1_pin3[] = {GPIO115, GPIO116, GPIO117, GPIO118};
538 static const unsigned mmp2_ssp2_pin1[] = {GPIO47, GPIO48, GPIO49, GPIO50};
539 static const unsigned mmp2_ssp3_pin1[] = {GPIO119, GPIO120, GPIO121, GPIO122};
540 static const unsigned mmp2_ssp3_pin2[] = {GPIO132, GPIO133, GPIO133, GPIO136};
541 static const unsigned mmp2_sspa2_pin1[] = {GPIO25, GPIO26, GPIO27, GPIO28};
542 static const unsigned mmp2_sspa2_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36};
543 static const unsigned mmp2_mmc1_pin1[] = {GPIO131, GPIO132, GPIO133, GPIO134,
544         GPIO136, GPIO139, GPIO140, GPIO141};
545 static const unsigned mmp2_mmc2_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40,
546         GPIO41, GPIO42};
547 static const unsigned mmp2_mmc3_pin1[] = {GPIO111, GPIO112, GPIO151, GPIO162,
548         GPIO163, GPIO164, GPIO165, GPIO166, GPIO167, GPIO168};
549
550 static struct pxa3xx_pin_group mmp2_grps[] = {
551         GRP_MMP2("uart1 4p1", UART1, mmp2_uart1_pin1),
552         GRP_MMP2("uart1 2p2", UART1, mmp2_uart1_pin2),
553         GRP_MMP2("uart1 2p3", UART1, mmp2_uart1_pin3),
554         GRP_MMP2("uart2 4p1", UART2, mmp2_uart2_pin1),
555         GRP_MMP2("uart2 4p2", UART2, mmp2_uart2_pin2),
556         GRP_MMP2("uart2 4p3", UART2, mmp2_uart2_pin3),
557         GRP_MMP2("uart2 4p4", UART2, mmp2_uart2_pin4),
558         GRP_MMP2("uart2 2p5", UART2, mmp2_uart2_pin5),
559         GRP_MMP2("uart2 2p6", UART2, mmp2_uart2_pin6),
560         GRP_MMP2("uart3 4p1", UART3, mmp2_uart3_pin1),
561         GRP_MMP2("uart3 4p2", UART3, mmp2_uart3_pin2),
562         GRP_MMP2("uart3 4p3", UART3, mmp2_uart3_pin3),
563         GRP_MMP2("uart3 4p4", UART3, mmp2_uart3_pin4),
564         GRP_MMP2("uart3 4p5", UART3, mmp2_uart3_pin5),
565         GRP_MMP2("uart3 2p6", UART3, mmp2_uart3_pin6),
566         GRP_MMP2("uart4 4p1", UART4, mmp2_uart4_pin1),
567         GRP_MMP2("uart4 4p2", UART4, mmp2_uart4_pin2),
568         GRP_MMP2("uart4 4p3", UART4, mmp2_uart4_pin3),
569         GRP_MMP2("uart4 4p4", UART4, mmp2_uart4_pin4),
570         GRP_MMP2("uart4 2p5", UART4, mmp2_uart4_pin5),
571         GRP_MMP2("kpdk 4p1", KP_DK, mmp2_kpdk_pin1),
572         GRP_MMP2("kpdk 4p2", KP_DK, mmp2_kpdk_pin2),
573         GRP_MMP2("twsi2-1", TWSI2, mmp2_twsi2_pin1),
574         GRP_MMP2("twsi2-2", TWSI2, mmp2_twsi2_pin2),
575         GRP_MMP2("twsi2-3", TWSI2, mmp2_twsi2_pin3),
576         GRP_MMP2("twsi2-4", TWSI2, mmp2_twsi2_pin4),
577         GRP_MMP2("twsi2-5", TWSI2, mmp2_twsi2_pin5),
578         GRP_MMP2("twsi3-1", TWSI3, mmp2_twsi3_pin1),
579         GRP_MMP2("twsi3-2", TWSI3, mmp2_twsi3_pin2),
580         GRP_MMP2("twsi4", TWSI4, mmp2_twsi4_pin1),
581         GRP_MMP2("twsi5-1", TWSI5, mmp2_twsi5_pin1),
582         GRP_MMP2("twsi5-2", TWSI5, mmp2_twsi5_pin2),
583         GRP_MMP2("twsi5-3", TWSI5, mmp2_twsi5_pin3),
584         GRP_MMP2("twsi6-1", TWSI6, mmp2_twsi6_pin1),
585         GRP_MMP2("twsi6-2", TWSI6, mmp2_twsi6_pin2),
586         GRP_MMP2("twsi6-3", TWSI6, mmp2_twsi6_pin3),
587         GRP_MMP2("ccic1-1", CCIC1, mmp2_ccic1_pin1),
588         GRP_MMP2("ccic1-2", CCIC1, mmp2_ccic1_pin2),
589         GRP_MMP2("ccic2-1", CCIC2, mmp2_ccic2_pin1),
590         GRP_MMP2("ccic2-1", CCIC2, mmp2_ccic2_pin2),
591         GRP_MMP2("ulpi", ULPI, mmp2_ulpi_pin1),
592         GRP_MMP2("ro-1", ROT, mmp2_ro_pin1),
593         GRP_MMP2("ro-2", ROT, mmp2_ro_pin2),
594         GRP_MMP2("ro-3", ROT, mmp2_ro_pin3),
595         GRP_MMP2("ro-4", ROT, mmp2_ro_pin4),
596         GRP_MMP2("i2s 5p1", I2S, mmp2_i2s_pin1),
597         GRP_MMP2("i2s 4p2", I2S, mmp2_i2s_pin2),
598         GRP_MMP2("ssp1 4p1", SSP1, mmp2_ssp1_pin1),
599         GRP_MMP2("ssp1 4p2", SSP1, mmp2_ssp1_pin2),
600         GRP_MMP2("ssp1 4p3", SSP1, mmp2_ssp1_pin3),
601         GRP_MMP2("ssp2 4p1", SSP2, mmp2_ssp2_pin1),
602         GRP_MMP2("ssp3 4p1", SSP3, mmp2_ssp3_pin1),
603         GRP_MMP2("ssp3 4p2", SSP3, mmp2_ssp3_pin2),
604         GRP_MMP2("sspa2 4p1", SSPA2, mmp2_sspa2_pin1),
605         GRP_MMP2("sspa2 4p2", SSPA2, mmp2_sspa2_pin2),
606         GRP_MMP2("mmc1 8p1", MMC1, mmp2_mmc1_pin1),
607         GRP_MMP2("mmc2 6p1", MMC2, mmp2_mmc2_pin1),
608         GRP_MMP2("mmc3 10p1", MMC3, mmp2_mmc3_pin1),
609 };
610
611 static const char * const mmp2_uart1_grps[] = {"uart1 4p1", "uart1 2p2",
612         "uart1 2p3"};
613 static const char * const mmp2_uart2_grps[] = {"uart2 4p1", "uart2 4p2",
614         "uart2 4p3", "uart2 4p4", "uart2 4p5", "uart2 4p6"};
615 static const char * const mmp2_uart3_grps[] = {"uart3 4p1", "uart3 4p2",
616         "uart3 4p3", "uart3 4p4", "uart3 4p5", "uart3 2p6"};
617 static const char * const mmp2_uart4_grps[] = {"uart4 4p1", "uart4 4p2",
618         "uart4 4p3", "uart4 4p4", "uart4 2p5"};
619 static const char * const mmp2_kpdk_grps[] = {"kpdk 4p1", "kpdk 4p2"};
620 static const char * const mmp2_twsi2_grps[] = {"twsi2-1", "twsi2-2",
621         "twsi2-3", "twsi2-4", "twsi2-5"};
622 static const char * const mmp2_twsi3_grps[] = {"twsi3-1", "twsi3-2"};
623 static const char * const mmp2_twsi4_grps[] = {"twsi4"};
624 static const char * const mmp2_twsi5_grps[] = {"twsi5-1", "twsi5-2",
625         "twsi5-3"};
626 static const char * const mmp2_twsi6_grps[] = {"twsi6-1", "twsi6-2",
627         "twsi6-3"};
628 static const char * const mmp2_ccic1_grps[] = {"ccic1-1", "ccic1-2"};
629 static const char * const mmp2_ccic2_grps[] = {"ccic2-1", "ccic2-2"};
630 static const char * const mmp2_ulpi_grps[] = {"ulpi"};
631 static const char * const mmp2_ro_grps[] = {"ro-1", "ro-2", "ro-3", "ro-4"};
632 static const char * const mmp2_i2s_grps[] = {"i2s 5p1", "i2s 4p2"};
633 static const char * const mmp2_ssp1_grps[] = {"ssp1 4p1", "ssp1 4p2",
634         "ssp1 4p3"};
635 static const char * const mmp2_ssp2_grps[] = {"ssp2 4p1"};
636 static const char * const mmp2_ssp3_grps[] = {"ssp3 4p1", "ssp3 4p2"};
637 static const char * const mmp2_sspa2_grps[] = {"sspa2 4p1", "sspa2 4p2"};
638 static const char * const mmp2_mmc1_grps[] = {"mmc1 8p1"};
639 static const char * const mmp2_mmc2_grps[] = {"mmc2 6p1"};
640 static const char * const mmp2_mmc3_grps[] = {"mmc3 10p1"};
641
642 static struct pxa3xx_pmx_func mmp2_funcs[] = {
643         {"uart1",       ARRAY_AND_SIZE(mmp2_uart1_grps)},
644         {"uart2",       ARRAY_AND_SIZE(mmp2_uart2_grps)},
645         {"uart3",       ARRAY_AND_SIZE(mmp2_uart3_grps)},
646         {"uart4",       ARRAY_AND_SIZE(mmp2_uart4_grps)},
647         {"kpdk",        ARRAY_AND_SIZE(mmp2_kpdk_grps)},
648         {"twsi2",       ARRAY_AND_SIZE(mmp2_twsi2_grps)},
649         {"twsi3",       ARRAY_AND_SIZE(mmp2_twsi3_grps)},
650         {"twsi4",       ARRAY_AND_SIZE(mmp2_twsi4_grps)},
651         {"twsi5",       ARRAY_AND_SIZE(mmp2_twsi5_grps)},
652         {"twsi6",       ARRAY_AND_SIZE(mmp2_twsi6_grps)},
653         {"ccic1",       ARRAY_AND_SIZE(mmp2_ccic1_grps)},
654         {"ccic2",       ARRAY_AND_SIZE(mmp2_ccic2_grps)},
655         {"ulpi",        ARRAY_AND_SIZE(mmp2_ulpi_grps)},
656         {"ro",          ARRAY_AND_SIZE(mmp2_ro_grps)},
657         {"i2s",         ARRAY_AND_SIZE(mmp2_i2s_grps)},
658         {"ssp1",        ARRAY_AND_SIZE(mmp2_ssp1_grps)},
659         {"ssp2",        ARRAY_AND_SIZE(mmp2_ssp2_grps)},
660         {"ssp3",        ARRAY_AND_SIZE(mmp2_ssp3_grps)},
661         {"sspa2",       ARRAY_AND_SIZE(mmp2_sspa2_grps)},
662         {"mmc1",        ARRAY_AND_SIZE(mmp2_mmc1_grps)},
663         {"mmc2",        ARRAY_AND_SIZE(mmp2_mmc2_grps)},
664         {"mmc3",        ARRAY_AND_SIZE(mmp2_mmc3_grps)},
665 };
666
667 static struct pinctrl_desc mmp2_pctrl_desc = {
668         .name           = "mmp2-pinctrl",
669         .owner          = THIS_MODULE,
670 };
671
672 static struct pxa3xx_pinmux_info mmp2_info = {
673         .mfp            = mmp2_mfp,
674         .num_mfp        = ARRAY_SIZE(mmp2_mfp),
675         .grps           = mmp2_grps,
676         .num_grps       = ARRAY_SIZE(mmp2_grps),
677         .funcs          = mmp2_funcs,
678         .num_funcs      = ARRAY_SIZE(mmp2_funcs),
679         .num_gpio       = 169,
680         .desc           = &mmp2_pctrl_desc,
681         .pads           = mmp2_pads,
682         .num_pads       = ARRAY_SIZE(mmp2_pads),
683
684         .cputype        = PINCTRL_MMP2,
685         .ds_mask        = MMP2_DS_MASK,
686         .ds_shift       = MMP2_DS_SHIFT,
687 };
688
689 static int __devinit mmp2_pinmux_probe(struct platform_device *pdev)
690 {
691         return pxa3xx_pinctrl_register(pdev, &mmp2_info);
692 }
693
694 static int mmp2_pinmux_remove(struct platform_device *pdev)
695 {
696         return pxa3xx_pinctrl_unregister(pdev);
697 }
698
699 static struct platform_driver mmp2_pinmux_driver = {
700         .driver = {
701                 .name   = "mmp2-pinmux",
702                 .owner  = THIS_MODULE,
703         },
704         .probe  = mmp2_pinmux_probe,
705         .remove = mmp2_pinmux_remove,
706 };
707
708 static int __init mmp2_pinmux_init(void)
709 {
710         return platform_driver_register(&mmp2_pinmux_driver);
711 }
712 core_initcall_sync(mmp2_pinmux_init);
713
714 static void __exit mmp2_pinmux_exit(void)
715 {
716         platform_driver_unregister(&mmp2_pinmux_driver);
717 }
718 module_exit(mmp2_pinmux_exit);
719
720 MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>");
721 MODULE_DESCRIPTION("PXA3xx pin control driver");
722 MODULE_LICENSE("GPL v2");