1 #ifndef __LINUX_GPIO_CONSUMER_H
2 #define __LINUX_GPIO_CONSUMER_H
6 #include <linux/kernel.h>
11 * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are
12 * preferable to the old integer-based handles.
14 * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid
15 * until the GPIO is released.
20 * Struct containing an array of descriptors that can be obtained using
25 struct gpio_desc *desc[];
28 #define GPIOD_FLAGS_BIT_DIR_SET BIT(0)
29 #define GPIOD_FLAGS_BIT_DIR_OUT BIT(1)
30 #define GPIOD_FLAGS_BIT_DIR_VAL BIT(2)
33 * Optional flags that can be passed to one of gpiod_* to configure direction
34 * and output value. These values cannot be OR'd.
38 GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET,
39 GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT,
40 GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
41 GPIOD_FLAGS_BIT_DIR_VAL,
46 /* Return the number of GPIOs associated with a device / function */
47 int gpiod_count(struct device *dev, const char *con_id);
49 /* Acquire and dispose GPIOs */
50 struct gpio_desc *__must_check gpiod_get(struct device *dev,
52 enum gpiod_flags flags);
53 struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
56 enum gpiod_flags flags);
57 struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
59 enum gpiod_flags flags);
60 struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
63 enum gpiod_flags flags);
64 struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
66 enum gpiod_flags flags);
67 struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
69 enum gpiod_flags flags);
70 void gpiod_put(struct gpio_desc *desc);
71 void gpiod_put_array(struct gpio_descs *descs);
73 struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
75 enum gpiod_flags flags);
76 struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
79 enum gpiod_flags flags);
80 struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
82 enum gpiod_flags flags);
83 struct gpio_desc *__must_check
84 devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
85 unsigned int index, enum gpiod_flags flags);
86 struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
88 enum gpiod_flags flags);
89 struct gpio_descs *__must_check
90 devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
91 enum gpiod_flags flags);
92 void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
93 void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs);
95 int gpiod_get_direction(struct gpio_desc *desc);
96 int gpiod_direction_input(struct gpio_desc *desc);
97 int gpiod_direction_output(struct gpio_desc *desc, int value);
98 int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
100 /* Value get/set from non-sleeping context */
101 int gpiod_get_value(const struct gpio_desc *desc);
102 void gpiod_set_value(struct gpio_desc *desc, int value);
103 void gpiod_set_array_value(unsigned int array_size,
104 struct gpio_desc **desc_array, int *value_array);
105 int gpiod_get_raw_value(const struct gpio_desc *desc);
106 void gpiod_set_raw_value(struct gpio_desc *desc, int value);
107 void gpiod_set_raw_array_value(unsigned int array_size,
108 struct gpio_desc **desc_array,
111 /* Value get/set from sleeping context */
112 int gpiod_get_value_cansleep(const struct gpio_desc *desc);
113 void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
114 void gpiod_set_array_value_cansleep(unsigned int array_size,
115 struct gpio_desc **desc_array,
117 int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
118 void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
119 void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
120 struct gpio_desc **desc_array,
123 int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
125 int gpiod_is_active_low(const struct gpio_desc *desc);
126 int gpiod_cansleep(const struct gpio_desc *desc);
128 int gpiod_to_irq(const struct gpio_desc *desc);
130 /* Convert between the old gpio_ and new gpiod_ interfaces */
131 struct gpio_desc *gpio_to_desc(unsigned gpio);
132 int desc_to_gpio(const struct gpio_desc *desc);
133 struct gpio_desc *gpio_name_to_desc(const char *name);
135 /* Child properties interface */
136 struct fwnode_handle;
138 struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
139 const char *propname);
140 struct gpio_desc *devm_get_gpiod_from_child(struct device *dev,
142 struct fwnode_handle *child);
143 #else /* CONFIG_GPIOLIB */
145 static inline int gpiod_count(struct device *dev, const char *con_id)
150 static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
152 enum gpiod_flags flags)
154 return ERR_PTR(-ENOSYS);
156 static inline struct gpio_desc *__must_check
157 gpiod_get_index(struct device *dev,
160 enum gpiod_flags flags)
162 return ERR_PTR(-ENOSYS);
165 static inline struct gpio_desc *__must_check
166 gpiod_get_optional(struct device *dev, const char *con_id,
167 enum gpiod_flags flags)
169 return ERR_PTR(-ENOSYS);
172 static inline struct gpio_desc *__must_check
173 gpiod_get_index_optional(struct device *dev, const char *con_id,
174 unsigned int index, enum gpiod_flags flags)
176 return ERR_PTR(-ENOSYS);
179 static inline struct gpio_descs *__must_check
180 gpiod_get_array(struct device *dev, const char *con_id,
181 enum gpiod_flags flags)
183 return ERR_PTR(-ENOSYS);
186 static inline struct gpio_descs *__must_check
187 gpiod_get_array_optional(struct device *dev, const char *con_id,
188 enum gpiod_flags flags)
190 return ERR_PTR(-ENOSYS);
193 static inline void gpiod_put(struct gpio_desc *desc)
197 /* GPIO can never have been requested */
201 static inline void gpiod_put_array(struct gpio_descs *descs)
205 /* GPIO can never have been requested */
209 static inline struct gpio_desc *__must_check
210 devm_gpiod_get(struct device *dev,
212 enum gpiod_flags flags)
214 return ERR_PTR(-ENOSYS);
217 struct gpio_desc *__must_check
218 devm_gpiod_get_index(struct device *dev,
221 enum gpiod_flags flags)
223 return ERR_PTR(-ENOSYS);
226 static inline struct gpio_desc *__must_check
227 devm_gpiod_get_optional(struct device *dev, const char *con_id,
228 enum gpiod_flags flags)
230 return ERR_PTR(-ENOSYS);
233 static inline struct gpio_desc *__must_check
234 devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
235 unsigned int index, enum gpiod_flags flags)
237 return ERR_PTR(-ENOSYS);
240 static inline struct gpio_descs *__must_check
241 devm_gpiod_get_array(struct device *dev, const char *con_id,
242 enum gpiod_flags flags)
244 return ERR_PTR(-ENOSYS);
247 static inline struct gpio_descs *__must_check
248 devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
249 enum gpiod_flags flags)
251 return ERR_PTR(-ENOSYS);
254 static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
258 /* GPIO can never have been requested */
262 static inline void devm_gpiod_put_array(struct device *dev,
263 struct gpio_descs *descs)
267 /* GPIO can never have been requested */
272 static inline int gpiod_get_direction(const struct gpio_desc *desc)
274 /* GPIO can never have been requested */
278 static inline int gpiod_direction_input(struct gpio_desc *desc)
280 /* GPIO can never have been requested */
284 static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
286 /* GPIO can never have been requested */
290 static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
292 /* GPIO can never have been requested */
298 static inline int gpiod_get_value(const struct gpio_desc *desc)
300 /* GPIO can never have been requested */
304 static inline void gpiod_set_value(struct gpio_desc *desc, int value)
306 /* GPIO can never have been requested */
309 static inline void gpiod_set_array_value(unsigned int array_size,
310 struct gpio_desc **desc_array,
313 /* GPIO can never have been requested */
316 static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
318 /* GPIO can never have been requested */
322 static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
324 /* GPIO can never have been requested */
327 static inline void gpiod_set_raw_array_value(unsigned int array_size,
328 struct gpio_desc **desc_array,
331 /* GPIO can never have been requested */
335 static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
337 /* GPIO can never have been requested */
341 static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
343 /* GPIO can never have been requested */
346 static inline void gpiod_set_array_value_cansleep(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_cansleep(const struct gpio_desc *desc)
355 /* GPIO can never have been requested */
359 static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
362 /* GPIO can never have been requested */
365 static inline void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
366 struct gpio_desc **desc_array,
369 /* GPIO can never have been requested */
373 static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
375 /* GPIO can never have been requested */
380 static inline int gpiod_is_active_low(const struct gpio_desc *desc)
382 /* GPIO can never have been requested */
386 static inline int gpiod_cansleep(const struct gpio_desc *desc)
388 /* GPIO can never have been requested */
393 static inline int gpiod_to_irq(const struct gpio_desc *desc)
395 /* GPIO can never have been requested */
400 static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
402 return ERR_PTR(-EINVAL);
405 static inline struct gpio_desc *gpio_name_to_desc(const char *name)
407 return ERR_PTR(-EINVAL);
410 static inline int desc_to_gpio(const struct gpio_desc *desc)
412 /* GPIO can never have been requested */
417 /* Child properties interface */
418 struct fwnode_handle;
420 static inline struct gpio_desc *fwnode_get_named_gpiod(
421 struct fwnode_handle *fwnode, const char *propname)
423 return ERR_PTR(-ENOSYS);
426 static inline struct gpio_desc *devm_get_gpiod_from_child(
427 struct device *dev, const char *con_id, struct fwnode_handle *child)
429 return ERR_PTR(-ENOSYS);
432 #endif /* CONFIG_GPIOLIB */
434 #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
436 int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
437 int gpiod_export_link(struct device *dev, const char *name,
438 struct gpio_desc *desc);
439 void gpiod_unexport(struct gpio_desc *desc);
441 #else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
443 static inline int gpiod_export(struct gpio_desc *desc,
444 bool direction_may_change)
449 static inline int gpiod_export_link(struct device *dev, const char *name,
450 struct gpio_desc *desc)
455 static inline void gpiod_unexport(struct gpio_desc *desc)
459 #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */