linux/arch/arm/plat-nomadik/include/plat/pincfg.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) ST-Ericsson SA 2010
   3 *
   4 * License terms: GNU General Public License, version 2
   5 * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
   6 *
   7 * Based on arch/arm/mach-pxa/include/mach/mfp.h:
   8 *   Copyright (C) 2007 Marvell International Ltd.
   9 *   eric miao <eric.miao@marvell.com>
  10 */
  11
  12#ifndef __PLAT_PINCFG_H
  13#define __PLAT_PINCFG_H
  14
  15/*
  16 * pin configurations are represented by 32-bit integers:
  17 *
  18 *      bit  0.. 8 - Pin Number (512 Pins Maximum)
  19 *      bit  9..10 - Alternate Function Selection
  20 *      bit 11..12 - Pull up/down state
  21 *      bit     13 - Sleep mode behaviour
  22 *      bit     14 - Direction
  23 *      bit     15 - Value (if output)
  24 *      bit 16..18 - SLPM pull up/down state
  25 *      bit 19..20 - SLPM direction
  26 *      bit 21..22 - SLPM Value (if output)
  27 *
  28 * to facilitate the definition, the following macros are provided
  29 *
  30 * PIN_CFG_DEFAULT - default config (0):
  31 *                   pull up/down = disabled
  32 *                   sleep mode = input/wakeup
  33 *                   direction = input
  34 *                   value = low
  35 *                   SLPM direction = same as normal
  36 *                   SLPM pull = same as normal
  37 *                   SLPM value = same as normal
  38 *
  39 * PIN_CFG         - default config with alternate function
  40 */
  41
  42typedef unsigned long pin_cfg_t;
  43
  44#define PIN_NUM_MASK            0x1ff
  45#define PIN_NUM(x)              ((x) & PIN_NUM_MASK)
  46
  47#define PIN_ALT_SHIFT           9
  48#define PIN_ALT_MASK            (0x3 << PIN_ALT_SHIFT)
  49#define PIN_ALT(x)              (((x) & PIN_ALT_MASK) >> PIN_ALT_SHIFT)
  50#define PIN_GPIO                (NMK_GPIO_ALT_GPIO << PIN_ALT_SHIFT)
  51#define PIN_ALT_A               (NMK_GPIO_ALT_A << PIN_ALT_SHIFT)
  52#define PIN_ALT_B               (NMK_GPIO_ALT_B << PIN_ALT_SHIFT)
  53#define PIN_ALT_C               (NMK_GPIO_ALT_C << PIN_ALT_SHIFT)
  54
  55#define PIN_PULL_SHIFT          11
  56#define PIN_PULL_MASK           (0x3 << PIN_PULL_SHIFT)
  57#define PIN_PULL(x)             (((x) & PIN_PULL_MASK) >> PIN_PULL_SHIFT)
  58#define PIN_PULL_NONE           (NMK_GPIO_PULL_NONE << PIN_PULL_SHIFT)
  59#define PIN_PULL_UP             (NMK_GPIO_PULL_UP << PIN_PULL_SHIFT)
  60#define PIN_PULL_DOWN           (NMK_GPIO_PULL_DOWN << PIN_PULL_SHIFT)
  61
  62#define PIN_SLPM_SHIFT          13
  63#define PIN_SLPM_MASK           (0x1 << PIN_SLPM_SHIFT)
  64#define PIN_SLPM(x)             (((x) & PIN_SLPM_MASK) >> PIN_SLPM_SHIFT)
  65#define PIN_SLPM_MAKE_INPUT     (NMK_GPIO_SLPM_INPUT << PIN_SLPM_SHIFT)
  66#define PIN_SLPM_NOCHANGE       (NMK_GPIO_SLPM_NOCHANGE << PIN_SLPM_SHIFT)
  67/* These two replace the above in DB8500v2+ */
  68#define PIN_SLPM_WAKEUP_ENABLE  (NMK_GPIO_SLPM_WAKEUP_ENABLE << PIN_SLPM_SHIFT)
  69#define PIN_SLPM_WAKEUP_DISABLE (NMK_GPIO_SLPM_WAKEUP_DISABLE << PIN_SLPM_SHIFT)
  70
  71#define PIN_DIR_SHIFT           14
  72#define PIN_DIR_MASK            (0x1 << PIN_DIR_SHIFT)
  73#define PIN_DIR(x)              (((x) & PIN_DIR_MASK) >> PIN_DIR_SHIFT)
  74#define PIN_DIR_INPUT           (0 << PIN_DIR_SHIFT)
  75#define PIN_DIR_OUTPUT          (1 << PIN_DIR_SHIFT)
  76
  77#define PIN_VAL_SHIFT           15
  78#define PIN_VAL_MASK            (0x1 << PIN_VAL_SHIFT)
  79#define PIN_VAL(x)              (((x) & PIN_VAL_MASK) >> PIN_VAL_SHIFT)
  80#define PIN_VAL_LOW             (0 << PIN_VAL_SHIFT)
  81#define PIN_VAL_HIGH            (1 << PIN_VAL_SHIFT)
  82
  83#define PIN_SLPM_PULL_SHIFT     16
  84#define PIN_SLPM_PULL_MASK      (0x7 << PIN_SLPM_PULL_SHIFT)
  85#define PIN_SLPM_PULL(x)        \
  86        (((x) & PIN_SLPM_PULL_MASK) >> PIN_SLPM_PULL_SHIFT)
  87#define PIN_SLPM_PULL_NONE      \
  88        ((1 + NMK_GPIO_PULL_NONE) << PIN_SLPM_PULL_SHIFT)
  89#define PIN_SLPM_PULL_UP        \
  90        ((1 + NMK_GPIO_PULL_UP) << PIN_SLPM_PULL_SHIFT)
  91#define PIN_SLPM_PULL_DOWN      \
  92        ((1 + NMK_GPIO_PULL_DOWN) << PIN_SLPM_PULL_SHIFT)
  93
  94#define PIN_SLPM_DIR_SHIFT      19
  95#define PIN_SLPM_DIR_MASK       (0x3 << PIN_SLPM_DIR_SHIFT)
  96#define PIN_SLPM_DIR(x)         \
  97        (((x) & PIN_SLPM_DIR_MASK) >> PIN_SLPM_DIR_SHIFT)
  98#define PIN_SLPM_DIR_INPUT      ((1 + 0) << PIN_SLPM_DIR_SHIFT)
  99#define PIN_SLPM_DIR_OUTPUT     ((1 + 1) << PIN_SLPM_DIR_SHIFT)
 100
 101#define PIN_SLPM_VAL_SHIFT      21
 102#define PIN_SLPM_VAL_MASK       (0x3 << PIN_SLPM_VAL_SHIFT)
 103#define PIN_SLPM_VAL(x)         \
 104        (((x) & PIN_SLPM_VAL_MASK) >> PIN_SLPM_VAL_SHIFT)
 105#define PIN_SLPM_VAL_LOW        ((1 + 0) << PIN_SLPM_VAL_SHIFT)
 106#define PIN_SLPM_VAL_HIGH       ((1 + 1) << PIN_SLPM_VAL_SHIFT)
 107
 108/* Shortcuts.  Use these instead of separate DIR, PULL, and VAL.  */
 109#define PIN_INPUT_PULLDOWN      (PIN_DIR_INPUT | PIN_PULL_DOWN)
 110#define PIN_INPUT_PULLUP        (PIN_DIR_INPUT | PIN_PULL_UP)
 111#define PIN_INPUT_NOPULL        (PIN_DIR_INPUT | PIN_PULL_NONE)
 112#define PIN_OUTPUT_LOW          (PIN_DIR_OUTPUT | PIN_VAL_LOW)
 113#define PIN_OUTPUT_HIGH         (PIN_DIR_OUTPUT | PIN_VAL_HIGH)
 114
 115#define PIN_SLPM_INPUT_PULLDOWN (PIN_SLPM_DIR_INPUT | PIN_SLPM_PULL_DOWN)
 116#define PIN_SLPM_INPUT_PULLUP   (PIN_SLPM_DIR_INPUT | PIN_SLPM_PULL_UP)
 117#define PIN_SLPM_INPUT_NOPULL   (PIN_SLPM_DIR_INPUT | PIN_SLPM_PULL_NONE)
 118#define PIN_SLPM_OUTPUT_LOW     (PIN_SLPM_DIR_OUTPUT | PIN_SLPM_VAL_LOW)
 119#define PIN_SLPM_OUTPUT_HIGH    (PIN_SLPM_DIR_OUTPUT | PIN_SLPM_VAL_HIGH)
 120
 121#define PIN_CFG_DEFAULT         (0)
 122
 123#define PIN_CFG(num, alt)               \
 124        (PIN_CFG_DEFAULT |\
 125         (PIN_NUM(num) | PIN_##alt))
 126
 127#define PIN_CFG_INPUT(num, alt, pull)           \
 128        (PIN_CFG_DEFAULT |\
 129         (PIN_NUM(num) | PIN_##alt | PIN_INPUT_##pull))
 130
 131#define PIN_CFG_OUTPUT(num, alt, val)           \
 132        (PIN_CFG_DEFAULT |\
 133         (PIN_NUM(num) | PIN_##alt | PIN_OUTPUT_##val))
 134
 135extern int nmk_config_pin(pin_cfg_t cfg, bool sleep);
 136extern int nmk_config_pins(pin_cfg_t *cfgs, int num);
 137extern int nmk_config_pins_sleep(pin_cfg_t *cfgs, int num);
 138
 139#endif
 140
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.