Merge tag 'xtensa-20180225' of git://github.com/jcmvbkbc/linux-xtensa
[cris-mirror.git] / include / linux / gpio / consumer.h
blobdbd06596329661dee0a84170c0bdf2fc4b7d853a
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LINUX_GPIO_CONSUMER_H
3 #define __LINUX_GPIO_CONSUMER_H
5 #include <linux/bug.h>
6 #include <linux/err.h>
7 #include <linux/kernel.h>
9 struct device;
11 /**
12 * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are
13 * preferable to the old integer-based handles.
15 * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid
16 * until the GPIO is released.
18 struct gpio_desc;
20 /**
21 * Struct containing an array of descriptors that can be obtained using
22 * gpiod_get_array().
24 struct gpio_descs {
25 unsigned int ndescs;
26 struct gpio_desc *desc[];
29 #define GPIOD_FLAGS_BIT_DIR_SET BIT(0)
30 #define GPIOD_FLAGS_BIT_DIR_OUT BIT(1)
31 #define GPIOD_FLAGS_BIT_DIR_VAL BIT(2)
32 #define GPIOD_FLAGS_BIT_OPEN_DRAIN BIT(3)
34 /**
35 * Optional flags that can be passed to one of gpiod_* to configure direction
36 * and output value. These values cannot be OR'd.
38 enum gpiod_flags {
39 GPIOD_ASIS = 0,
40 GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET,
41 GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT,
42 GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
43 GPIOD_FLAGS_BIT_DIR_VAL,
44 GPIOD_OUT_LOW_OPEN_DRAIN = GPIOD_FLAGS_BIT_DIR_SET |
45 GPIOD_FLAGS_BIT_DIR_OUT | GPIOD_FLAGS_BIT_OPEN_DRAIN,
46 GPIOD_OUT_HIGH_OPEN_DRAIN = GPIOD_FLAGS_BIT_DIR_SET |
47 GPIOD_FLAGS_BIT_DIR_OUT | GPIOD_FLAGS_BIT_DIR_VAL |
48 GPIOD_FLAGS_BIT_OPEN_DRAIN,
51 #ifdef CONFIG_GPIOLIB
53 /* Return the number of GPIOs associated with a device / function */
54 int gpiod_count(struct device *dev, const char *con_id);
56 /* Acquire and dispose GPIOs */
57 struct gpio_desc *__must_check gpiod_get(struct device *dev,
58 const char *con_id,
59 enum gpiod_flags flags);
60 struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
61 const char *con_id,
62 unsigned int idx,
63 enum gpiod_flags flags);
64 struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
65 const char *con_id,
66 enum gpiod_flags flags);
67 struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
68 const char *con_id,
69 unsigned int index,
70 enum gpiod_flags flags);
71 struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
72 const char *con_id,
73 enum gpiod_flags flags);
74 struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
75 const char *con_id,
76 enum gpiod_flags flags);
77 void gpiod_put(struct gpio_desc *desc);
78 void gpiod_put_array(struct gpio_descs *descs);
80 struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
81 const char *con_id,
82 enum gpiod_flags flags);
83 struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
84 const char *con_id,
85 unsigned int idx,
86 enum gpiod_flags flags);
87 struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
88 const char *con_id,
89 enum gpiod_flags flags);
90 struct gpio_desc *__must_check
91 devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
92 unsigned int index, enum gpiod_flags flags);
93 struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
94 const char *con_id,
95 enum gpiod_flags flags);
96 struct gpio_descs *__must_check
97 devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
98 enum gpiod_flags flags);
99 void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
100 void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs);
102 int gpiod_get_direction(struct gpio_desc *desc);
103 int gpiod_direction_input(struct gpio_desc *desc);
104 int gpiod_direction_output(struct gpio_desc *desc, int value);
105 int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
107 /* Value get/set from non-sleeping context */
108 int gpiod_get_value(const struct gpio_desc *desc);
109 int gpiod_get_array_value(unsigned int array_size,
110 struct gpio_desc **desc_array, int *value_array);
111 void gpiod_set_value(struct gpio_desc *desc, int value);
112 void gpiod_set_array_value(unsigned int array_size,
113 struct gpio_desc **desc_array, int *value_array);
114 int gpiod_get_raw_value(const struct gpio_desc *desc);
115 int gpiod_get_raw_array_value(unsigned int array_size,
116 struct gpio_desc **desc_array,
117 int *value_array);
118 void gpiod_set_raw_value(struct gpio_desc *desc, int value);
119 void gpiod_set_raw_array_value(unsigned int array_size,
120 struct gpio_desc **desc_array,
121 int *value_array);
123 /* Value get/set from sleeping context */
124 int gpiod_get_value_cansleep(const struct gpio_desc *desc);
125 int gpiod_get_array_value_cansleep(unsigned int array_size,
126 struct gpio_desc **desc_array,
127 int *value_array);
128 void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
129 void gpiod_set_array_value_cansleep(unsigned int array_size,
130 struct gpio_desc **desc_array,
131 int *value_array);
132 int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
133 int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
134 struct gpio_desc **desc_array,
135 int *value_array);
136 void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
137 void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
138 struct gpio_desc **desc_array,
139 int *value_array);
141 int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
142 int gpiod_set_transitory(struct gpio_desc *desc, bool transitory);
144 int gpiod_is_active_low(const struct gpio_desc *desc);
145 int gpiod_cansleep(const struct gpio_desc *desc);
147 int gpiod_to_irq(const struct gpio_desc *desc);
149 /* Convert between the old gpio_ and new gpiod_ interfaces */
150 struct gpio_desc *gpio_to_desc(unsigned gpio);
151 int desc_to_gpio(const struct gpio_desc *desc);
153 /* Child properties interface */
154 struct device_node;
155 struct fwnode_handle;
157 struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev,
158 struct device_node *node,
159 const char *propname, int index,
160 enum gpiod_flags dflags,
161 const char *label);
162 struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
163 const char *propname, int index,
164 enum gpiod_flags dflags,
165 const char *label);
166 struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
167 const char *con_id, int index,
168 struct fwnode_handle *child,
169 enum gpiod_flags flags,
170 const char *label);
172 #else /* CONFIG_GPIOLIB */
174 static inline int gpiod_count(struct device *dev, const char *con_id)
176 return 0;
179 static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
180 const char *con_id,
181 enum gpiod_flags flags)
183 return ERR_PTR(-ENOSYS);
185 static inline struct gpio_desc *__must_check
186 gpiod_get_index(struct device *dev,
187 const char *con_id,
188 unsigned int idx,
189 enum gpiod_flags flags)
191 return ERR_PTR(-ENOSYS);
194 static inline struct gpio_desc *__must_check
195 gpiod_get_optional(struct device *dev, const char *con_id,
196 enum gpiod_flags flags)
198 return NULL;
201 static inline struct gpio_desc *__must_check
202 gpiod_get_index_optional(struct device *dev, const char *con_id,
203 unsigned int index, enum gpiod_flags flags)
205 return NULL;
208 static inline struct gpio_descs *__must_check
209 gpiod_get_array(struct device *dev, const char *con_id,
210 enum gpiod_flags flags)
212 return ERR_PTR(-ENOSYS);
215 static inline struct gpio_descs *__must_check
216 gpiod_get_array_optional(struct device *dev, const char *con_id,
217 enum gpiod_flags flags)
219 return NULL;
222 static inline void gpiod_put(struct gpio_desc *desc)
224 might_sleep();
226 /* GPIO can never have been requested */
227 WARN_ON(1);
230 static inline void gpiod_put_array(struct gpio_descs *descs)
232 might_sleep();
234 /* GPIO can never have been requested */
235 WARN_ON(1);
238 static inline struct gpio_desc *__must_check
239 devm_gpiod_get(struct device *dev,
240 const char *con_id,
241 enum gpiod_flags flags)
243 return ERR_PTR(-ENOSYS);
245 static inline
246 struct gpio_desc *__must_check
247 devm_gpiod_get_index(struct device *dev,
248 const char *con_id,
249 unsigned int idx,
250 enum gpiod_flags flags)
252 return ERR_PTR(-ENOSYS);
255 static inline struct gpio_desc *__must_check
256 devm_gpiod_get_optional(struct device *dev, const char *con_id,
257 enum gpiod_flags flags)
259 return NULL;
262 static inline struct gpio_desc *__must_check
263 devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
264 unsigned int index, enum gpiod_flags flags)
266 return NULL;
269 static inline struct gpio_descs *__must_check
270 devm_gpiod_get_array(struct device *dev, const char *con_id,
271 enum gpiod_flags flags)
273 return ERR_PTR(-ENOSYS);
276 static inline struct gpio_descs *__must_check
277 devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
278 enum gpiod_flags flags)
280 return NULL;
283 static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
285 might_sleep();
287 /* GPIO can never have been requested */
288 WARN_ON(1);
291 static inline void devm_gpiod_put_array(struct device *dev,
292 struct gpio_descs *descs)
294 might_sleep();
296 /* GPIO can never have been requested */
297 WARN_ON(1);
301 static inline int gpiod_get_direction(const struct gpio_desc *desc)
303 /* GPIO can never have been requested */
304 WARN_ON(1);
305 return -ENOSYS;
307 static inline int gpiod_direction_input(struct gpio_desc *desc)
309 /* GPIO can never have been requested */
310 WARN_ON(1);
311 return -ENOSYS;
313 static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
315 /* GPIO can never have been requested */
316 WARN_ON(1);
317 return -ENOSYS;
319 static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
321 /* GPIO can never have been requested */
322 WARN_ON(1);
323 return -ENOSYS;
327 static inline int gpiod_get_value(const struct gpio_desc *desc)
329 /* GPIO can never have been requested */
330 WARN_ON(1);
331 return 0;
333 static inline int gpiod_get_array_value(unsigned int array_size,
334 struct gpio_desc **desc_array,
335 int *value_array)
337 /* GPIO can never have been requested */
338 WARN_ON(1);
339 return 0;
341 static inline void gpiod_set_value(struct gpio_desc *desc, int value)
343 /* GPIO can never have been requested */
344 WARN_ON(1);
346 static inline void gpiod_set_array_value(unsigned int array_size,
347 struct gpio_desc **desc_array,
348 int *value_array)
350 /* GPIO can never have been requested */
351 WARN_ON(1);
353 static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
355 /* GPIO can never have been requested */
356 WARN_ON(1);
357 return 0;
359 static inline int gpiod_get_raw_array_value(unsigned int array_size,
360 struct gpio_desc **desc_array,
361 int *value_array)
363 /* GPIO can never have been requested */
364 WARN_ON(1);
365 return 0;
367 static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
369 /* GPIO can never have been requested */
370 WARN_ON(1);
372 static inline void gpiod_set_raw_array_value(unsigned int array_size,
373 struct gpio_desc **desc_array,
374 int *value_array)
376 /* GPIO can never have been requested */
377 WARN_ON(1);
380 static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
382 /* GPIO can never have been requested */
383 WARN_ON(1);
384 return 0;
386 static inline int gpiod_get_array_value_cansleep(unsigned int array_size,
387 struct gpio_desc **desc_array,
388 int *value_array)
390 /* GPIO can never have been requested */
391 WARN_ON(1);
392 return 0;
394 static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
396 /* GPIO can never have been requested */
397 WARN_ON(1);
399 static inline void gpiod_set_array_value_cansleep(unsigned int array_size,
400 struct gpio_desc **desc_array,
401 int *value_array)
403 /* GPIO can never have been requested */
404 WARN_ON(1);
406 static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
408 /* GPIO can never have been requested */
409 WARN_ON(1);
410 return 0;
412 static inline int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
413 struct gpio_desc **desc_array,
414 int *value_array)
416 /* GPIO can never have been requested */
417 WARN_ON(1);
418 return 0;
420 static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
421 int value)
423 /* GPIO can never have been requested */
424 WARN_ON(1);
426 static inline void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
427 struct gpio_desc **desc_array,
428 int *value_array)
430 /* GPIO can never have been requested */
431 WARN_ON(1);
434 static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
436 /* GPIO can never have been requested */
437 WARN_ON(1);
438 return -ENOSYS;
441 static inline int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
443 /* GPIO can never have been requested */
444 WARN_ON(1);
445 return -ENOSYS;
448 static inline int gpiod_is_active_low(const struct gpio_desc *desc)
450 /* GPIO can never have been requested */
451 WARN_ON(1);
452 return 0;
454 static inline int gpiod_cansleep(const struct gpio_desc *desc)
456 /* GPIO can never have been requested */
457 WARN_ON(1);
458 return 0;
461 static inline int gpiod_to_irq(const struct gpio_desc *desc)
463 /* GPIO can never have been requested */
464 WARN_ON(1);
465 return -EINVAL;
468 static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
470 return ERR_PTR(-EINVAL);
473 static inline int desc_to_gpio(const struct gpio_desc *desc)
475 /* GPIO can never have been requested */
476 WARN_ON(1);
477 return -EINVAL;
480 /* Child properties interface */
481 struct device_node;
482 struct fwnode_handle;
484 static inline
485 struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev,
486 struct device_node *node,
487 const char *propname, int index,
488 enum gpiod_flags dflags,
489 const char *label)
491 return ERR_PTR(-ENOSYS);
494 static inline
495 struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
496 const char *propname, int index,
497 enum gpiod_flags dflags,
498 const char *label)
500 return ERR_PTR(-ENOSYS);
503 static inline
504 struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
505 const char *con_id, int index,
506 struct fwnode_handle *child,
507 enum gpiod_flags flags,
508 const char *label)
510 return ERR_PTR(-ENOSYS);
513 #endif /* CONFIG_GPIOLIB */
515 static inline
516 struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev,
517 const char *con_id,
518 struct fwnode_handle *child,
519 enum gpiod_flags flags,
520 const char *label)
522 return devm_fwnode_get_index_gpiod_from_child(dev, con_id, 0, child,
523 flags, label);
526 #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
528 int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
529 int gpiod_export_link(struct device *dev, const char *name,
530 struct gpio_desc *desc);
531 void gpiod_unexport(struct gpio_desc *desc);
533 #else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
535 static inline int gpiod_export(struct gpio_desc *desc,
536 bool direction_may_change)
538 return -ENOSYS;
541 static inline int gpiod_export_link(struct device *dev, const char *name,
542 struct gpio_desc *desc)
544 return -ENOSYS;
547 static inline void gpiod_unexport(struct gpio_desc *desc)
551 #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
553 #endif