linux/include/linux/gpio.h
<<
>>
Prefs
   1#ifndef __LINUX_GPIO_H
   2#define __LINUX_GPIO_H
   3
   4#include <linux/errno.h>
   5
   6/* see Documentation/gpio.txt */
   7
   8/* make these flag values available regardless of GPIO kconfig options */
   9#define GPIOF_DIR_OUT   (0 << 0)
  10#define GPIOF_DIR_IN    (1 << 0)
  11
  12#define GPIOF_INIT_LOW  (0 << 1)
  13#define GPIOF_INIT_HIGH (1 << 1)
  14
  15#define GPIOF_IN                (GPIOF_DIR_IN)
  16#define GPIOF_OUT_INIT_LOW      (GPIOF_DIR_OUT | GPIOF_INIT_LOW)
  17#define GPIOF_OUT_INIT_HIGH     (GPIOF_DIR_OUT | GPIOF_INIT_HIGH)
  18
  19/* Gpio pin is open drain */
  20#define GPIOF_OPEN_DRAIN        (1 << 2)
  21
  22/* Gpio pin is open source */
  23#define GPIOF_OPEN_SOURCE       (1 << 3)
  24
  25#define GPIOF_EXPORT            (1 << 4)
  26#define GPIOF_EXPORT_CHANGEABLE (1 << 5)
  27#define GPIOF_EXPORT_DIR_FIXED  (GPIOF_EXPORT)
  28#define GPIOF_EXPORT_DIR_CHANGEABLE (GPIOF_EXPORT | GPIOF_EXPORT_CHANGEABLE)
  29
  30/**
  31 * struct gpio - a structure describing a GPIO with configuration
  32 * @gpio:       the GPIO number
  33 * @flags:      GPIO configuration as specified by GPIOF_*
  34 * @label:      a literal description string of this GPIO
  35 */
  36struct gpio {
  37        unsigned        gpio;
  38        unsigned long   flags;
  39        const char      *label;
  40};
  41
  42#ifdef CONFIG_GPIOLIB
  43
  44#ifdef CONFIG_ARCH_HAVE_CUSTOM_GPIO_H
  45#include <asm/gpio.h>
  46#else
  47
  48#include <asm-generic/gpio.h>
  49
  50static inline int gpio_get_value(unsigned int gpio)
  51{
  52        return __gpio_get_value(gpio);
  53}
  54
  55static inline void gpio_set_value(unsigned int gpio, int value)
  56{
  57        __gpio_set_value(gpio, value);
  58}
  59
  60static inline int gpio_cansleep(unsigned int gpio)
  61{
  62        return __gpio_cansleep(gpio);
  63}
  64
  65static inline int gpio_to_irq(unsigned int gpio)
  66{
  67        return __gpio_to_irq(gpio);
  68}
  69
  70static inline int irq_to_gpio(unsigned int irq)
  71{
  72        return -EINVAL;
  73}
  74
  75#endif /* ! CONFIG_ARCH_HAVE_CUSTOM_GPIO_H */
  76
  77#else /* ! CONFIG_GPIOLIB */
  78
  79#include <linux/kernel.h>
  80#include <linux/types.h>
  81#include <linux/errno.h>
  82#include <linux/bug.h>
  83
  84struct device;
  85struct gpio_chip;
  86
  87static inline bool gpio_is_valid(int number)
  88{
  89        return false;
  90}
  91
  92static inline int gpio_request(unsigned gpio, const char *label)
  93{
  94        return -ENOSYS;
  95}
  96
  97static inline int gpio_request_one(unsigned gpio,
  98                                        unsigned long flags, const char *label)
  99{
 100        return -ENOSYS;
 101}
 102
 103static inline int gpio_request_array(const struct gpio *array, size_t num)
 104{
 105        return -ENOSYS;
 106}
 107
 108static inline void gpio_free(unsigned gpio)
 109{
 110        might_sleep();
 111
 112        /* GPIO can never have been requested */
 113        WARN_ON(1);
 114}
 115
 116static inline void gpio_free_array(const struct gpio *array, size_t num)
 117{
 118        might_sleep();
 119
 120        /* GPIO can never have been requested */
 121        WARN_ON(1);
 122}
 123
 124static inline int gpio_direction_input(unsigned gpio)
 125{
 126        return -ENOSYS;
 127}
 128
 129static inline int gpio_direction_output(unsigned gpio, int value)
 130{
 131        return -ENOSYS;
 132}
 133
 134static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
 135{
 136        return -ENOSYS;
 137}
 138
 139static inline int gpio_get_value(unsigned gpio)
 140{
 141        /* GPIO can never have been requested or set as {in,out}put */
 142        WARN_ON(1);
 143        return 0;
 144}
 145
 146static inline void gpio_set_value(unsigned gpio, int value)
 147{
 148        /* GPIO can never have been requested or set as output */
 149        WARN_ON(1);
 150}
 151
 152static inline int gpio_cansleep(unsigned gpio)
 153{
 154        /* GPIO can never have been requested or set as {in,out}put */
 155        WARN_ON(1);
 156        return 0;
 157}
 158
 159static inline int gpio_get_value_cansleep(unsigned gpio)
 160{
 161        /* GPIO can never have been requested or set as {in,out}put */
 162        WARN_ON(1);
 163        return 0;
 164}
 165
 166static inline void gpio_set_value_cansleep(unsigned gpio, int value)
 167{
 168        /* GPIO can never have been requested or set as output */
 169        WARN_ON(1);
 170}
 171
 172static inline int gpio_export(unsigned gpio, bool direction_may_change)
 173{
 174        /* GPIO can never have been requested or set as {in,out}put */
 175        WARN_ON(1);
 176        return -EINVAL;
 177}
 178
 179static inline int gpio_export_link(struct device *dev, const char *name,
 180                                unsigned gpio)
 181{
 182        /* GPIO can never have been exported */
 183        WARN_ON(1);
 184        return -EINVAL;
 185}
 186
 187static inline int gpio_sysfs_set_active_low(unsigned gpio, int value)
 188{
 189        /* GPIO can never have been requested */
 190        WARN_ON(1);
 191        return -EINVAL;
 192}
 193
 194static inline void gpio_unexport(unsigned gpio)
 195{
 196        /* GPIO can never have been exported */
 197        WARN_ON(1);
 198}
 199
 200static inline int gpio_to_irq(unsigned gpio)
 201{
 202        /* GPIO can never have been requested or set as input */
 203        WARN_ON(1);
 204        return -EINVAL;
 205}
 206
 207static inline int irq_to_gpio(unsigned irq)
 208{
 209        /* irq can never have been returned from gpio_to_irq() */
 210        WARN_ON(1);
 211        return -EINVAL;
 212}
 213
 214static inline int
 215gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
 216                       unsigned int gpio_offset, unsigned int pin_offset,
 217                       unsigned int npins)
 218{
 219        WARN_ON(1);
 220        return -EINVAL;
 221}
 222
 223static inline void
 224gpiochip_remove_pin_ranges(struct gpio_chip *chip)
 225{
 226        WARN_ON(1);
 227}
 228
 229#endif /* ! CONFIG_GPIOLIB */
 230
 231struct device;
 232
 233/* bindings for managed devices that want to request gpios */
 234int devm_gpio_request(struct device *dev, unsigned gpio, const char *label);
 235int devm_gpio_request_one(struct device *dev, unsigned gpio,
 236                          unsigned long flags, const char *label);
 237void devm_gpio_free(struct device *dev, unsigned int gpio);
 238
 239#endif /* __LINUX_GPIO_H */
 240