]> git.karo-electronics.de Git - karo-tx-linux.git/blob - include/linux/gpio.h
c691df04445812c7ffae964be58d66c63e8ecaa6
[karo-tx-linux.git] / include / linux / gpio.h
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 #else /* ! CONFIG_GPIOLIB */
81
82 #include <linux/kernel.h>
83 #include <linux/types.h>
84 #include <linux/errno.h>
85 #include <linux/bug.h>
86
87 struct device;
88 struct gpio_chip;
89
90 static inline bool gpio_is_valid(int number)
91 {
92         return false;
93 }
94
95 static inline int gpio_request(unsigned gpio, const char *label)
96 {
97         return -ENOSYS;
98 }
99
100 static inline int gpio_request_one(unsigned gpio,
101                                         unsigned long flags, const char *label)
102 {
103         return -ENOSYS;
104 }
105
106 static inline int gpio_request_array(const struct gpio *array, size_t num)
107 {
108         return -ENOSYS;
109 }
110
111 static inline void gpio_free(unsigned gpio)
112 {
113         might_sleep();
114
115         /* GPIO can never have been requested */
116         WARN_ON(1);
117 }
118
119 static inline void gpio_free_array(const struct gpio *array, size_t num)
120 {
121         might_sleep();
122
123         /* GPIO can never have been requested */
124         WARN_ON(1);
125 }
126
127 static inline int gpio_direction_input(unsigned gpio)
128 {
129         return -ENOSYS;
130 }
131
132 static inline int gpio_direction_output(unsigned gpio, int value)
133 {
134         return -ENOSYS;
135 }
136
137 static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
138 {
139         return -ENOSYS;
140 }
141
142 static inline int gpio_get_value(unsigned gpio)
143 {
144         /* GPIO can never have been requested or set as {in,out}put */
145         WARN_ON(1);
146         return 0;
147 }
148
149 static inline void gpio_set_value(unsigned gpio, int value)
150 {
151         /* GPIO can never have been requested or set as output */
152         WARN_ON(1);
153 }
154
155 static inline int gpio_cansleep(unsigned gpio)
156 {
157         /* GPIO can never have been requested or set as {in,out}put */
158         WARN_ON(1);
159         return 0;
160 }
161
162 static inline int gpio_get_value_cansleep(unsigned gpio)
163 {
164         /* GPIO can never have been requested or set as {in,out}put */
165         WARN_ON(1);
166         return 0;
167 }
168
169 static inline void gpio_set_value_cansleep(unsigned gpio, int value)
170 {
171         /* GPIO can never have been requested or set as output */
172         WARN_ON(1);
173 }
174
175 static inline int gpio_export(unsigned gpio, bool direction_may_change)
176 {
177         /* GPIO can never have been requested or set as {in,out}put */
178         WARN_ON(1);
179         return -EINVAL;
180 }
181
182 static inline int gpio_export_link(struct device *dev, const char *name,
183                                 unsigned gpio)
184 {
185         /* GPIO can never have been exported */
186         WARN_ON(1);
187         return -EINVAL;
188 }
189
190 static inline int gpio_sysfs_set_active_low(unsigned gpio, int value)
191 {
192         /* GPIO can never have been requested */
193         WARN_ON(1);
194         return -EINVAL;
195 }
196
197 static inline void gpio_unexport(unsigned gpio)
198 {
199         /* GPIO can never have been exported */
200         WARN_ON(1);
201 }
202
203 static inline int gpio_to_irq(unsigned gpio)
204 {
205         /* GPIO can never have been requested or set as input */
206         WARN_ON(1);
207         return -EINVAL;
208 }
209
210 static inline int gpio_lock_as_irq(struct gpio_chip *chip, unsigned int offset)
211 {
212         WARN_ON(1);
213         return -EINVAL;
214 }
215
216 static inline void gpio_unlock_as_irq(struct gpio_chip *chip,
217                                       unsigned int offset)
218 {
219         WARN_ON(1);
220 }
221
222 static inline int irq_to_gpio(unsigned irq)
223 {
224         /* irq can never have been returned from gpio_to_irq() */
225         WARN_ON(1);
226         return -EINVAL;
227 }
228
229 static inline int
230 gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
231                        unsigned int gpio_offset, unsigned int pin_offset,
232                        unsigned int npins)
233 {
234         WARN_ON(1);
235         return -EINVAL;
236 }
237
238 static inline void
239 gpiochip_remove_pin_ranges(struct gpio_chip *chip)
240 {
241         WARN_ON(1);
242 }
243
244 #endif /* ! CONFIG_GPIOLIB */
245
246 struct device;
247
248 /* bindings for managed devices that want to request gpios */
249 int devm_gpio_request(struct device *dev, unsigned gpio, const char *label);
250 int devm_gpio_request_one(struct device *dev, unsigned gpio,
251                           unsigned long flags, const char *label);
252 void devm_gpio_free(struct device *dev, unsigned int gpio);
253
254 #endif /* __LINUX_GPIO_H */