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