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 */ 40 struct 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 54 static inline int gpio_get_value(unsigned int gpio) 55 { 56 return __gpio_get_value(gpio); 57 } 58 59 static inline void gpio_set_value(unsigned int gpio, int value) 60 { 61 __gpio_set_value(gpio, value); 62 } 63 64 static inline int gpio_cansleep(unsigned int gpio) 65 { 66 return __gpio_cansleep(gpio); 67 } 68 69 static inline int gpio_to_irq(unsigned int gpio) 70 { 71 return __gpio_to_irq(gpio); 72 } 73 74 static 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 83 struct device; 84 85 int devm_gpio_request(struct device *dev, unsigned gpio, const char *label); 86 int devm_gpio_request_one(struct device *dev, unsigned gpio, 87 unsigned long flags, const char *label); 88 void 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 97 struct device; 98 struct gpio_chip; 99 100 static inline bool gpio_is_valid(int number) 101 { 102 return false; 103 } 104 105 static inline int gpio_request(unsigned gpio, const char *label) 106 { 107 return -ENOSYS; 108 } 109 110 static inline int gpio_request_one(unsigned gpio, 111 unsigned long flags, const char *label) 112 { 113 return -ENOSYS; 114 } 115 116 static inline int gpio_request_array(const struct gpio *array, size_t num) 117 { 118 return -ENOSYS; 119 } 120 121 static inline void gpio_free(unsigned gpio) 122 { 123 might_sleep(); 124 125 /* GPIO can never have been requested */ 126 WARN_ON(1); 127 } 128 129 static 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 137 static inline int gpio_direction_input(unsigned gpio) 138 { 139 return -ENOSYS; 140 } 141 142 static inline int gpio_direction_output(unsigned gpio, int value) 143 { 144 return -ENOSYS; 145 } 146 147 static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) 148 { 149 return -ENOSYS; 150 } 151 152 static 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 159 static 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 165 static 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 172 static 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 179 static 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 185 static 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 192 static 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 200 static inline void gpio_unexport(unsigned gpio) 201 { 202 /* GPIO can never have been exported */ 203 WARN_ON(1); 204 } 205 206 static 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 213 static inline int gpiochip_lock_as_irq(struct gpio_chip *chip, 214 unsigned int offset) 215 { 216 WARN_ON(1); 217 return -EINVAL; 218 } 219 220 static inline void gpiochip_unlock_as_irq(struct gpio_chip *chip, 221 unsigned int offset) 222 { 223 WARN_ON(1); 224 } 225 226 static 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 233 static inline int 234 gpiochip_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 242 static inline int 243 gpiochip_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 251 static inline void 252 gpiochip_remove_pin_ranges(struct gpio_chip *chip) 253 { 254 WARN_ON(1); 255 } 256 257 static inline int devm_gpio_request(struct device *dev, unsigned gpio, 258 const char *label) 259 { 260 WARN_ON(1); 261 return -EINVAL; 262 } 263 264 static 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 271 static 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 */ 279