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