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 open drain */ 20 #define GPIOF_OPEN_DRAIN (1 << 2) 21 22 /* Gpio pin is open source */ 23 #define GPIOF_OPEN_SOURCE (1 << 3) 24 25 #define GPIOF_EXPORT (1 << 4) 26 #define GPIOF_EXPORT_CHANGEABLE (1 << 5) 27 #define GPIOF_EXPORT_DIR_FIXED (GPIOF_EXPORT) 28 #define GPIOF_EXPORT_DIR_CHANGEABLE (GPIOF_EXPORT | GPIOF_EXPORT_CHANGEABLE) 29 30 /** 31 * struct gpio - a structure describing a GPIO with configuration 32 * @gpio: the GPIO number 33 * @flags: GPIO configuration as specified by GPIOF_* 34 * @label: a literal description string of this GPIO 35 */ 36 struct gpio { 37 unsigned gpio; 38 unsigned long flags; 39 const char *label; 40 }; 41 42 #ifdef CONFIG_GENERIC_GPIO 43 44 #ifdef CONFIG_ARCH_HAVE_CUSTOM_GPIO_H 45 #include <asm/gpio.h> 46 #else 47 48 #include <asm-generic/gpio.h> 49 50 static inline int gpio_get_value(unsigned int gpio) 51 { 52 return __gpio_get_value(gpio); 53 } 54 55 static inline void gpio_set_value(unsigned int gpio, int value) 56 { 57 __gpio_set_value(gpio, value); 58 } 59 60 static inline int gpio_cansleep(unsigned int gpio) 61 { 62 return __gpio_cansleep(gpio); 63 } 64 65 static inline int gpio_to_irq(unsigned int gpio) 66 { 67 return __gpio_to_irq(gpio); 68 } 69 70 static inline int irq_to_gpio(unsigned int irq) 71 { 72 return -EINVAL; 73 } 74 75 #endif 76 77 #else 78 79 #include <linux/kernel.h> 80 #include <linux/types.h> 81 #include <linux/errno.h> 82 #include <linux/bug.h> 83 84 struct device; 85 struct gpio_chip; 86 87 static inline bool gpio_is_valid(int number) 88 { 89 return false; 90 } 91 92 static inline int gpio_request(unsigned gpio, const char *label) 93 { 94 return -ENOSYS; 95 } 96 97 static inline int devm_gpio_request(struct device *dev, unsigned gpio, 98 const char *label) 99 { 100 return -ENOSYS; 101 } 102 103 static inline int gpio_request_one(unsigned gpio, 104 unsigned long flags, const char *label) 105 { 106 return -ENOSYS; 107 } 108 109 static inline int devm_gpio_request_one(struct device *dev, 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 devm_gpio_free(struct device *dev, unsigned gpio) 129 { 130 might_sleep(); 131 132 /* GPIO can never have been requested */ 133 WARN_ON(1); 134 } 135 136 static inline void gpio_free_array(const struct gpio *array, size_t num) 137 { 138 might_sleep(); 139 140 /* GPIO can never have been requested */ 141 WARN_ON(1); 142 } 143 144 static inline int gpio_direction_input(unsigned gpio) 145 { 146 return -ENOSYS; 147 } 148 149 static inline int gpio_direction_output(unsigned gpio, int value) 150 { 151 return -ENOSYS; 152 } 153 154 static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) 155 { 156 return -ENOSYS; 157 } 158 159 static inline int gpio_get_value(unsigned gpio) 160 { 161 /* GPIO can never have been requested or set as {in,out}put */ 162 WARN_ON(1); 163 return 0; 164 } 165 166 static inline void gpio_set_value(unsigned gpio, int value) 167 { 168 /* GPIO can never have been requested or set as output */ 169 WARN_ON(1); 170 } 171 172 static inline int gpio_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 int gpio_get_value_cansleep(unsigned gpio) 180 { 181 /* GPIO can never have been requested or set as {in,out}put */ 182 WARN_ON(1); 183 return 0; 184 } 185 186 static inline void gpio_set_value_cansleep(unsigned gpio, int value) 187 { 188 /* GPIO can never have been requested or set as output */ 189 WARN_ON(1); 190 } 191 192 static inline int gpio_export(unsigned gpio, bool direction_may_change) 193 { 194 /* GPIO can never have been requested or set as {in,out}put */ 195 WARN_ON(1); 196 return -EINVAL; 197 } 198 199 static inline int gpio_export_link(struct device *dev, const char *name, 200 unsigned gpio) 201 { 202 /* GPIO can never have been exported */ 203 WARN_ON(1); 204 return -EINVAL; 205 } 206 207 static inline int gpio_sysfs_set_active_low(unsigned gpio, int value) 208 { 209 /* GPIO can never have been requested */ 210 WARN_ON(1); 211 return -EINVAL; 212 } 213 214 static inline void gpio_unexport(unsigned gpio) 215 { 216 /* GPIO can never have been exported */ 217 WARN_ON(1); 218 } 219 220 static inline int gpio_to_irq(unsigned gpio) 221 { 222 /* GPIO can never have been requested or set as input */ 223 WARN_ON(1); 224 return -EINVAL; 225 } 226 227 static inline int irq_to_gpio(unsigned irq) 228 { 229 /* irq can never have been returned from gpio_to_irq() */ 230 WARN_ON(1); 231 return -EINVAL; 232 } 233 234 #endif 235 236 #endif /* __LINUX_GPIO_H */ 237