linux/arch/blackfin/include/asm/gpio.h
<<
>>
Prefs
   1/*
   2 * Copyright 2006-2009 Analog Devices Inc.
   3 *
   4 * Licensed under the GPL-2 or later.
   5 */
   6
   7#ifndef __ARCH_BLACKFIN_GPIO_H__
   8#define __ARCH_BLACKFIN_GPIO_H__
   9
  10#define gpio_bank(x)    ((x) >> 4)
  11#define gpio_bit(x)     (1<<((x) & 0xF))
  12#define gpio_sub_n(x)   ((x) & 0xF)
  13
  14#define GPIO_BANKSIZE   16
  15#define GPIO_BANK_NUM   DIV_ROUND_UP(MAX_BLACKFIN_GPIOS, GPIO_BANKSIZE)
  16
  17#include <mach/gpio.h>
  18
  19#define GPIO_0  0
  20#define GPIO_1  1
  21#define GPIO_2  2
  22#define GPIO_3  3
  23#define GPIO_4  4
  24#define GPIO_5  5
  25#define GPIO_6  6
  26#define GPIO_7  7
  27#define GPIO_8  8
  28#define GPIO_9  9
  29#define GPIO_10 10
  30#define GPIO_11 11
  31#define GPIO_12 12
  32#define GPIO_13 13
  33#define GPIO_14 14
  34#define GPIO_15 15
  35#define GPIO_16 16
  36#define GPIO_17 17
  37#define GPIO_18 18
  38#define GPIO_19 19
  39#define GPIO_20 20
  40#define GPIO_21 21
  41#define GPIO_22 22
  42#define GPIO_23 23
  43#define GPIO_24 24
  44#define GPIO_25 25
  45#define GPIO_26 26
  46#define GPIO_27 27
  47#define GPIO_28 28
  48#define GPIO_29 29
  49#define GPIO_30 30
  50#define GPIO_31 31
  51#define GPIO_32 32
  52#define GPIO_33 33
  53#define GPIO_34 34
  54#define GPIO_35 35
  55#define GPIO_36 36
  56#define GPIO_37 37
  57#define GPIO_38 38
  58#define GPIO_39 39
  59#define GPIO_40 40
  60#define GPIO_41 41
  61#define GPIO_42 42
  62#define GPIO_43 43
  63#define GPIO_44 44
  64#define GPIO_45 45
  65#define GPIO_46 46
  66#define GPIO_47 47
  67
  68#define PERIPHERAL_USAGE 1
  69#define GPIO_USAGE 0
  70
  71#ifndef __ASSEMBLY__
  72
  73#include <linux/compiler.h>
  74
  75/***********************************************************
  76*
  77* FUNCTIONS: Blackfin General Purpose Ports Access Functions
  78*
  79* INPUTS/OUTPUTS:
  80* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
  81*
  82*
  83* DESCRIPTION: These functions abstract direct register access
  84*              to Blackfin processor General Purpose
  85*              Ports Regsiters
  86*
  87* CAUTION: These functions do not belong to the GPIO Driver API
  88*************************************************************
  89* MODIFICATION HISTORY :
  90**************************************************************/
  91
  92#ifndef CONFIG_BF54x
  93void set_gpio_dir(unsigned, unsigned short);
  94void set_gpio_inen(unsigned, unsigned short);
  95void set_gpio_polar(unsigned, unsigned short);
  96void set_gpio_edge(unsigned, unsigned short);
  97void set_gpio_both(unsigned, unsigned short);
  98void set_gpio_data(unsigned, unsigned short);
  99void set_gpio_maska(unsigned, unsigned short);
 100void set_gpio_maskb(unsigned, unsigned short);
 101void set_gpio_toggle(unsigned);
 102void set_gpiop_dir(unsigned, unsigned short);
 103void set_gpiop_inen(unsigned, unsigned short);
 104void set_gpiop_polar(unsigned, unsigned short);
 105void set_gpiop_edge(unsigned, unsigned short);
 106void set_gpiop_both(unsigned, unsigned short);
 107void set_gpiop_data(unsigned, unsigned short);
 108void set_gpiop_maska(unsigned, unsigned short);
 109void set_gpiop_maskb(unsigned, unsigned short);
 110unsigned short get_gpio_dir(unsigned);
 111unsigned short get_gpio_inen(unsigned);
 112unsigned short get_gpio_polar(unsigned);
 113unsigned short get_gpio_edge(unsigned);
 114unsigned short get_gpio_both(unsigned);
 115unsigned short get_gpio_maska(unsigned);
 116unsigned short get_gpio_maskb(unsigned);
 117unsigned short get_gpio_data(unsigned);
 118unsigned short get_gpiop_dir(unsigned);
 119unsigned short get_gpiop_inen(unsigned);
 120unsigned short get_gpiop_polar(unsigned);
 121unsigned short get_gpiop_edge(unsigned);
 122unsigned short get_gpiop_both(unsigned);
 123unsigned short get_gpiop_maska(unsigned);
 124unsigned short get_gpiop_maskb(unsigned);
 125unsigned short get_gpiop_data(unsigned);
 126
 127struct gpio_port_t {
 128        unsigned short data;
 129        unsigned short dummy1;
 130        unsigned short data_clear;
 131        unsigned short dummy2;
 132        unsigned short data_set;
 133        unsigned short dummy3;
 134        unsigned short toggle;
 135        unsigned short dummy4;
 136        unsigned short maska;
 137        unsigned short dummy5;
 138        unsigned short maska_clear;
 139        unsigned short dummy6;
 140        unsigned short maska_set;
 141        unsigned short dummy7;
 142        unsigned short maska_toggle;
 143        unsigned short dummy8;
 144        unsigned short maskb;
 145        unsigned short dummy9;
 146        unsigned short maskb_clear;
 147        unsigned short dummy10;
 148        unsigned short maskb_set;
 149        unsigned short dummy11;
 150        unsigned short maskb_toggle;
 151        unsigned short dummy12;
 152        unsigned short dir;
 153        unsigned short dummy13;
 154        unsigned short polar;
 155        unsigned short dummy14;
 156        unsigned short edge;
 157        unsigned short dummy15;
 158        unsigned short both;
 159        unsigned short dummy16;
 160        unsigned short inen;
 161};
 162#endif
 163
 164#ifdef BFIN_SPECIAL_GPIO_BANKS
 165void bfin_special_gpio_free(unsigned gpio);
 166int bfin_special_gpio_request(unsigned gpio, const char *label);
 167#endif
 168
 169#ifdef CONFIG_PM
 170int bfin_pm_standby_ctrl(unsigned ctrl);
 171
 172static inline int bfin_pm_standby_setup(void)
 173{
 174        return bfin_pm_standby_ctrl(1);
 175}
 176
 177static inline void bfin_pm_standby_restore(void)
 178{
 179        bfin_pm_standby_ctrl(0);
 180}
 181
 182void bfin_gpio_pm_hibernate_restore(void);
 183void bfin_gpio_pm_hibernate_suspend(void);
 184
 185#ifndef CONFIG_BF54x
 186int gpio_pm_wakeup_ctrl(unsigned gpio, unsigned ctrl);
 187
 188struct gpio_port_s {
 189        unsigned short data;
 190        unsigned short maska;
 191        unsigned short maskb;
 192        unsigned short dir;
 193        unsigned short polar;
 194        unsigned short edge;
 195        unsigned short both;
 196        unsigned short inen;
 197
 198        unsigned short fer;
 199        unsigned short reserved;
 200        unsigned short mux;
 201};
 202#endif /*CONFIG_BF54x*/
 203#endif /*CONFIG_PM*/
 204/***********************************************************
 205*
 206* FUNCTIONS: Blackfin GPIO Driver
 207*
 208* INPUTS/OUTPUTS:
 209* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
 210*
 211*
 212* DESCRIPTION: Blackfin GPIO Driver API
 213*
 214* CAUTION:
 215*************************************************************
 216* MODIFICATION HISTORY :
 217**************************************************************/
 218
 219int bfin_gpio_request(unsigned gpio, const char *label);
 220void bfin_gpio_free(unsigned gpio);
 221int bfin_gpio_irq_request(unsigned gpio, const char *label);
 222void bfin_gpio_irq_free(unsigned gpio);
 223int bfin_gpio_direction_input(unsigned gpio);
 224int bfin_gpio_direction_output(unsigned gpio, int value);
 225int bfin_gpio_get_value(unsigned gpio);
 226void bfin_gpio_set_value(unsigned gpio, int value);
 227
 228#include <asm/irq.h>
 229#include <asm/errno.h>
 230
 231#ifdef CONFIG_GPIOLIB
 232#include <asm-generic/gpio.h>           /* cansleep wrappers */
 233
 234static inline int gpio_get_value(unsigned int gpio)
 235{
 236        if (gpio < MAX_BLACKFIN_GPIOS)
 237                return bfin_gpio_get_value(gpio);
 238        else
 239                return __gpio_get_value(gpio);
 240}
 241
 242static inline void gpio_set_value(unsigned int gpio, int value)
 243{
 244        if (gpio < MAX_BLACKFIN_GPIOS)
 245                bfin_gpio_set_value(gpio, value);
 246        else
 247                __gpio_set_value(gpio, value);
 248}
 249
 250static inline int gpio_cansleep(unsigned int gpio)
 251{
 252        return __gpio_cansleep(gpio);
 253}
 254
 255static inline int gpio_to_irq(unsigned gpio)
 256{
 257        return __gpio_to_irq(gpio);
 258}
 259
 260#else /* !CONFIG_GPIOLIB */
 261
 262static inline int gpio_request(unsigned gpio, const char *label)
 263{
 264        return bfin_gpio_request(gpio, label);
 265}
 266
 267static inline void gpio_free(unsigned gpio)
 268{
 269        return bfin_gpio_free(gpio);
 270}
 271
 272static inline int gpio_direction_input(unsigned gpio)
 273{
 274        return bfin_gpio_direction_input(gpio);
 275}
 276
 277static inline int gpio_direction_output(unsigned gpio, int value)
 278{
 279        return bfin_gpio_direction_output(gpio, value);
 280}
 281
 282static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
 283{
 284        return -EINVAL;
 285}
 286
 287static inline int gpio_get_value(unsigned gpio)
 288{
 289        return bfin_gpio_get_value(gpio);
 290}
 291
 292static inline void gpio_set_value(unsigned gpio, int value)
 293{
 294        return bfin_gpio_set_value(gpio, value);
 295}
 296
 297static inline int gpio_to_irq(unsigned gpio)
 298{
 299        if (likely(gpio < MAX_BLACKFIN_GPIOS))
 300                return gpio + GPIO_IRQ_BASE;
 301
 302        return -EINVAL;
 303}
 304
 305#include <asm-generic/gpio.h>           /* cansleep wrappers */
 306#endif  /* !CONFIG_GPIOLIB */
 307
 308static inline int irq_to_gpio(unsigned irq)
 309{
 310        return (irq - GPIO_IRQ_BASE);
 311}
 312
 313#endif /* __ASSEMBLY__ */
 314
 315#endif /* __ARCH_BLACKFIN_GPIO_H__ */
 316