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
 106struct device;
 107struct gpio_chip;
 108
 109static inline bool gpio_is_valid(int number)
 110{
 111        return false;
 112}
 113
 114static inline int gpio_request(unsigned gpio, const char *label)
 115{
 116        return -ENOSYS;
 117}
 118
 119static inline int gpio_request_one(unsigned gpio,
 120                                        unsigned long flags, const char *label)
 121{
 122        return -ENOSYS;
 123}
 124
 125static inline int gpio_request_array(const struct gpio *array, size_t num)
 126{
 127        return -ENOSYS;
 128}
 129
 130static inline void gpio_free(unsigned gpio)
 131{
 132        might_sleep();
 133
 134        /* GPIO can never have been requested */
 135        WARN_ON(1);
 136}
 137
 138static inline void gpio_free_array(const struct gpio *array, size_t num)
 139{
 140        might_sleep();
 141
 142        /* GPIO can never have been requested */
 143        WARN_ON(1);
 144}
 145
 146static inline int gpio_direction_input(unsigned gpio)
 147{
 148        return -ENOSYS;
 149}
 150
 151static inline int gpio_direction_output(unsigned gpio, int value)
 152{
 153        return -ENOSYS;
 154}
 155
 156static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
 157{
 158        return -ENOSYS;
 159}
 160
 161static inline int gpio_get_value(unsigned gpio)
 162{
 163        /* GPIO can never have been requested or set as {in,out}put */
 164        WARN_ON(1);
 165        return 0;
 166}
 167
 168static inline void gpio_set_value(unsigned gpio, int value)
 169{
 170        /* GPIO can never have been requested or set as output */
 171        WARN_ON(1);
 172}
 173
 174static inline int gpio_cansleep(unsigned gpio)
 175{
 176        /* GPIO can never have been requested or set as {in,out}put */
 177        WARN_ON(1);
 178        return 0;
 179}
 180
 181static inline int gpio_get_value_cansleep(unsigned gpio)
 182{
 183        /* GPIO can never have been requested or set as {in,out}put */
 184        WARN_ON(1);
 185        return 0;
 186}
 187
 188static inline void gpio_set_value_cansleep(unsigned gpio, int value)
 189{
 190        /* GPIO can never have been requested or set as output */
 191        WARN_ON(1);
 192}
 193
 194static inline int gpio_export(unsigned gpio, bool direction_may_change)
 195{
 196        /* GPIO can never have been requested or set as {in,out}put */
 197        WARN_ON(1);
 198        return -EINVAL;
 199}
 200
 201static inline int gpio_export_link(struct device *dev, const char *name,
 202                                unsigned gpio)
 203{
 204        /* GPIO can never have been exported */
 205        WARN_ON(1);
 206        return -EINVAL;
 207}
 208
 209static inline void gpio_unexport(unsigned gpio)
 210{
 211        /* GPIO can never have been exported */
 212        WARN_ON(1);
 213}
 214
 215static inline int gpio_to_irq(unsigned gpio)
 216{
 217        /* GPIO can never have been requested or set as input */
 218        WARN_ON(1);
 219        return -EINVAL;
 220}
 221
 222static inline int irq_to_gpio(unsigned irq)
 223{
 224        /* irq can never have been returned from gpio_to_irq() */
 225        WARN_ON(1);
 226        return -EINVAL;
 227}
 228
 229static inline int devm_gpio_request(struct device *dev, unsigned gpio,
 230                                    const char *label)
 231{
 232        WARN_ON(1);
 233        return -EINVAL;
 234}
 235
 236static inline int devm_gpio_request_one(struct device *dev, unsigned gpio,
 237                                        unsigned long flags, const char *label)
 238{
 239        WARN_ON(1);
 240        return -EINVAL;
 241}
 242
 243static inline void devm_gpio_free(struct device *dev, unsigned int gpio)
 244{
 245        WARN_ON(1);
 246}
 247
 248#endif /* ! CONFIG_GPIOLIB */
 249
 250#endif /* __LINUX_GPIO_H */
 251