linux/arch/arm/plat-pxa/include/plat/mfp.h
<<
>>
Prefs
   1/*
   2 * arch/arm/plat-pxa/include/plat/mfp.h
   3 *
   4 *   Common Multi-Function Pin Definitions
   5 *
   6 * Copyright (C) 2007 Marvell International Ltd.
   7 *
   8 * 2007-8-21: eric miao <eric.miao@marvell.com>
   9 *            initial version
  10 *
  11 *  This program is free software; you can redistribute it and/or modify
  12 *  it under the terms of the GNU General Public License version 2 as
  13 *  published by the Free Software Foundation.
  14 */
  15
  16#ifndef __ASM_PLAT_MFP_H
  17#define __ASM_PLAT_MFP_H
  18
  19#define mfp_to_gpio(m)  ((m) % 256)
  20
  21/* list of all the configurable MFP pins */
  22enum {
  23        MFP_PIN_INVALID = -1,
  24
  25        MFP_PIN_GPIO0 = 0,
  26        MFP_PIN_GPIO1,
  27        MFP_PIN_GPIO2,
  28        MFP_PIN_GPIO3,
  29        MFP_PIN_GPIO4,
  30        MFP_PIN_GPIO5,
  31        MFP_PIN_GPIO6,
  32        MFP_PIN_GPIO7,
  33        MFP_PIN_GPIO8,
  34        MFP_PIN_GPIO9,
  35        MFP_PIN_GPIO10,
  36        MFP_PIN_GPIO11,
  37        MFP_PIN_GPIO12,
  38        MFP_PIN_GPIO13,
  39        MFP_PIN_GPIO14,
  40        MFP_PIN_GPIO15,
  41        MFP_PIN_GPIO16,
  42        MFP_PIN_GPIO17,
  43        MFP_PIN_GPIO18,
  44        MFP_PIN_GPIO19,
  45        MFP_PIN_GPIO20,
  46        MFP_PIN_GPIO21,
  47        MFP_PIN_GPIO22,
  48        MFP_PIN_GPIO23,
  49        MFP_PIN_GPIO24,
  50        MFP_PIN_GPIO25,
  51        MFP_PIN_GPIO26,
  52        MFP_PIN_GPIO27,
  53        MFP_PIN_GPIO28,
  54        MFP_PIN_GPIO29,
  55        MFP_PIN_GPIO30,
  56        MFP_PIN_GPIO31,
  57        MFP_PIN_GPIO32,
  58        MFP_PIN_GPIO33,
  59        MFP_PIN_GPIO34,
  60        MFP_PIN_GPIO35,
  61        MFP_PIN_GPIO36,
  62        MFP_PIN_GPIO37,
  63        MFP_PIN_GPIO38,
  64        MFP_PIN_GPIO39,
  65        MFP_PIN_GPIO40,
  66        MFP_PIN_GPIO41,
  67        MFP_PIN_GPIO42,
  68        MFP_PIN_GPIO43,
  69        MFP_PIN_GPIO44,
  70        MFP_PIN_GPIO45,
  71        MFP_PIN_GPIO46,
  72        MFP_PIN_GPIO47,
  73        MFP_PIN_GPIO48,
  74        MFP_PIN_GPIO49,
  75        MFP_PIN_GPIO50,
  76        MFP_PIN_GPIO51,
  77        MFP_PIN_GPIO52,
  78        MFP_PIN_GPIO53,
  79        MFP_PIN_GPIO54,
  80        MFP_PIN_GPIO55,
  81        MFP_PIN_GPIO56,
  82        MFP_PIN_GPIO57,
  83        MFP_PIN_GPIO58,
  84        MFP_PIN_GPIO59,
  85        MFP_PIN_GPIO60,
  86        MFP_PIN_GPIO61,
  87        MFP_PIN_GPIO62,
  88        MFP_PIN_GPIO63,
  89        MFP_PIN_GPIO64,
  90        MFP_PIN_GPIO65,
  91        MFP_PIN_GPIO66,
  92        MFP_PIN_GPIO67,
  93        MFP_PIN_GPIO68,
  94        MFP_PIN_GPIO69,
  95        MFP_PIN_GPIO70,
  96        MFP_PIN_GPIO71,
  97        MFP_PIN_GPIO72,
  98        MFP_PIN_GPIO73,
  99        MFP_PIN_GPIO74,
 100        MFP_PIN_GPIO75,
 101        MFP_PIN_GPIO76,
 102        MFP_PIN_GPIO77,
 103        MFP_PIN_GPIO78,
 104        MFP_PIN_GPIO79,
 105        MFP_PIN_GPIO80,
 106        MFP_PIN_GPIO81,
 107        MFP_PIN_GPIO82,
 108        MFP_PIN_GPIO83,
 109        MFP_PIN_GPIO84,
 110        MFP_PIN_GPIO85,
 111        MFP_PIN_GPIO86,
 112        MFP_PIN_GPIO87,
 113        MFP_PIN_GPIO88,
 114        MFP_PIN_GPIO89,
 115        MFP_PIN_GPIO90,
 116        MFP_PIN_GPIO91,
 117        MFP_PIN_GPIO92,
 118        MFP_PIN_GPIO93,
 119        MFP_PIN_GPIO94,
 120        MFP_PIN_GPIO95,
 121        MFP_PIN_GPIO96,
 122        MFP_PIN_GPIO97,
 123        MFP_PIN_GPIO98,
 124        MFP_PIN_GPIO99,
 125        MFP_PIN_GPIO100,
 126        MFP_PIN_GPIO101,
 127        MFP_PIN_GPIO102,
 128        MFP_PIN_GPIO103,
 129        MFP_PIN_GPIO104,
 130        MFP_PIN_GPIO105,
 131        MFP_PIN_GPIO106,
 132        MFP_PIN_GPIO107,
 133        MFP_PIN_GPIO108,
 134        MFP_PIN_GPIO109,
 135        MFP_PIN_GPIO110,
 136        MFP_PIN_GPIO111,
 137        MFP_PIN_GPIO112,
 138        MFP_PIN_GPIO113,
 139        MFP_PIN_GPIO114,
 140        MFP_PIN_GPIO115,
 141        MFP_PIN_GPIO116,
 142        MFP_PIN_GPIO117,
 143        MFP_PIN_GPIO118,
 144        MFP_PIN_GPIO119,
 145        MFP_PIN_GPIO120,
 146        MFP_PIN_GPIO121,
 147        MFP_PIN_GPIO122,
 148        MFP_PIN_GPIO123,
 149        MFP_PIN_GPIO124,
 150        MFP_PIN_GPIO125,
 151        MFP_PIN_GPIO126,
 152        MFP_PIN_GPIO127,
 153
 154        MFP_PIN_GPIO128,
 155        MFP_PIN_GPIO129,
 156        MFP_PIN_GPIO130,
 157        MFP_PIN_GPIO131,
 158        MFP_PIN_GPIO132,
 159        MFP_PIN_GPIO133,
 160        MFP_PIN_GPIO134,
 161        MFP_PIN_GPIO135,
 162        MFP_PIN_GPIO136,
 163        MFP_PIN_GPIO137,
 164        MFP_PIN_GPIO138,
 165        MFP_PIN_GPIO139,
 166        MFP_PIN_GPIO140,
 167        MFP_PIN_GPIO141,
 168        MFP_PIN_GPIO142,
 169        MFP_PIN_GPIO143,
 170        MFP_PIN_GPIO144,
 171        MFP_PIN_GPIO145,
 172        MFP_PIN_GPIO146,
 173        MFP_PIN_GPIO147,
 174        MFP_PIN_GPIO148,
 175        MFP_PIN_GPIO149,
 176        MFP_PIN_GPIO150,
 177        MFP_PIN_GPIO151,
 178        MFP_PIN_GPIO152,
 179        MFP_PIN_GPIO153,
 180        MFP_PIN_GPIO154,
 181        MFP_PIN_GPIO155,
 182        MFP_PIN_GPIO156,
 183        MFP_PIN_GPIO157,
 184        MFP_PIN_GPIO158,
 185        MFP_PIN_GPIO159,
 186        MFP_PIN_GPIO160,
 187        MFP_PIN_GPIO161,
 188        MFP_PIN_GPIO162,
 189        MFP_PIN_GPIO163,
 190        MFP_PIN_GPIO164,
 191        MFP_PIN_GPIO165,
 192        MFP_PIN_GPIO166,
 193        MFP_PIN_GPIO167,
 194        MFP_PIN_GPIO168,
 195        MFP_PIN_GPIO169,
 196        MFP_PIN_GPIO170,
 197        MFP_PIN_GPIO171,
 198        MFP_PIN_GPIO172,
 199        MFP_PIN_GPIO173,
 200        MFP_PIN_GPIO174,
 201        MFP_PIN_GPIO175,
 202        MFP_PIN_GPIO176,
 203        MFP_PIN_GPIO177,
 204        MFP_PIN_GPIO178,
 205        MFP_PIN_GPIO179,
 206        MFP_PIN_GPIO180,
 207        MFP_PIN_GPIO181,
 208        MFP_PIN_GPIO182,
 209        MFP_PIN_GPIO183,
 210        MFP_PIN_GPIO184,
 211        MFP_PIN_GPIO185,
 212        MFP_PIN_GPIO186,
 213        MFP_PIN_GPIO187,
 214        MFP_PIN_GPIO188,
 215        MFP_PIN_GPIO189,
 216        MFP_PIN_GPIO190,
 217        MFP_PIN_GPIO191,
 218
 219        MFP_PIN_GPIO255 = 255,
 220
 221        MFP_PIN_GPIO0_2,
 222        MFP_PIN_GPIO1_2,
 223        MFP_PIN_GPIO2_2,
 224        MFP_PIN_GPIO3_2,
 225        MFP_PIN_GPIO4_2,
 226        MFP_PIN_GPIO5_2,
 227        MFP_PIN_GPIO6_2,
 228        MFP_PIN_GPIO7_2,
 229        MFP_PIN_GPIO8_2,
 230        MFP_PIN_GPIO9_2,
 231        MFP_PIN_GPIO10_2,
 232        MFP_PIN_GPIO11_2,
 233        MFP_PIN_GPIO12_2,
 234        MFP_PIN_GPIO13_2,
 235        MFP_PIN_GPIO14_2,
 236        MFP_PIN_GPIO15_2,
 237        MFP_PIN_GPIO16_2,
 238        MFP_PIN_GPIO17_2,
 239
 240        MFP_PIN_ULPI_STP,
 241        MFP_PIN_ULPI_NXT,
 242        MFP_PIN_ULPI_DIR,
 243
 244        MFP_PIN_nXCVREN,
 245        MFP_PIN_DF_CLE_nOE,
 246        MFP_PIN_DF_nADV1_ALE,
 247        MFP_PIN_DF_SCLK_E,
 248        MFP_PIN_DF_SCLK_S,
 249        MFP_PIN_nBE0,
 250        MFP_PIN_nBE1,
 251        MFP_PIN_DF_nADV2_ALE,
 252        MFP_PIN_DF_INT_RnB,
 253        MFP_PIN_DF_nCS0,
 254        MFP_PIN_DF_nCS1,
 255        MFP_PIN_nLUA,
 256        MFP_PIN_nLLA,
 257        MFP_PIN_DF_nWE,
 258        MFP_PIN_DF_ALE_nWE,
 259        MFP_PIN_DF_nRE_nOE,
 260        MFP_PIN_DF_ADDR0,
 261        MFP_PIN_DF_ADDR1,
 262        MFP_PIN_DF_ADDR2,
 263        MFP_PIN_DF_ADDR3,
 264        MFP_PIN_DF_IO0,
 265        MFP_PIN_DF_IO1,
 266        MFP_PIN_DF_IO2,
 267        MFP_PIN_DF_IO3,
 268        MFP_PIN_DF_IO4,
 269        MFP_PIN_DF_IO5,
 270        MFP_PIN_DF_IO6,
 271        MFP_PIN_DF_IO7,
 272        MFP_PIN_DF_IO8,
 273        MFP_PIN_DF_IO9,
 274        MFP_PIN_DF_IO10,
 275        MFP_PIN_DF_IO11,
 276        MFP_PIN_DF_IO12,
 277        MFP_PIN_DF_IO13,
 278        MFP_PIN_DF_IO14,
 279        MFP_PIN_DF_IO15,
 280        MFP_PIN_DF_nCS0_SM_nCS2,
 281        MFP_PIN_DF_nCS1_SM_nCS3,
 282        MFP_PIN_SM_nCS0,
 283        MFP_PIN_SM_nCS1,
 284        MFP_PIN_DF_WEn,
 285        MFP_PIN_DF_REn,
 286        MFP_PIN_DF_CLE_SM_OEn,
 287        MFP_PIN_DF_ALE_SM_WEn,
 288        MFP_PIN_DF_RDY0,
 289        MFP_PIN_DF_RDY1,
 290
 291        MFP_PIN_SM_SCLK,
 292        MFP_PIN_SM_BE0,
 293        MFP_PIN_SM_BE1,
 294        MFP_PIN_SM_ADV,
 295        MFP_PIN_SM_ADVMUX,
 296        MFP_PIN_SM_RDY,
 297
 298        MFP_PIN_MMC1_DAT7,
 299        MFP_PIN_MMC1_DAT6,
 300        MFP_PIN_MMC1_DAT5,
 301        MFP_PIN_MMC1_DAT4,
 302        MFP_PIN_MMC1_DAT3,
 303        MFP_PIN_MMC1_DAT2,
 304        MFP_PIN_MMC1_DAT1,
 305        MFP_PIN_MMC1_DAT0,
 306        MFP_PIN_MMC1_CMD,
 307        MFP_PIN_MMC1_CLK,
 308        MFP_PIN_MMC1_CD,
 309        MFP_PIN_MMC1_WP,
 310
 311        /* additional pins on PXA930 */
 312        MFP_PIN_GSIM_UIO,
 313        MFP_PIN_GSIM_UCLK,
 314        MFP_PIN_GSIM_UDET,
 315        MFP_PIN_GSIM_nURST,
 316        MFP_PIN_PMIC_INT,
 317        MFP_PIN_RDY,
 318
 319        /* additional pins on MMP2 */
 320        MFP_PIN_TWSI1_SCL,
 321        MFP_PIN_TWSI1_SDA,
 322        MFP_PIN_TWSI4_SCL,
 323        MFP_PIN_TWSI4_SDA,
 324        MFP_PIN_CLK_REQ,
 325
 326        MFP_PIN_MAX,
 327};
 328
 329/*
 330 * a possible MFP configuration is represented by a 32-bit integer
 331 *
 332 * bit  0.. 9 - MFP Pin Number (1024 Pins Maximum)
 333 * bit 10..12 - Alternate Function Selection
 334 * bit 13..15 - Drive Strength
 335 * bit 16..18 - Low Power Mode State
 336 * bit 19..20 - Low Power Mode Edge Detection
 337 * bit 21..22 - Run Mode Pull State
 338 *
 339 * to facilitate the definition, the following macros are provided
 340 *
 341 * MFP_CFG_DEFAULT - default MFP configuration value, with
 342 *                alternate function = 0,
 343 *                drive strength = fast 3mA (MFP_DS03X)
 344 *                low power mode = default
 345 *                edge detection = none
 346 *
 347 * MFP_CFG      - default MFPR value with alternate function
 348 * MFP_CFG_DRV  - default MFPR value with alternate function and
 349 *                pin drive strength
 350 * MFP_CFG_LPM  - default MFPR value with alternate function and
 351 *                low power mode
 352 * MFP_CFG_X    - default MFPR value with alternate function,
 353 *                pin drive strength and low power mode
 354 */
 355
 356typedef unsigned long mfp_cfg_t;
 357
 358#define MFP_PIN(x)              ((x) & 0x3ff)
 359
 360#define MFP_AF0                 (0x0 << 10)
 361#define MFP_AF1                 (0x1 << 10)
 362#define MFP_AF2                 (0x2 << 10)
 363#define MFP_AF3                 (0x3 << 10)
 364#define MFP_AF4                 (0x4 << 10)
 365#define MFP_AF5                 (0x5 << 10)
 366#define MFP_AF6                 (0x6 << 10)
 367#define MFP_AF7                 (0x7 << 10)
 368#define MFP_AF_MASK             (0x7 << 10)
 369#define MFP_AF(x)               (((x) >> 10) & 0x7)
 370
 371#define MFP_DS01X               (0x0 << 13)
 372#define MFP_DS02X               (0x1 << 13)
 373#define MFP_DS03X               (0x2 << 13)
 374#define MFP_DS04X               (0x3 << 13)
 375#define MFP_DS06X               (0x4 << 13)
 376#define MFP_DS08X               (0x5 << 13)
 377#define MFP_DS10X               (0x6 << 13)
 378#define MFP_DS13X               (0x7 << 13)
 379#define MFP_DS_MASK             (0x7 << 13)
 380#define MFP_DS(x)               (((x) >> 13) & 0x7)
 381
 382#define MFP_LPM_DEFAULT         (0x0 << 16)
 383#define MFP_LPM_DRIVE_LOW       (0x1 << 16)
 384#define MFP_LPM_DRIVE_HIGH      (0x2 << 16)
 385#define MFP_LPM_PULL_LOW        (0x3 << 16)
 386#define MFP_LPM_PULL_HIGH       (0x4 << 16)
 387#define MFP_LPM_FLOAT           (0x5 << 16)
 388#define MFP_LPM_INPUT           (0x6 << 16)
 389#define MFP_LPM_STATE_MASK      (0x7 << 16)
 390#define MFP_LPM_STATE(x)        (((x) >> 16) & 0x7)
 391
 392#define MFP_LPM_EDGE_NONE       (0x0 << 19)
 393#define MFP_LPM_EDGE_RISE       (0x1 << 19)
 394#define MFP_LPM_EDGE_FALL       (0x2 << 19)
 395#define MFP_LPM_EDGE_BOTH       (0x3 << 19)
 396#define MFP_LPM_EDGE_MASK       (0x3 << 19)
 397#define MFP_LPM_EDGE(x)         (((x) >> 19) & 0x3)
 398
 399#define MFP_PULL_NONE           (0x0 << 21)
 400#define MFP_PULL_LOW            (0x1 << 21)
 401#define MFP_PULL_HIGH           (0x2 << 21)
 402#define MFP_PULL_BOTH           (0x3 << 21)
 403#define MFP_PULL_FLOAT          (0x4 << 21)
 404#define MFP_PULL_MASK           (0x7 << 21)
 405#define MFP_PULL(x)             (((x) >> 21) & 0x7)
 406
 407#define MFP_CFG_DEFAULT         (MFP_AF0 | MFP_DS03X | MFP_LPM_DEFAULT |\
 408                                 MFP_LPM_EDGE_NONE | MFP_PULL_NONE)
 409
 410#define MFP_CFG(pin, af)                \
 411        ((MFP_CFG_DEFAULT & ~MFP_AF_MASK) |\
 412         (MFP_PIN(MFP_PIN_##pin) | MFP_##af))
 413
 414#define MFP_CFG_DRV(pin, af, drv)       \
 415        ((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_DS_MASK)) |\
 416         (MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_##drv))
 417
 418#define MFP_CFG_LPM(pin, af, lpm)       \
 419        ((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_LPM_STATE_MASK)) |\
 420         (MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_LPM_##lpm))
 421
 422#define MFP_CFG_X(pin, af, drv, lpm)    \
 423        ((MFP_CFG_DEFAULT & ~(MFP_AF_MASK | MFP_DS_MASK | MFP_LPM_STATE_MASK)) |\
 424         (MFP_PIN(MFP_PIN_##pin) | MFP_##af | MFP_##drv | MFP_LPM_##lpm))
 425
 426#if defined(CONFIG_PXA3xx) || defined(CONFIG_ARCH_MMP)
 427/*
 428 * each MFP pin will have a MFPR register, since the offset of the
 429 * register varies between processors, the processor specific code
 430 * should initialize the pin offsets by mfp_init()
 431 *
 432 * mfp_init_base() - accepts a virtual base for all MFPR registers and
 433 * initialize the MFP table to a default state
 434 *
 435 * mfp_init_addr() - accepts a table of "mfp_addr_map" structure, which
 436 * represents a range of MFP pins from "start" to "end", with the offset
 437 * beginning at "offset", to define a single pin, let "end" = -1.
 438 *
 439 * use
 440 *
 441 * MFP_ADDR_X() to define a range of pins
 442 * MFP_ADDR()   to define a single pin
 443 * MFP_ADDR_END to signal the end of pin offset definitions
 444 */
 445struct mfp_addr_map {
 446        unsigned int    start;
 447        unsigned int    end;
 448        unsigned long   offset;
 449};
 450
 451#define MFP_ADDR_X(start, end, offset) \
 452        { MFP_PIN_##start, MFP_PIN_##end, offset }
 453
 454#define MFP_ADDR(pin, offset) \
 455        { MFP_PIN_##pin, -1, offset }
 456
 457#define MFP_ADDR_END    { MFP_PIN_INVALID, 0 }
 458
 459void __init mfp_init_base(void __iomem *mfpr_base);
 460void __init mfp_init_addr(struct mfp_addr_map *map);
 461
 462/*
 463 * mfp_{read, write}()  - for direct read/write access to the MFPR register
 464 * mfp_config()         - for configuring a group of MFPR registers
 465 * mfp_config_lpm()     - configuring all low power MFPR registers for suspend
 466 * mfp_config_run()     - configuring all run time  MFPR registers after resume
 467 */
 468unsigned long mfp_read(int mfp);
 469void mfp_write(int mfp, unsigned long mfpr_val);
 470void mfp_config(unsigned long *mfp_cfgs, int num);
 471void mfp_config_run(void);
 472void mfp_config_lpm(void);
 473#endif /* CONFIG_PXA3xx || CONFIG_ARCH_MMP */
 474
 475#endif /* __ASM_PLAT_MFP_H */
 476