linux/drivers/pinctrl/pinctrl-mmp2.c
<<
>>
Prefs
   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 */
  48enum 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
  57enum 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
 123static 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
 304struct 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
 482static const unsigned mmp2_uart1_pin1[] = {GPIO29, GPIO30, GPIO31, GPIO32};
 483static const unsigned mmp2_uart1_pin2[] = {GPIO45, GPIO46};
 484static const unsigned mmp2_uart1_pin3[] = {GPIO140, GPIO141};
 485static const unsigned mmp2_uart2_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40};
 486static const unsigned mmp2_uart2_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
 487static const unsigned mmp2_uart2_pin3[] = {GPIO47, GPIO48, GPIO49, GPIO50};
 488static const unsigned mmp2_uart2_pin4[] = {GPIO74, GPIO75, GPIO76, GPIO77};
 489static const unsigned mmp2_uart2_pin5[] = {GPIO55, GPIO56};
 490static const unsigned mmp2_uart2_pin6[] = {GPIO140, GPIO141};
 491static const unsigned mmp2_uart3_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40};
 492static const unsigned mmp2_uart3_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
 493static const unsigned mmp2_uart3_pin3[] = {GPIO51, GPIO52, GPIO53, GPIO54};
 494static const unsigned mmp2_uart3_pin4[] = {GPIO59, GPIO60, GPIO61, GPIO62};
 495static const unsigned mmp2_uart3_pin5[] = {GPIO115, GPIO116, GPIO117, GPIO118};
 496static const unsigned mmp2_uart3_pin6[] = {GPIO51, GPIO52};
 497static const unsigned mmp2_uart4_pin1[] = {GPIO43, GPIO44, GPIO45, GPIO46};
 498static const unsigned mmp2_uart4_pin2[] = {GPIO63, GPIO64, GPIO65, GPIO66};
 499static const unsigned mmp2_uart4_pin3[] = {GPIO74, GPIO75, GPIO76, GPIO77};
 500static const unsigned mmp2_uart4_pin4[] = {GPIO115, GPIO116, GPIO117, GPIO118};
 501static const unsigned mmp2_uart4_pin5[] = {GPIO59, GPIO60};
 502static const unsigned mmp2_kpdk_pin1[] = {GPIO16, GPIO17, GPIO18, GPIO19};
 503static const unsigned mmp2_kpdk_pin2[] = {GPIO16, GPIO17};
 504static const unsigned mmp2_twsi2_pin1[] = {GPIO37, GPIO38};
 505static const unsigned mmp2_twsi2_pin2[] = {GPIO39, GPIO40};
 506static const unsigned mmp2_twsi2_pin3[] = {GPIO43, GPIO44};
 507static const unsigned mmp2_twsi2_pin4[] = {GPIO53, GPIO54};
 508static const unsigned mmp2_twsi2_pin5[] = {GPIO55, GPIO56};
 509static const unsigned mmp2_twsi3_pin1[] = {GPIO71, GPIO72};
 510static const unsigned mmp2_twsi3_pin2[] = {GPIO95, GPIO96};
 511static const unsigned mmp2_twsi4_pin1[] = {TWSI4_SCL, TWSI4_SDA};
 512static const unsigned mmp2_twsi5_pin1[] = {GPIO41, GPIO42};
 513static const unsigned mmp2_twsi5_pin2[] = {GPIO84, GPIO85};
 514static const unsigned mmp2_twsi5_pin3[] = {GPIO99, GPIO100};
 515static const unsigned mmp2_twsi6_pin1[] = {GPIO47, GPIO48};
 516static const unsigned mmp2_twsi6_pin2[] = {GPIO86, GPIO87};
 517static const unsigned mmp2_twsi6_pin3[] = {GPIO97, GPIO98};
 518static const unsigned mmp2_ccic1_pin1[] = {GPIO12, GPIO13, GPIO14, GPIO15,
 519        GPIO16, GPIO17, GPIO18, GPIO19, GPIO20, GPIO21, GPIO22, GPIO23};
 520static const unsigned mmp2_ccic1_pin2[] = {GPIO59, GPIO60, GPIO61, GPIO62,
 521        GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70};
 522static const unsigned mmp2_ccic2_pin1[] = {GPIO59, GPIO60, GPIO61, GPIO62,
 523        GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70};
 524static const unsigned mmp2_ccic2_pin2[] = {GPIO82, GPIO83, GPIO86, GPIO87,
 525        GPIO88, GPIO89, GPIO90, GPIO91, GPIO92, GPIO93, GPIO94, GPIO95};
 526static const unsigned mmp2_ulpi_pin1[] = {GPIO59, GPIO60, GPIO61, GPIO62,
 527        GPIO63, GPIO64, GPIO65, GPIO66, GPIO67, GPIO68, GPIO69, GPIO70};
 528static const unsigned mmp2_ro_pin1[] = {GPIO16, GPIO17};
 529static const unsigned mmp2_ro_pin2[] = {GPIO18, GPIO19};
 530static const unsigned mmp2_ro_pin3[] = {GPIO51, GPIO52};
 531static const unsigned mmp2_ro_pin4[] = {GPIO55, GPIO56};
 532static const unsigned mmp2_i2s_pin1[] = {GPIO24, GPIO25, GPIO26, GPIO27,
 533        GPIO28};
 534static const unsigned mmp2_i2s_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36};
 535static const unsigned mmp2_ssp1_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40};
 536static const unsigned mmp2_ssp1_pin2[] = {GPIO43, GPIO44, GPIO45, GPIO46};
 537static const unsigned mmp2_ssp1_pin3[] = {GPIO115, GPIO116, GPIO117, GPIO118};
 538static const unsigned mmp2_ssp2_pin1[] = {GPIO47, GPIO48, GPIO49, GPIO50};
 539static const unsigned mmp2_ssp3_pin1[] = {GPIO119, GPIO120, GPIO121, GPIO122};
 540static const unsigned mmp2_ssp3_pin2[] = {GPIO132, GPIO133, GPIO133, GPIO136};
 541static const unsigned mmp2_sspa2_pin1[] = {GPIO25, GPIO26, GPIO27, GPIO28};
 542static const unsigned mmp2_sspa2_pin2[] = {GPIO33, GPIO34, GPIO35, GPIO36};
 543static const unsigned mmp2_mmc1_pin1[] = {GPIO131, GPIO132, GPIO133, GPIO134,
 544        GPIO136, GPIO139, GPIO140, GPIO141};
 545static const unsigned mmp2_mmc2_pin1[] = {GPIO37, GPIO38, GPIO39, GPIO40,
 546        GPIO41, GPIO42};
 547static const unsigned mmp2_mmc3_pin1[] = {GPIO111, GPIO112, GPIO151, GPIO162,
 548        GPIO163, GPIO164, GPIO165, GPIO166, GPIO167, GPIO168};
 549
 550static 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
 611static const char * const mmp2_uart1_grps[] = {"uart1 4p1", "uart1 2p2",
 612        "uart1 2p3"};
 613static const char * const mmp2_uart2_grps[] = {"uart2 4p1", "uart2 4p2",
 614        "uart2 4p3", "uart2 4p4", "uart2 4p5", "uart2 4p6"};
 615static const char * const mmp2_uart3_grps[] = {"uart3 4p1", "uart3 4p2",
 616        "uart3 4p3", "uart3 4p4", "uart3 4p5", "uart3 2p6"};
 617static const char * const mmp2_uart4_grps[] = {"uart4 4p1", "uart4 4p2",
 618        "uart4 4p3", "uart4 4p4", "uart4 2p5"};
 619static const char * const mmp2_kpdk_grps[] = {"kpdk 4p1", "kpdk 4p2"};
 620static const char * const mmp2_twsi2_grps[] = {"twsi2-1", "twsi2-2",
 621        "twsi2-3", "twsi2-4", "twsi2-5"};
 622static const char * const mmp2_twsi3_grps[] = {"twsi3-1", "twsi3-2"};
 623static const char * const mmp2_twsi4_grps[] = {"twsi4"};
 624static const char * const mmp2_twsi5_grps[] = {"twsi5-1", "twsi5-2",
 625        "twsi5-3"};
 626static const char * const mmp2_twsi6_grps[] = {"twsi6-1", "twsi6-2",
 627        "twsi6-3"};
 628static const char * const mmp2_ccic1_grps[] = {"ccic1-1", "ccic1-2"};
 629static const char * const mmp2_ccic2_grps[] = {"ccic2-1", "ccic2-2"};
 630static const char * const mmp2_ulpi_grps[] = {"ulpi"};
 631static const char * const mmp2_ro_grps[] = {"ro-1", "ro-2", "ro-3", "ro-4"};
 632static const char * const mmp2_i2s_grps[] = {"i2s 5p1", "i2s 4p2"};
 633static const char * const mmp2_ssp1_grps[] = {"ssp1 4p1", "ssp1 4p2",
 634        "ssp1 4p3"};
 635static const char * const mmp2_ssp2_grps[] = {"ssp2 4p1"};
 636static const char * const mmp2_ssp3_grps[] = {"ssp3 4p1", "ssp3 4p2"};
 637static const char * const mmp2_sspa2_grps[] = {"sspa2 4p1", "sspa2 4p2"};
 638static const char * const mmp2_mmc1_grps[] = {"mmc1 8p1"};
 639static const char * const mmp2_mmc2_grps[] = {"mmc2 6p1"};
 640static const char * const mmp2_mmc3_grps[] = {"mmc3 10p1"};
 641
 642static 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
 667static struct pinctrl_desc mmp2_pctrl_desc = {
 668        .name           = "mmp2-pinctrl",
 669        .owner          = THIS_MODULE,
 670};
 671
 672static 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
 689static int __devinit mmp2_pinmux_probe(struct platform_device *pdev)
 690{
 691        return pxa3xx_pinctrl_register(pdev, &mmp2_info);
 692}
 693
 694static int __devexit mmp2_pinmux_remove(struct platform_device *pdev)
 695{
 696        return pxa3xx_pinctrl_unregister(pdev);
 697}
 698
 699static struct platform_driver mmp2_pinmux_driver = {
 700        .driver = {
 701                .name   = "mmp2-pinmux",
 702                .owner  = THIS_MODULE,
 703        },
 704        .probe  = mmp2_pinmux_probe,
 705        .remove = __devexit_p(mmp2_pinmux_remove),
 706};
 707
 708static int __init mmp2_pinmux_init(void)
 709{
 710        return platform_driver_register(&mmp2_pinmux_driver);
 711}
 712core_initcall_sync(mmp2_pinmux_init);
 713
 714static void __exit mmp2_pinmux_exit(void)
 715{
 716        platform_driver_unregister(&mmp2_pinmux_driver);
 717}
 718module_exit(mmp2_pinmux_exit);
 719
 720MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>");
 721MODULE_DESCRIPTION("PXA3xx pin control driver");
 722MODULE_LICENSE("GPL v2");
 723
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.