Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
[deliverable/linux.git] / include / linux / gpio / consumer.h
1 #ifndef __LINUX_GPIO_CONSUMER_H
2 #define __LINUX_GPIO_CONSUMER_H
3
4 #include <linux/bug.h>
5 #include <linux/err.h>
6 #include <linux/kernel.h>
7
8 struct device;
9
10 /**
11 * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are
12 * preferable to the old integer-based handles.
13 *
14 * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid
15 * until the GPIO is released.
16 */
17 struct gpio_desc;
18
19 #define GPIOD_FLAGS_BIT_DIR_SET BIT(0)
20 #define GPIOD_FLAGS_BIT_DIR_OUT BIT(1)
21 #define GPIOD_FLAGS_BIT_DIR_VAL BIT(2)
22
23 /**
24 * Optional flags that can be passed to one of gpiod_* to configure direction
25 * and output value. These values cannot be OR'd.
26 */
27 enum gpiod_flags {
28 GPIOD_ASIS = 0,
29 GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET,
30 GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT,
31 GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
32 GPIOD_FLAGS_BIT_DIR_VAL,
33 };
34
35 #ifdef CONFIG_GPIOLIB
36
37 /* Acquire and dispose GPIOs */
38 struct gpio_desc *__must_check __gpiod_get(struct device *dev,
39 const char *con_id,
40 enum gpiod_flags flags);
41 #define __gpiod_get(dev, con_id, flags, ...) __gpiod_get(dev, con_id, flags)
42 #define gpiod_get(varargs...) __gpiod_get(varargs, 0)
43 struct gpio_desc *__must_check __gpiod_get_index(struct device *dev,
44 const char *con_id,
45 unsigned int idx,
46 enum gpiod_flags flags);
47 #define __gpiod_get_index(dev, con_id, index, flags, ...) \
48 __gpiod_get_index(dev, con_id, index, flags)
49 #define gpiod_get_index(varargs...) __gpiod_get_index(varargs, 0)
50 struct gpio_desc *__must_check __gpiod_get_optional(struct device *dev,
51 const char *con_id,
52 enum gpiod_flags flags);
53 #define __gpiod_get_optional(dev, con_id, flags, ...) \
54 __gpiod_get_optional(dev, con_id, flags)
55 #define gpiod_get_optional(varargs...) __gpiod_get_optional(varargs, 0)
56 struct gpio_desc *__must_check __gpiod_get_index_optional(struct device *dev,
57 const char *con_id,
58 unsigned int index,
59 enum gpiod_flags flags);
60 #define __gpiod_get_index_optional(dev, con_id, index, flags, ...) \
61 __gpiod_get_index_optional(dev, con_id, index, flags)
62 #define gpiod_get_index_optional(varargs...) \
63 __gpiod_get_index_optional(varargs, 0)
64
65 void gpiod_put(struct gpio_desc *desc);
66
67 struct gpio_desc *__must_check __devm_gpiod_get(struct device *dev,
68 const char *con_id,
69 enum gpiod_flags flags);
70 #define __devm_gpiod_get(dev, con_id, flags, ...) \
71 __devm_gpiod_get(dev, con_id, flags)
72 #define devm_gpiod_get(varargs...) __devm_gpiod_get(varargs, 0)
73 struct gpio_desc *__must_check __devm_gpiod_get_index(struct device *dev,
74 const char *con_id,
75 unsigned int idx,
76 enum gpiod_flags flags);
77 #define __devm_gpiod_get_index(dev, con_id, index, flags, ...) \
78 __devm_gpiod_get_index(dev, con_id, index, flags)
79 #define devm_gpiod_get_index(varargs...) __devm_gpiod_get_index(varargs, 0)
80 struct gpio_desc *__must_check __devm_gpiod_get_optional(struct device *dev,
81 const char *con_id,
82 enum gpiod_flags flags);
83 #define __devm_gpiod_get_optional(dev, con_id, flags, ...) \
84 __devm_gpiod_get_optional(dev, con_id, flags)
85 #define devm_gpiod_get_optional(varargs...) \
86 __devm_gpiod_get_optional(varargs, 0)
87 struct gpio_desc *__must_check
88 __devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
89 unsigned int index, enum gpiod_flags flags);
90 #define __devm_gpiod_get_index_optional(dev, con_id, index, flags, ...) \
91 __devm_gpiod_get_index_optional(dev, con_id, index, flags)
92 #define devm_gpiod_get_index_optional(varargs...) \
93 __devm_gpiod_get_index_optional(varargs, 0)
94
95 void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
96
97 int gpiod_get_direction(const struct gpio_desc *desc);
98 int gpiod_direction_input(struct gpio_desc *desc);
99 int gpiod_direction_output(struct gpio_desc *desc, int value);
100 int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
101
102 /* Value get/set from non-sleeping context */
103 int gpiod_get_value(const struct gpio_desc *desc);
104 void gpiod_set_value(struct gpio_desc *desc, int value);
105 int gpiod_get_raw_value(const struct gpio_desc *desc);
106 void gpiod_set_raw_value(struct gpio_desc *desc, int value);
107
108 /* Value get/set from sleeping context */
109 int gpiod_get_value_cansleep(const struct gpio_desc *desc);
110 void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
111 int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
112 void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
113
114 int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
115
116 int gpiod_is_active_low(const struct gpio_desc *desc);
117 int gpiod_cansleep(const struct gpio_desc *desc);
118
119 int gpiod_to_irq(const struct gpio_desc *desc);
120
121 /* Convert between the old gpio_ and new gpiod_ interfaces */
122 struct gpio_desc *gpio_to_desc(unsigned gpio);
123 int desc_to_gpio(const struct gpio_desc *desc);
124
125 #else /* CONFIG_GPIOLIB */
126
127 static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
128 const char *con_id)
129 {
130 return ERR_PTR(-ENOSYS);
131 }
132 static inline struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
133 const char *con_id,
134 unsigned int idx)
135 {
136 return ERR_PTR(-ENOSYS);
137 }
138
139 static inline struct gpio_desc *__must_check
140 gpiod_get_optional(struct device *dev, const char *con_id)
141 {
142 return ERR_PTR(-ENOSYS);
143 }
144
145 static inline struct gpio_desc *__must_check
146 gpiod_get_index_optional(struct device *dev, const char *con_id,
147 unsigned int index)
148 {
149 return ERR_PTR(-ENOSYS);
150 }
151
152 static inline void gpiod_put(struct gpio_desc *desc)
153 {
154 might_sleep();
155
156 /* GPIO can never have been requested */
157 WARN_ON(1);
158 }
159
160 static inline struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
161 const char *con_id)
162 {
163 return ERR_PTR(-ENOSYS);
164 }
165 static inline
166 struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
167 const char *con_id,
168 unsigned int idx)
169 {
170 return ERR_PTR(-ENOSYS);
171 }
172
173 static inline struct gpio_desc *__must_check
174 devm_gpiod_get_optional(struct device *dev, const char *con_id)
175 {
176 return ERR_PTR(-ENOSYS);
177 }
178
179 static inline struct gpio_desc *__must_check
180 devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
181 unsigned int index)
182 {
183 return ERR_PTR(-ENOSYS);
184 }
185
186 static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
187 {
188 might_sleep();
189
190 /* GPIO can never have been requested */
191 WARN_ON(1);
192 }
193
194
195 static inline int gpiod_get_direction(const struct gpio_desc *desc)
196 {
197 /* GPIO can never have been requested */
198 WARN_ON(1);
199 return -ENOSYS;
200 }
201 static inline int gpiod_direction_input(struct gpio_desc *desc)
202 {
203 /* GPIO can never have been requested */
204 WARN_ON(1);
205 return -ENOSYS;
206 }
207 static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
208 {
209 /* GPIO can never have been requested */
210 WARN_ON(1);
211 return -ENOSYS;
212 }
213 static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
214 {
215 /* GPIO can never have been requested */
216 WARN_ON(1);
217 return -ENOSYS;
218 }
219
220
221 static inline int gpiod_get_value(const struct gpio_desc *desc)
222 {
223 /* GPIO can never have been requested */
224 WARN_ON(1);
225 return 0;
226 }
227 static inline void gpiod_set_value(struct gpio_desc *desc, int value)
228 {
229 /* GPIO can never have been requested */
230 WARN_ON(1);
231 }
232 static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
233 {
234 /* GPIO can never have been requested */
235 WARN_ON(1);
236 return 0;
237 }
238 static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
239 {
240 /* GPIO can never have been requested */
241 WARN_ON(1);
242 }
243
244 static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
245 {
246 /* GPIO can never have been requested */
247 WARN_ON(1);
248 return 0;
249 }
250 static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
251 {
252 /* GPIO can never have been requested */
253 WARN_ON(1);
254 }
255 static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
256 {
257 /* GPIO can never have been requested */
258 WARN_ON(1);
259 return 0;
260 }
261 static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
262 int value)
263 {
264 /* GPIO can never have been requested */
265 WARN_ON(1);
266 }
267
268 static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
269 {
270 /* GPIO can never have been requested */
271 WARN_ON(1);
272 return -ENOSYS;
273 }
274
275 static inline int gpiod_is_active_low(const struct gpio_desc *desc)
276 {
277 /* GPIO can never have been requested */
278 WARN_ON(1);
279 return 0;
280 }
281 static inline int gpiod_cansleep(const struct gpio_desc *desc)
282 {
283 /* GPIO can never have been requested */
284 WARN_ON(1);
285 return 0;
286 }
287
288 static inline int gpiod_to_irq(const struct gpio_desc *desc)
289 {
290 /* GPIO can never have been requested */
291 WARN_ON(1);
292 return -EINVAL;
293 }
294
295 static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
296 {
297 return ERR_PTR(-EINVAL);
298 }
299 static inline int desc_to_gpio(const struct gpio_desc *desc)
300 {
301 /* GPIO can never have been requested */
302 WARN_ON(1);
303 return -EINVAL;
304 }
305
306
307 #endif /* CONFIG_GPIOLIB */
308
309 #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
310
311 int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
312 int gpiod_export_link(struct device *dev, const char *name,
313 struct gpio_desc *desc);
314 int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value);
315 void gpiod_unexport(struct gpio_desc *desc);
316
317 #else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
318
319 static inline int gpiod_export(struct gpio_desc *desc,
320 bool direction_may_change)
321 {
322 return -ENOSYS;
323 }
324
325 static inline int gpiod_export_link(struct device *dev, const char *name,
326 struct gpio_desc *desc)
327 {
328 return -ENOSYS;
329 }
330
331 static inline int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
332 {
333 return -ENOSYS;
334 }
335
336 static inline void gpiod_unexport(struct gpio_desc *desc)
337 {
338 }
339
340 #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
341
342 #endif
This page took 0.314518 seconds and 6 git commands to generate.