1 #ifndef __LINUX_GPIO_H 2 #define __LINUX_GPIO_H 3 4 #include <linux/errno.h> 5 6 /* see Documentation/gpio/gpio-legacy.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/bug.h> 94 #include <linux/pinctrl/pinctrl.h> 95 96 struct device; 97 struct gpio_chip; 98 99 static inline bool gpio_is_valid(int number) 100 { 101 return false; 102 } 103 104 static inline int gpio_request(unsigned gpio, const char *label) 105 { 106 return -ENOSYS; 107 } 108 109 static inline int gpio_request_one(unsigned gpio, 110 unsigned long flags, const char *label) 111 { 112 return -ENOSYS; 113 } 114 115 static inline int gpio_request_array(const struct gpio *array, size_t num) 116 { 117 return -ENOSYS; 118 } 119 120 static inline void gpio_free(unsigned gpio) 121 { 122 might_sleep(); 123 124 /* GPIO can never have been requested */ 125 WARN_ON(1); 126 } 127 128 static inline void gpio_free_array(const struct gpio *array, size_t num) 129 { 130 might_sleep(); 131 132 /* GPIO can never have been requested */ 133 WARN_ON(1); 134 } 135 136 static inline int gpio_direction_input(unsigned gpio) 137 { 138 return -ENOSYS; 139 } 140 141 static inline int gpio_direction_output(unsigned gpio, int value) 142 { 143 return -ENOSYS; 144 } 145 146 static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) 147 { 148 return -ENOSYS; 149 } 150 151 static inline int gpio_get_value(unsigned gpio) 152 { 153 /* GPIO can never have been requested or set as {in,out}put */ 154 WARN_ON(1); 155 return 0; 156 } 157 158 static inline void gpio_set_value(unsigned gpio, int value) 159 { 160 /* GPIO can never have been requested or set as output */ 161 WARN_ON(1); 162 } 163 164 static inline int gpio_cansleep(unsigned gpio) 165 { 166 /* GPIO can never have been requested or set as {in,out}put */ 167 WARN_ON(1); 168 return 0; 169 } 170 171 static inline int gpio_get_value_cansleep(unsigned gpio) 172 { 173 /* GPIO can never have been requested or set as {in,out}put */ 174 WARN_ON(1); 175 return 0; 176 } 177 178 static inline void gpio_set_value_cansleep(unsigned gpio, int value) 179 { 180 /* GPIO can never have been requested or set as output */ 181 WARN_ON(1); 182 } 183 184 static inline int gpio_export(unsigned gpio, bool direction_may_change) 185 { 186 /* GPIO can never have been requested or set as {in,out}put */ 187 WARN_ON(1); 188 return -EINVAL; 189 } 190 191 static inline int gpio_export_link(struct device *dev, const char *name, 192 unsigned gpio) 193 { 194 /* GPIO can never have been exported */ 195 WARN_ON(1); 196 return -EINVAL; 197 } 198 199 static inline void gpio_unexport(unsigned gpio) 200 { 201 /* GPIO can never have been exported */ 202 WARN_ON(1); 203 } 204 205 static inline int gpio_to_irq(unsigned gpio) 206 { 207 /* GPIO can never have been requested or set as input */ 208 WARN_ON(1); 209 return -EINVAL; 210 } 211 212 static inline int gpiochip_lock_as_irq(struct gpio_chip *chip, 213 unsigned int offset) 214 { 215 WARN_ON(1); 216 return -EINVAL; 217 } 218 219 static inline void gpiochip_unlock_as_irq(struct gpio_chip *chip, 220 unsigned int offset) 221 { 222 WARN_ON(1); 223 } 224 225 static inline int irq_to_gpio(unsigned irq) 226 { 227 /* irq can never have been returned from gpio_to_irq() */ 228 WARN_ON(1); 229 return -EINVAL; 230 } 231 232 static inline int 233 gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name, 234 unsigned int gpio_offset, unsigned int pin_offset, 235 unsigned int npins) 236 { 237 WARN_ON(1); 238 return -EINVAL; 239 } 240 241 static inline int 242 gpiochip_add_pingroup_range(struct gpio_chip *chip, 243 struct pinctrl_dev *pctldev, 244 unsigned int gpio_offset, const char *pin_group) 245 { 246 WARN_ON(1); 247 return -EINVAL; 248 } 249 250 static inline void 251 gpiochip_remove_pin_ranges(struct gpio_chip *chip) 252 { 253 WARN_ON(1); 254 } 255 256 static inline int devm_gpio_request(struct device *dev, unsigned gpio, 257 const char *label) 258 { 259 WARN_ON(1); 260 return -EINVAL; 261 } 262 263 static inline int devm_gpio_request_one(struct device *dev, unsigned gpio, 264 unsigned long flags, const char *label) 265 { 266 WARN_ON(1); 267 return -EINVAL; 268 } 269 270 static inline void devm_gpio_free(struct device *dev, unsigned int gpio) 271 { 272 WARN_ON(1); 273 } 274 275 #endif /* ! CONFIG_GPIOLIB */ 276 277 #endif /* __LINUX_GPIO_H */ 278