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 active-low */ 20 #define GPIOF_ACTIVE_LOW (1 << 2) 21 22 /* Gpio pin is open drain */ 23 #define GPIOF_OPEN_DRAIN (1 << 3) 24 25 /* Gpio pin is open source */ 26 #define GPIOF_OPEN_SOURCE (1 << 4) 27 28 #define GPIOF_EXPORT (1 << 5) 29 #define GPIOF_EXPORT_CHANGEABLE (1 << 6) 30 #define GPIOF_EXPORT_DIR_FIXED (GPIOF_EXPORT) 31 #define GPIOF_EXPORT_DIR_CHANGEABLE (GPIOF_EXPORT | GPIOF_EXPORT_CHANGEABLE) 32 33 /** 34 * struct gpio - a structure describing a GPIO with configuration 35 * @gpio: the GPIO number 36 * @flags: GPIO configuration as specified by GPIOF_* 37 * @label: a literal description string of this GPIO 38 */ 39 struct gpio { 40 unsigned gpio; 41 unsigned long flags; 42 const char *label; 43 }; 44 45 #ifdef CONFIG_GPIOLIB 46 47 #ifdef CONFIG_ARCH_HAVE_CUSTOM_GPIO_H 48 #include <asm/gpio.h> 49 #else 50 51 #include <asm-generic/gpio.h> 52 53 static inline int gpio_get_value(unsigned int gpio) 54 { 55 return __gpio_get_value(gpio); 56 } 57 58 static inline void gpio_set_value(unsigned int gpio, int value) 59 { 60 __gpio_set_value(gpio, value); 61 } 62 63 static inline int gpio_cansleep(unsigned int gpio) 64 { 65 return __gpio_cansleep(gpio); 66 } 67 68 static inline int gpio_to_irq(unsigned int gpio) 69 { 70 return __gpio_to_irq(gpio); 71 } 72 73 static inline int irq_to_gpio(unsigned int irq) 74 { 75 return -EINVAL; 76 } 77 78 #endif /* ! CONFIG_ARCH_HAVE_CUSTOM_GPIO_H */ 79 80 /* CONFIG_GPIOLIB: bindings for managed devices that want to request gpios */ 81 82 struct device; 83 84 int devm_gpio_request(struct device *dev, unsigned gpio, const char *label); 85 int devm_gpio_request_one(struct device *dev, unsigned gpio, 86 unsigned long flags, const char *label); 87 void devm_gpio_free(struct device *dev, unsigned int gpio); 88 89 #else /* ! CONFIG_GPIOLIB */ 90 91 #include <linux/kernel.h> 92 #include <linux/types.h> 93 #include <linux/errno.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 int gpio_sysfs_set_active_low(unsigned gpio, int value) 201 { 202 /* GPIO can never have been requested */ 203 WARN_ON(1); 204 return -EINVAL; 205 } 206 207 static inline void gpio_unexport(unsigned gpio) 208 { 209 /* GPIO can never have been exported */ 210 WARN_ON(1); 211 } 212 213 static inline int gpio_to_irq(unsigned gpio) 214 { 215 /* GPIO can never have been requested or set as input */ 216 WARN_ON(1); 217 return -EINVAL; 218 } 219 220 static inline int gpio_lock_as_irq(struct gpio_chip *chip, unsigned int offset) 221 { 222 WARN_ON(1); 223 return -EINVAL; 224 } 225 226 static inline void gpio_unlock_as_irq(struct gpio_chip *chip, 227 unsigned int offset) 228 { 229 WARN_ON(1); 230 } 231 232 static inline int irq_to_gpio(unsigned irq) 233 { 234 /* irq can never have been returned from gpio_to_irq() */ 235 WARN_ON(1); 236 return -EINVAL; 237 } 238 239 static inline int 240 gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name, 241 unsigned int gpio_offset, unsigned int pin_offset, 242 unsigned int npins) 243 { 244 WARN_ON(1); 245 return -EINVAL; 246 } 247 248 static inline int 249 gpiochip_add_pingroup_range(struct gpio_chip *chip, 250 struct pinctrl_dev *pctldev, 251 unsigned int gpio_offset, const char *pin_group) 252 { 253 WARN_ON(1); 254 return -EINVAL; 255 } 256 257 static inline void 258 gpiochip_remove_pin_ranges(struct gpio_chip *chip) 259 { 260 WARN_ON(1); 261 } 262 263 static inline int devm_gpio_request(struct device *dev, unsigned gpio, 264 const char *label) 265 { 266 WARN_ON(1); 267 return -EINVAL; 268 } 269 270 static inline int devm_gpio_request_one(struct device *dev, unsigned gpio, 271 unsigned long flags, const char *label) 272 { 273 WARN_ON(1); 274 return -EINVAL; 275 } 276 277 static inline void devm_gpio_free(struct device *dev, unsigned int gpio) 278 { 279 WARN_ON(1); 280 } 281 282 #endif /* ! CONFIG_GPIOLIB */ 283 284 #endif /* __LINUX_GPIO_H */ 285