linux/include/linux/mfd/wm8350/gpio.h
<<
>>
Prefs
   1/*
   2 * gpio.h  --  GPIO Driver for Wolfson WM8350 PMIC
   3 *
   4 * Copyright 2007 Wolfson Microelectronics PLC
   5 *
   6 *  This program is free software; you can redistribute  it and/or modify it
   7 *  under  the terms of  the GNU General  Public License as published by the
   8 *  Free Software Foundation;  either version 2 of the  License, or (at your
   9 *  option) any later version.
  10 *
  11 */
  12
  13#ifndef __LINUX_MFD_WM8350_GPIO_H_
  14#define __LINUX_MFD_WM8350_GPIO_H_
  15
  16#include <linux/platform_device.h>
  17
  18/*
  19 * GPIO Registers.
  20 */
  21#define WM8350_GPIO_DEBOUNCE                    0x80
  22#define WM8350_GPIO_PIN_PULL_UP_CONTROL         0x81
  23#define WM8350_GPIO_PULL_DOWN_CONTROL           0x82
  24#define WM8350_GPIO_INT_MODE                    0x83
  25#define WM8350_GPIO_CONTROL                     0x85
  26#define WM8350_GPIO_CONFIGURATION_I_O           0x86
  27#define WM8350_GPIO_PIN_POLARITY_TYPE           0x87
  28#define WM8350_GPIO_FUNCTION_SELECT_1           0x8C
  29#define WM8350_GPIO_FUNCTION_SELECT_2           0x8D
  30#define WM8350_GPIO_FUNCTION_SELECT_3           0x8E
  31#define WM8350_GPIO_FUNCTION_SELECT_4           0x8F
  32#define WM8350_GPIO_LEVEL                       0xE6
  33
  34/*
  35 * GPIO Functions
  36 */
  37#define WM8350_GPIO0_GPIO_IN                    0x0
  38#define WM8350_GPIO0_GPIO_OUT                   0x0
  39#define WM8350_GPIO0_PWR_ON_IN                  0x1
  40#define WM8350_GPIO0_PWR_ON_OUT                 0x1
  41#define WM8350_GPIO0_LDO_EN_IN                  0x2
  42#define WM8350_GPIO0_VRTC_OUT                   0x2
  43#define WM8350_GPIO0_LPWR1_IN                   0x3
  44#define WM8350_GPIO0_POR_B_OUT                  0x3
  45
  46#define WM8350_GPIO1_GPIO_IN                    0x0
  47#define WM8350_GPIO1_GPIO_OUT                   0x0
  48#define WM8350_GPIO1_PWR_ON_IN                  0x1
  49#define WM8350_GPIO1_DO_CONF_OUT                0x1
  50#define WM8350_GPIO1_LDO_EN_IN                  0x2
  51#define WM8350_GPIO1_RESET_OUT                  0x2
  52#define WM8350_GPIO1_LPWR2_IN                   0x3
  53#define WM8350_GPIO1_MEMRST_OUT                 0x3
  54
  55#define WM8350_GPIO2_GPIO_IN                    0x0
  56#define WM8350_GPIO2_GPIO_OUT                   0x0
  57#define WM8350_GPIO2_PWR_ON_IN                  0x1
  58#define WM8350_GPIO2_PWR_ON_OUT                 0x1
  59#define WM8350_GPIO2_WAKE_UP_IN                 0x2
  60#define WM8350_GPIO2_VRTC_OUT                   0x2
  61#define WM8350_GPIO2_32KHZ_IN                   0x3
  62#define WM8350_GPIO2_32KHZ_OUT                  0x3
  63
  64#define WM8350_GPIO3_GPIO_IN                    0x0
  65#define WM8350_GPIO3_GPIO_OUT                   0x0
  66#define WM8350_GPIO3_PWR_ON_IN                  0x1
  67#define WM8350_GPIO3_P_CLK_OUT                  0x1
  68#define WM8350_GPIO3_LDO_EN_IN                  0x2
  69#define WM8350_GPIO3_VRTC_OUT                   0x2
  70#define WM8350_GPIO3_PWR_OFF_IN                 0x3
  71#define WM8350_GPIO3_32KHZ_OUT                  0x3
  72
  73#define WM8350_GPIO4_GPIO_IN                    0x0
  74#define WM8350_GPIO4_GPIO_OUT                   0x0
  75#define WM8350_GPIO4_MR_IN                      0x1
  76#define WM8350_GPIO4_MEM_RST_OUT                0x1
  77#define WM8350_GPIO4_FLASH_IN                   0x2
  78#define WM8350_GPIO4_ADA_OUT                    0x2
  79#define WM8350_GPIO4_HIBERNATE_IN               0x3
  80#define WM8350_GPIO4_FLASH_OUT                  0x3
  81#define WM8350_GPIO4_MICDET_OUT                 0x4
  82#define WM8350_GPIO4_MICSHT_OUT                 0x5
  83
  84#define WM8350_GPIO5_GPIO_IN                    0x0
  85#define WM8350_GPIO5_GPIO_OUT                   0x0
  86#define WM8350_GPIO5_LPWR1_IN                   0x1
  87#define WM8350_GPIO5_P_CLK_OUT                  0x1
  88#define WM8350_GPIO5_ADCLRCLK_IN                0x2
  89#define WM8350_GPIO5_ADCLRCLK_OUT               0x2
  90#define WM8350_GPIO5_HIBERNATE_IN               0x3
  91#define WM8350_GPIO5_32KHZ_OUT                  0x3
  92#define WM8350_GPIO5_MICDET_OUT                 0x4
  93#define WM8350_GPIO5_MICSHT_OUT                 0x5
  94#define WM8350_GPIO5_ADA_OUT                    0x6
  95#define WM8350_GPIO5_OPCLK_OUT                  0x7
  96
  97#define WM8350_GPIO6_GPIO_IN                    0x0
  98#define WM8350_GPIO6_GPIO_OUT                   0x0
  99#define WM8350_GPIO6_LPWR2_IN                   0x1
 100#define WM8350_GPIO6_MEMRST_OUT                 0x1
 101#define WM8350_GPIO6_FLASH_IN                   0x2
 102#define WM8350_GPIO6_ADA_OUT                    0x2
 103#define WM8350_GPIO6_HIBERNATE_IN               0x3
 104#define WM8350_GPIO6_RTC_OUT                    0x3
 105#define WM8350_GPIO6_MICDET_OUT                 0x4
 106#define WM8350_GPIO6_MICSHT_OUT                 0x5
 107#define WM8350_GPIO6_ADCLRCLKB_OUT              0x6
 108#define WM8350_GPIO6_SDOUT_OUT                  0x7
 109
 110#define WM8350_GPIO7_GPIO_IN                    0x0
 111#define WM8350_GPIO7_GPIO_OUT                   0x0
 112#define WM8350_GPIO7_LPWR3_IN                   0x1
 113#define WM8350_GPIO7_P_CLK_OUT                  0x1
 114#define WM8350_GPIO7_MASK_IN                    0x2
 115#define WM8350_GPIO7_VCC_FAULT_OUT              0x2
 116#define WM8350_GPIO7_HIBERNATE_IN               0x3
 117#define WM8350_GPIO7_BATT_FAULT_OUT             0x3
 118#define WM8350_GPIO7_MICDET_OUT                 0x4
 119#define WM8350_GPIO7_MICSHT_OUT                 0x5
 120#define WM8350_GPIO7_ADA_OUT                    0x6
 121#define WM8350_GPIO7_CSB_IN                     0x7
 122
 123#define WM8350_GPIO8_GPIO_IN                    0x0
 124#define WM8350_GPIO8_GPIO_OUT                   0x0
 125#define WM8350_GPIO8_MR_IN                      0x1
 126#define WM8350_GPIO8_VCC_FAULT_OUT              0x1
 127#define WM8350_GPIO8_ADCBCLK_IN                 0x2
 128#define WM8350_GPIO8_ADCBCLK_OUT                0x2
 129#define WM8350_GPIO8_PWR_OFF_IN                 0x3
 130#define WM8350_GPIO8_BATT_FAULT_OUT             0x3
 131#define WM8350_GPIO8_ALTSCL_IN                  0xf
 132
 133#define WM8350_GPIO9_GPIO_IN                    0x0
 134#define WM8350_GPIO9_GPIO_OUT                   0x0
 135#define WM8350_GPIO9_HEARTBEAT_IN               0x1
 136#define WM8350_GPIO9_VCC_FAULT_OUT              0x1
 137#define WM8350_GPIO9_MASK_IN                    0x2
 138#define WM8350_GPIO9_LINE_GT_BATT_OUT           0x2
 139#define WM8350_GPIO9_PWR_OFF_IN                 0x3
 140#define WM8350_GPIO9_BATT_FAULT_OUT             0x3
 141#define WM8350_GPIO9_ALTSDA_OUT                 0xf
 142
 143#define WM8350_GPIO10_GPIO_IN                   0x0
 144#define WM8350_GPIO10_GPIO_OUT                  0x0
 145#define WM8350_GPIO10_ISINKC_OUT                0x1
 146#define WM8350_GPIO10_PWR_OFF_IN                0x2
 147#define WM8350_GPIO10_LINE_GT_BATT_OUT          0x2
 148#define WM8350_GPIO10_CHD_IND_IN                0x3
 149
 150#define WM8350_GPIO11_GPIO_IN                   0x0
 151#define WM8350_GPIO11_GPIO_OUT                  0x0
 152#define WM8350_GPIO11_ISINKD_OUT                0x1
 153#define WM8350_GPIO11_WAKEUP_IN                 0x2
 154#define WM8350_GPIO11_LINE_GT_BATT_OUT          0x2
 155#define WM8350_GPIO11_CHD_IND_IN                0x3
 156
 157#define WM8350_GPIO12_GPIO_IN                   0x0
 158#define WM8350_GPIO12_GPIO_OUT                  0x0
 159#define WM8350_GPIO12_ISINKE_OUT                0x1
 160#define WM8350_GPIO12_LINE_GT_BATT_OUT          0x2
 161#define WM8350_GPIO12_LINE_EN_OUT               0x3
 162#define WM8350_GPIO12_32KHZ_OUT                 0x4
 163
 164#define WM8350_GPIO_DIR_IN                      0
 165#define WM8350_GPIO_DIR_OUT                     1
 166#define WM8350_GPIO_ACTIVE_LOW                  0
 167#define WM8350_GPIO_ACTIVE_HIGH                 1
 168#define WM8350_GPIO_PULL_NONE                   0
 169#define WM8350_GPIO_PULL_UP                     1
 170#define WM8350_GPIO_PULL_DOWN                   2
 171#define WM8350_GPIO_INVERT_OFF                  0
 172#define WM8350_GPIO_INVERT_ON                   1
 173#define WM8350_GPIO_DEBOUNCE_OFF                0
 174#define WM8350_GPIO_DEBOUNCE_ON                 1
 175
 176/*
 177 * R30 (0x1E) - GPIO Interrupt Status
 178 */
 179#define WM8350_GP12_EINT                        0x1000
 180#define WM8350_GP11_EINT                        0x0800
 181#define WM8350_GP10_EINT                        0x0400
 182#define WM8350_GP9_EINT                         0x0200
 183#define WM8350_GP8_EINT                         0x0100
 184#define WM8350_GP7_EINT                         0x0080
 185#define WM8350_GP6_EINT                         0x0040
 186#define WM8350_GP5_EINT                         0x0020
 187#define WM8350_GP4_EINT                         0x0010
 188#define WM8350_GP3_EINT                         0x0008
 189#define WM8350_GP2_EINT                         0x0004
 190#define WM8350_GP1_EINT                         0x0002
 191#define WM8350_GP0_EINT                         0x0001
 192
 193
 194/*
 195 * R128 (0x80) - GPIO Debounce
 196 */
 197#define WM8350_GP12_DB                          0x1000
 198#define WM8350_GP11_DB                          0x0800
 199#define WM8350_GP10_DB                          0x0400
 200#define WM8350_GP9_DB                           0x0200
 201#define WM8350_GP8_DB                           0x0100
 202#define WM8350_GP7_DB                           0x0080
 203#define WM8350_GP6_DB                           0x0040
 204#define WM8350_GP5_DB                           0x0020
 205#define WM8350_GP4_DB                           0x0010
 206#define WM8350_GP3_DB                           0x0008
 207#define WM8350_GP2_DB                           0x0004
 208#define WM8350_GP1_DB                           0x0002
 209#define WM8350_GP0_DB                           0x0001
 210
 211/*
 212 * R129 (0x81) - GPIO Pin pull up Control
 213 */
 214#define WM8350_GP12_PU                          0x1000
 215#define WM8350_GP11_PU                          0x0800
 216#define WM8350_GP10_PU                          0x0400
 217#define WM8350_GP9_PU                           0x0200
 218#define WM8350_GP8_PU                           0x0100
 219#define WM8350_GP7_PU                           0x0080
 220#define WM8350_GP6_PU                           0x0040
 221#define WM8350_GP5_PU                           0x0020
 222#define WM8350_GP4_PU                           0x0010
 223#define WM8350_GP3_PU                           0x0008
 224#define WM8350_GP2_PU                           0x0004
 225#define WM8350_GP1_PU                           0x0002
 226#define WM8350_GP0_PU                           0x0001
 227
 228/*
 229 * R130 (0x82) - GPIO Pull down Control
 230 */
 231#define WM8350_GP12_PD                          0x1000
 232#define WM8350_GP11_PD                          0x0800
 233#define WM8350_GP10_PD                          0x0400
 234#define WM8350_GP9_PD                           0x0200
 235#define WM8350_GP8_PD                           0x0100
 236#define WM8350_GP7_PD                           0x0080
 237#define WM8350_GP6_PD                           0x0040
 238#define WM8350_GP5_PD                           0x0020
 239#define WM8350_GP4_PD                           0x0010
 240#define WM8350_GP3_PD                           0x0008
 241#define WM8350_GP2_PD                           0x0004
 242#define WM8350_GP1_PD                           0x0002
 243#define WM8350_GP0_PD                           0x0001
 244
 245/*
 246 * R131 (0x83) - GPIO Interrupt Mode
 247 */
 248#define WM8350_GP12_INTMODE                     0x1000
 249#define WM8350_GP11_INTMODE                     0x0800
 250#define WM8350_GP10_INTMODE                     0x0400
 251#define WM8350_GP9_INTMODE                      0x0200
 252#define WM8350_GP8_INTMODE                      0x0100
 253#define WM8350_GP7_INTMODE                      0x0080
 254#define WM8350_GP6_INTMODE                      0x0040
 255#define WM8350_GP5_INTMODE                      0x0020
 256#define WM8350_GP4_INTMODE                      0x0010
 257#define WM8350_GP3_INTMODE                      0x0008
 258#define WM8350_GP2_INTMODE                      0x0004
 259#define WM8350_GP1_INTMODE                      0x0002
 260#define WM8350_GP0_INTMODE                      0x0001
 261
 262/*
 263 * R133 (0x85) - GPIO Control
 264 */
 265#define WM8350_GP_DBTIME_MASK                   0x00C0
 266
 267/*
 268 * R134 (0x86) - GPIO Configuration (i/o)
 269 */
 270#define WM8350_GP12_DIR                         0x1000
 271#define WM8350_GP11_DIR                         0x0800
 272#define WM8350_GP10_DIR                         0x0400
 273#define WM8350_GP9_DIR                          0x0200
 274#define WM8350_GP8_DIR                          0x0100
 275#define WM8350_GP7_DIR                          0x0080
 276#define WM8350_GP6_DIR                          0x0040
 277#define WM8350_GP5_DIR                          0x0020
 278#define WM8350_GP4_DIR                          0x0010
 279#define WM8350_GP3_DIR                          0x0008
 280#define WM8350_GP2_DIR                          0x0004
 281#define WM8350_GP1_DIR                          0x0002
 282#define WM8350_GP0_DIR                          0x0001
 283
 284/*
 285 * R135 (0x87) - GPIO Pin Polarity / Type
 286 */
 287#define WM8350_GP12_CFG                         0x1000
 288#define WM8350_GP11_CFG                         0x0800
 289#define WM8350_GP10_CFG                         0x0400
 290#define WM8350_GP9_CFG                          0x0200
 291#define WM8350_GP8_CFG                          0x0100
 292#define WM8350_GP7_CFG                          0x0080
 293#define WM8350_GP6_CFG                          0x0040
 294#define WM8350_GP5_CFG                          0x0020
 295#define WM8350_GP4_CFG                          0x0010
 296#define WM8350_GP3_CFG                          0x0008
 297#define WM8350_GP2_CFG                          0x0004
 298#define WM8350_GP1_CFG                          0x0002
 299#define WM8350_GP0_CFG                          0x0001
 300
 301/*
 302 * R140 (0x8C) - GPIO Function Select 1
 303 */
 304#define WM8350_GP3_FN_MASK                      0xF000
 305#define WM8350_GP2_FN_MASK                      0x0F00
 306#define WM8350_GP1_FN_MASK                      0x00F0
 307#define WM8350_GP0_FN_MASK                      0x000F
 308
 309/*
 310 * R141 (0x8D) - GPIO Function Select 2
 311 */
 312#define WM8350_GP7_FN_MASK                      0xF000
 313#define WM8350_GP6_FN_MASK                      0x0F00
 314#define WM8350_GP5_FN_MASK                      0x00F0
 315#define WM8350_GP4_FN_MASK                      0x000F
 316
 317/*
 318 * R142 (0x8E) - GPIO Function Select 3
 319 */
 320#define WM8350_GP11_FN_MASK                     0xF000
 321#define WM8350_GP10_FN_MASK                     0x0F00
 322#define WM8350_GP9_FN_MASK                      0x00F0
 323#define WM8350_GP8_FN_MASK                      0x000F
 324
 325/*
 326 * R143 (0x8F) - GPIO Function Select 4
 327 */
 328#define WM8350_GP12_FN_MASK                     0x000F
 329
 330/*
 331 * R230 (0xE6) - GPIO Pin Status
 332 */
 333#define WM8350_GP12_LVL                         0x1000
 334#define WM8350_GP11_LVL                         0x0800
 335#define WM8350_GP10_LVL                         0x0400
 336#define WM8350_GP9_LVL                          0x0200
 337#define WM8350_GP8_LVL                          0x0100
 338#define WM8350_GP7_LVL                          0x0080
 339#define WM8350_GP6_LVL                          0x0040
 340#define WM8350_GP5_LVL                          0x0020
 341#define WM8350_GP4_LVL                          0x0010
 342#define WM8350_GP3_LVL                          0x0008
 343#define WM8350_GP2_LVL                          0x0004
 344#define WM8350_GP1_LVL                          0x0002
 345#define WM8350_GP0_LVL                          0x0001
 346
 347struct wm8350;
 348
 349int wm8350_gpio_config(struct wm8350 *wm8350, int gpio, int dir, int func,
 350                       int pol, int pull, int invert, int debounce);
 351
 352struct wm8350_gpio {
 353        struct platform_device *pdev;
 354};
 355
 356/*
 357 * GPIO Interrupts
 358 */
 359#define WM8350_IRQ_GPIO(x)                      (50 + x)
 360
 361#endif
 362