1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LINUX_GPIO_CONSUMER_H
3 #define __LINUX_GPIO_CONSUMER_H
7 #include <linux/kernel.h>
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.
21 * Struct containing an array of descriptors that can be obtained using
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)
35 * Optional flags that can be passed to one of gpiod_* to configure direction
36 * and output value. These values cannot be OR'd.
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
,
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
,
59 enum gpiod_flags flags
);
60 struct gpio_desc
*__must_check
gpiod_get_index(struct device
*dev
,
63 enum gpiod_flags flags
);
64 struct gpio_desc
*__must_check
gpiod_get_optional(struct device
*dev
,
66 enum gpiod_flags flags
);
67 struct gpio_desc
*__must_check
gpiod_get_index_optional(struct device
*dev
,
70 enum gpiod_flags flags
);
71 struct gpio_descs
*__must_check
gpiod_get_array(struct device
*dev
,
73 enum gpiod_flags flags
);
74 struct gpio_descs
*__must_check
gpiod_get_array_optional(struct device
*dev
,
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
,
82 enum gpiod_flags flags
);
83 struct gpio_desc
*__must_check
devm_gpiod_get_index(struct device
*dev
,
86 enum gpiod_flags flags
);
87 struct gpio_desc
*__must_check
devm_gpiod_get_optional(struct device
*dev
,
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
,
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
,
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
,
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
,
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
,
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
,
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
,
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 */
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
,
162 struct gpio_desc
*fwnode_get_named_gpiod(struct fwnode_handle
*fwnode
,
163 const char *propname
, int index
,
164 enum gpiod_flags dflags
,
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
,
172 #else /* CONFIG_GPIOLIB */
174 static inline int gpiod_count(struct device
*dev
, const char *con_id
)
179 static inline struct gpio_desc
*__must_check
gpiod_get(struct device
*dev
,
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
,
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
)
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
)
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
)
222 static inline void gpiod_put(struct gpio_desc
*desc
)
226 /* GPIO can never have been requested */
230 static inline void gpiod_put_array(struct gpio_descs
*descs
)
234 /* GPIO can never have been requested */
238 static inline struct gpio_desc
*__must_check
239 devm_gpiod_get(struct device
*dev
,
241 enum gpiod_flags flags
)
243 return ERR_PTR(-ENOSYS
);
246 struct gpio_desc
*__must_check
247 devm_gpiod_get_index(struct device
*dev
,
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
)
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
)
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
)
283 static inline void devm_gpiod_put(struct device
*dev
, struct gpio_desc
*desc
)
287 /* GPIO can never have been requested */
291 static inline void devm_gpiod_put_array(struct device
*dev
,
292 struct gpio_descs
*descs
)
296 /* GPIO can never have been requested */
301 static inline int gpiod_get_direction(const struct gpio_desc
*desc
)
303 /* GPIO can never have been requested */
307 static inline int gpiod_direction_input(struct gpio_desc
*desc
)
309 /* GPIO can never have been requested */
313 static inline int gpiod_direction_output(struct gpio_desc
*desc
, int value
)
315 /* GPIO can never have been requested */
319 static inline int gpiod_direction_output_raw(struct gpio_desc
*desc
, int value
)
321 /* GPIO can never have been requested */
327 static inline int gpiod_get_value(const struct gpio_desc
*desc
)
329 /* GPIO can never have been requested */
333 static inline int gpiod_get_array_value(unsigned int array_size
,
334 struct gpio_desc
**desc_array
,
337 /* GPIO can never have been requested */
341 static inline void gpiod_set_value(struct gpio_desc
*desc
, int value
)
343 /* GPIO can never have been requested */
346 static inline void gpiod_set_array_value(unsigned int array_size
,
347 struct gpio_desc
**desc_array
,
350 /* GPIO can never have been requested */
353 static inline int gpiod_get_raw_value(const struct gpio_desc
*desc
)
355 /* GPIO can never have been requested */
359 static inline int gpiod_get_raw_array_value(unsigned int array_size
,
360 struct gpio_desc
**desc_array
,
363 /* GPIO can never have been requested */
367 static inline void gpiod_set_raw_value(struct gpio_desc
*desc
, int value
)
369 /* GPIO can never have been requested */
372 static inline void gpiod_set_raw_array_value(unsigned int array_size
,
373 struct gpio_desc
**desc_array
,
376 /* GPIO can never have been requested */
380 static inline int gpiod_get_value_cansleep(const struct gpio_desc
*desc
)
382 /* GPIO can never have been requested */
386 static inline int gpiod_get_array_value_cansleep(unsigned int array_size
,
387 struct gpio_desc
**desc_array
,
390 /* GPIO can never have been requested */
394 static inline void gpiod_set_value_cansleep(struct gpio_desc
*desc
, int value
)
396 /* GPIO can never have been requested */
399 static inline void gpiod_set_array_value_cansleep(unsigned int array_size
,
400 struct gpio_desc
**desc_array
,
403 /* GPIO can never have been requested */
406 static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc
*desc
)
408 /* GPIO can never have been requested */
412 static inline int gpiod_get_raw_array_value_cansleep(unsigned int array_size
,
413 struct gpio_desc
**desc_array
,
416 /* GPIO can never have been requested */
420 static inline void gpiod_set_raw_value_cansleep(struct gpio_desc
*desc
,
423 /* GPIO can never have been requested */
426 static inline void gpiod_set_raw_array_value_cansleep(unsigned int array_size
,
427 struct gpio_desc
**desc_array
,
430 /* GPIO can never have been requested */
434 static inline int gpiod_set_debounce(struct gpio_desc
*desc
, unsigned debounce
)
436 /* GPIO can never have been requested */
441 static inline int gpiod_set_transitory(struct gpio_desc
*desc
, bool transitory
)
443 /* GPIO can never have been requested */
448 static inline int gpiod_is_active_low(const struct gpio_desc
*desc
)
450 /* GPIO can never have been requested */
454 static inline int gpiod_cansleep(const struct gpio_desc
*desc
)
456 /* GPIO can never have been requested */
461 static inline int gpiod_to_irq(const struct gpio_desc
*desc
)
463 /* GPIO can never have been requested */
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 */
480 /* Child properties interface */
482 struct fwnode_handle
;
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
,
491 return ERR_PTR(-ENOSYS
);
495 struct gpio_desc
*fwnode_get_named_gpiod(struct fwnode_handle
*fwnode
,
496 const char *propname
, int index
,
497 enum gpiod_flags dflags
,
500 return ERR_PTR(-ENOSYS
);
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
,
510 return ERR_PTR(-ENOSYS
);
513 #endif /* CONFIG_GPIOLIB */
516 struct gpio_desc
*devm_fwnode_get_gpiod_from_child(struct device
*dev
,
518 struct fwnode_handle
*child
,
519 enum gpiod_flags flags
,
522 return devm_fwnode_get_index_gpiod_from_child(dev
, con_id
, 0, child
,
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
)
541 static inline int gpiod_export_link(struct device
*dev
, const char *name
,
542 struct gpio_desc
*desc
)
547 static inline void gpiod_unexport(struct gpio_desc
*desc
)
551 #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */