1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LINUX_GPIO_CONSUMER_H
3 #define __LINUX_GPIO_CONSUMER_H
4 
5 #include <linux/bits.h>
6 #include <linux/bug.h>
7 #include <linux/compiler_types.h>
8 #include <linux/err.h>
9 
10 struct device;
11 
12 /**
13  * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are
14  * preferable to the old integer-based handles.
15  *
16  * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid
17  * until the GPIO is released.
18  */
19 struct gpio_desc;
20 
21 /**
22  * Opaque descriptor for a structure of GPIO array attributes.  This structure
23  * is attached to struct gpiod_descs obtained from gpiod_get_array() and can be
24  * passed back to get/set array functions in order to activate fast processing
25  * path if applicable.
26  */
27 struct gpio_array;
28 
29 /**
30  * Struct containing an array of descriptors that can be obtained using
31  * gpiod_get_array().
32  */
33 struct gpio_descs {
34 	struct gpio_array *info;
35 	unsigned int ndescs;
36 	struct gpio_desc *desc[];
37 };
38 
39 #define GPIOD_FLAGS_BIT_DIR_SET		BIT(0)
40 #define GPIOD_FLAGS_BIT_DIR_OUT		BIT(1)
41 #define GPIOD_FLAGS_BIT_DIR_VAL		BIT(2)
42 #define GPIOD_FLAGS_BIT_OPEN_DRAIN	BIT(3)
43 #define GPIOD_FLAGS_BIT_NONEXCLUSIVE	BIT(4)
44 
45 /**
46  * Optional flags that can be passed to one of gpiod_* to configure direction
47  * and output value. These values cannot be OR'd.
48  */
49 enum gpiod_flags {
50 	GPIOD_ASIS	= 0,
51 	GPIOD_IN	= GPIOD_FLAGS_BIT_DIR_SET,
52 	GPIOD_OUT_LOW	= GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT,
53 	GPIOD_OUT_HIGH	= GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
54 			  GPIOD_FLAGS_BIT_DIR_VAL,
55 	GPIOD_OUT_LOW_OPEN_DRAIN = GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_OPEN_DRAIN,
56 	GPIOD_OUT_HIGH_OPEN_DRAIN = GPIOD_OUT_HIGH | GPIOD_FLAGS_BIT_OPEN_DRAIN,
57 };
58 
59 #ifdef CONFIG_GPIOLIB
60 
61 /* Return the number of GPIOs associated with a device / function */
62 int gpiod_count(struct device *dev, const char *con_id);
63 
64 /* Acquire and dispose GPIOs */
65 struct gpio_desc *__must_check gpiod_get(struct device *dev,
66 					 const char *con_id,
67 					 enum gpiod_flags flags);
68 struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
69 					       const char *con_id,
70 					       unsigned int idx,
71 					       enum gpiod_flags flags);
72 struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
73 						  const char *con_id,
74 						  enum gpiod_flags flags);
75 struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
76 							const char *con_id,
77 							unsigned int index,
78 							enum gpiod_flags flags);
79 struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
80 						const char *con_id,
81 						enum gpiod_flags flags);
82 struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
83 							const char *con_id,
84 							enum gpiod_flags flags);
85 void gpiod_put(struct gpio_desc *desc);
86 void gpiod_put_array(struct gpio_descs *descs);
87 
88 struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
89 					      const char *con_id,
90 					      enum gpiod_flags flags);
91 struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
92 						    const char *con_id,
93 						    unsigned int idx,
94 						    enum gpiod_flags flags);
95 struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
96 						       const char *con_id,
97 						       enum gpiod_flags flags);
98 struct gpio_desc *__must_check
99 devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
100 			      unsigned int index, enum gpiod_flags flags);
101 struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
102 						     const char *con_id,
103 						     enum gpiod_flags flags);
104 struct gpio_descs *__must_check
105 devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
106 			      enum gpiod_flags flags);
107 void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
108 void devm_gpiod_unhinge(struct device *dev, struct gpio_desc *desc);
109 void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs);
110 
111 int gpiod_get_direction(struct gpio_desc *desc);
112 int gpiod_direction_input(struct gpio_desc *desc);
113 int gpiod_direction_output(struct gpio_desc *desc, int value);
114 int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
115 
116 /* Value get/set from non-sleeping context */
117 int gpiod_get_value(const struct gpio_desc *desc);
118 int gpiod_get_array_value(unsigned int array_size,
119 			  struct gpio_desc **desc_array,
120 			  struct gpio_array *array_info,
121 			  unsigned long *value_bitmap);
122 void gpiod_set_value(struct gpio_desc *desc, int value);
123 int gpiod_set_array_value(unsigned int array_size,
124 			  struct gpio_desc **desc_array,
125 			  struct gpio_array *array_info,
126 			  unsigned long *value_bitmap);
127 int gpiod_get_raw_value(const struct gpio_desc *desc);
128 int gpiod_get_raw_array_value(unsigned int array_size,
129 			      struct gpio_desc **desc_array,
130 			      struct gpio_array *array_info,
131 			      unsigned long *value_bitmap);
132 void gpiod_set_raw_value(struct gpio_desc *desc, int value);
133 int gpiod_set_raw_array_value(unsigned int array_size,
134 			      struct gpio_desc **desc_array,
135 			      struct gpio_array *array_info,
136 			      unsigned long *value_bitmap);
137 
138 /* Value get/set from sleeping context */
139 int gpiod_get_value_cansleep(const struct gpio_desc *desc);
140 int gpiod_get_array_value_cansleep(unsigned int array_size,
141 				   struct gpio_desc **desc_array,
142 				   struct gpio_array *array_info,
143 				   unsigned long *value_bitmap);
144 void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
145 int gpiod_set_array_value_cansleep(unsigned int array_size,
146 				   struct gpio_desc **desc_array,
147 				   struct gpio_array *array_info,
148 				   unsigned long *value_bitmap);
149 int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
150 int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
151 				       struct gpio_desc **desc_array,
152 				       struct gpio_array *array_info,
153 				       unsigned long *value_bitmap);
154 void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
155 int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
156 				       struct gpio_desc **desc_array,
157 				       struct gpio_array *array_info,
158 				       unsigned long *value_bitmap);
159 
160 int gpiod_set_config(struct gpio_desc *desc, unsigned long config);
161 int gpiod_set_debounce(struct gpio_desc *desc, unsigned int debounce);
162 int gpiod_set_transitory(struct gpio_desc *desc, bool transitory);
163 void gpiod_toggle_active_low(struct gpio_desc *desc);
164 
165 int gpiod_is_active_low(const struct gpio_desc *desc);
166 int gpiod_cansleep(const struct gpio_desc *desc);
167 
168 int gpiod_to_irq(const struct gpio_desc *desc);
169 int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name);
170 
171 /* Convert between the old gpio_ and new gpiod_ interfaces */
172 struct gpio_desc *gpio_to_desc(unsigned gpio);
173 int desc_to_gpio(const struct gpio_desc *desc);
174 
175 /* Child properties interface */
176 struct fwnode_handle;
177 
178 struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
179 					 const char *propname, int index,
180 					 enum gpiod_flags dflags,
181 					 const char *label);
182 struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
183 					 const char *con_id, int index,
184 					 enum gpiod_flags flags,
185 					 const char *label);
186 struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
187 					      struct fwnode_handle *child,
188 					      const char *con_id, int index,
189 					      enum gpiod_flags flags,
190 					      const char *label);
191 
192 #else /* CONFIG_GPIOLIB */
193 
194 #include <linux/kernel.h>
195 
gpiod_count(struct device * dev,const char * con_id)196 static inline int gpiod_count(struct device *dev, const char *con_id)
197 {
198 	return 0;
199 }
200 
gpiod_get(struct device * dev,const char * con_id,enum gpiod_flags flags)201 static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
202 						       const char *con_id,
203 						       enum gpiod_flags flags)
204 {
205 	return ERR_PTR(-ENOSYS);
206 }
207 static inline struct gpio_desc *__must_check
gpiod_get_index(struct device * dev,const char * con_id,unsigned int idx,enum gpiod_flags flags)208 gpiod_get_index(struct device *dev,
209 		const char *con_id,
210 		unsigned int idx,
211 		enum gpiod_flags flags)
212 {
213 	return ERR_PTR(-ENOSYS);
214 }
215 
216 static inline struct gpio_desc *__must_check
gpiod_get_optional(struct device * dev,const char * con_id,enum gpiod_flags flags)217 gpiod_get_optional(struct device *dev, const char *con_id,
218 		   enum gpiod_flags flags)
219 {
220 	return NULL;
221 }
222 
223 static inline struct gpio_desc *__must_check
gpiod_get_index_optional(struct device * dev,const char * con_id,unsigned int index,enum gpiod_flags flags)224 gpiod_get_index_optional(struct device *dev, const char *con_id,
225 			 unsigned int index, enum gpiod_flags flags)
226 {
227 	return NULL;
228 }
229 
230 static inline struct gpio_descs *__must_check
gpiod_get_array(struct device * dev,const char * con_id,enum gpiod_flags flags)231 gpiod_get_array(struct device *dev, const char *con_id,
232 		enum gpiod_flags flags)
233 {
234 	return ERR_PTR(-ENOSYS);
235 }
236 
237 static inline struct gpio_descs *__must_check
gpiod_get_array_optional(struct device * dev,const char * con_id,enum gpiod_flags flags)238 gpiod_get_array_optional(struct device *dev, const char *con_id,
239 			 enum gpiod_flags flags)
240 {
241 	return NULL;
242 }
243 
gpiod_put(struct gpio_desc * desc)244 static inline void gpiod_put(struct gpio_desc *desc)
245 {
246 	might_sleep();
247 
248 	/* GPIO can never have been requested */
249 	WARN_ON(desc);
250 }
251 
devm_gpiod_unhinge(struct device * dev,struct gpio_desc * desc)252 static inline void devm_gpiod_unhinge(struct device *dev,
253 				      struct gpio_desc *desc)
254 {
255 	might_sleep();
256 
257 	/* GPIO can never have been requested */
258 	WARN_ON(desc);
259 }
260 
gpiod_put_array(struct gpio_descs * descs)261 static inline void gpiod_put_array(struct gpio_descs *descs)
262 {
263 	might_sleep();
264 
265 	/* GPIO can never have been requested */
266 	WARN_ON(descs);
267 }
268 
269 static inline struct gpio_desc *__must_check
devm_gpiod_get(struct device * dev,const char * con_id,enum gpiod_flags flags)270 devm_gpiod_get(struct device *dev,
271 		 const char *con_id,
272 		 enum gpiod_flags flags)
273 {
274 	return ERR_PTR(-ENOSYS);
275 }
276 static inline
277 struct gpio_desc *__must_check
devm_gpiod_get_index(struct device * dev,const char * con_id,unsigned int idx,enum gpiod_flags flags)278 devm_gpiod_get_index(struct device *dev,
279 		       const char *con_id,
280 		       unsigned int idx,
281 		       enum gpiod_flags flags)
282 {
283 	return ERR_PTR(-ENOSYS);
284 }
285 
286 static inline struct gpio_desc *__must_check
devm_gpiod_get_optional(struct device * dev,const char * con_id,enum gpiod_flags flags)287 devm_gpiod_get_optional(struct device *dev, const char *con_id,
288 			  enum gpiod_flags flags)
289 {
290 	return NULL;
291 }
292 
293 static inline struct gpio_desc *__must_check
devm_gpiod_get_index_optional(struct device * dev,const char * con_id,unsigned int index,enum gpiod_flags flags)294 devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
295 				unsigned int index, enum gpiod_flags flags)
296 {
297 	return NULL;
298 }
299 
300 static inline struct gpio_descs *__must_check
devm_gpiod_get_array(struct device * dev,const char * con_id,enum gpiod_flags flags)301 devm_gpiod_get_array(struct device *dev, const char *con_id,
302 		     enum gpiod_flags flags)
303 {
304 	return ERR_PTR(-ENOSYS);
305 }
306 
307 static inline struct gpio_descs *__must_check
devm_gpiod_get_array_optional(struct device * dev,const char * con_id,enum gpiod_flags flags)308 devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
309 			      enum gpiod_flags flags)
310 {
311 	return NULL;
312 }
313 
devm_gpiod_put(struct device * dev,struct gpio_desc * desc)314 static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
315 {
316 	might_sleep();
317 
318 	/* GPIO can never have been requested */
319 	WARN_ON(desc);
320 }
321 
devm_gpiod_put_array(struct device * dev,struct gpio_descs * descs)322 static inline void devm_gpiod_put_array(struct device *dev,
323 					struct gpio_descs *descs)
324 {
325 	might_sleep();
326 
327 	/* GPIO can never have been requested */
328 	WARN_ON(descs);
329 }
330 
331 
gpiod_get_direction(const struct gpio_desc * desc)332 static inline int gpiod_get_direction(const struct gpio_desc *desc)
333 {
334 	/* GPIO can never have been requested */
335 	WARN_ON(desc);
336 	return -ENOSYS;
337 }
gpiod_direction_input(struct gpio_desc * desc)338 static inline int gpiod_direction_input(struct gpio_desc *desc)
339 {
340 	/* GPIO can never have been requested */
341 	WARN_ON(desc);
342 	return -ENOSYS;
343 }
gpiod_direction_output(struct gpio_desc * desc,int value)344 static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
345 {
346 	/* GPIO can never have been requested */
347 	WARN_ON(desc);
348 	return -ENOSYS;
349 }
gpiod_direction_output_raw(struct gpio_desc * desc,int value)350 static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
351 {
352 	/* GPIO can never have been requested */
353 	WARN_ON(desc);
354 	return -ENOSYS;
355 }
356 
357 
gpiod_get_value(const struct gpio_desc * desc)358 static inline int gpiod_get_value(const struct gpio_desc *desc)
359 {
360 	/* GPIO can never have been requested */
361 	WARN_ON(desc);
362 	return 0;
363 }
gpiod_get_array_value(unsigned int array_size,struct gpio_desc ** desc_array,struct gpio_array * array_info,unsigned long * value_bitmap)364 static inline int gpiod_get_array_value(unsigned int array_size,
365 					struct gpio_desc **desc_array,
366 					struct gpio_array *array_info,
367 					unsigned long *value_bitmap)
368 {
369 	/* GPIO can never have been requested */
370 	WARN_ON(desc_array);
371 	return 0;
372 }
gpiod_set_value(struct gpio_desc * desc,int value)373 static inline void gpiod_set_value(struct gpio_desc *desc, int value)
374 {
375 	/* GPIO can never have been requested */
376 	WARN_ON(desc);
377 }
gpiod_set_array_value(unsigned int array_size,struct gpio_desc ** desc_array,struct gpio_array * array_info,unsigned long * value_bitmap)378 static inline int gpiod_set_array_value(unsigned int array_size,
379 					struct gpio_desc **desc_array,
380 					struct gpio_array *array_info,
381 					unsigned long *value_bitmap)
382 {
383 	/* GPIO can never have been requested */
384 	WARN_ON(desc_array);
385 	return 0;
386 }
gpiod_get_raw_value(const struct gpio_desc * desc)387 static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
388 {
389 	/* GPIO can never have been requested */
390 	WARN_ON(desc);
391 	return 0;
392 }
gpiod_get_raw_array_value(unsigned int array_size,struct gpio_desc ** desc_array,struct gpio_array * array_info,unsigned long * value_bitmap)393 static inline int gpiod_get_raw_array_value(unsigned int array_size,
394 					    struct gpio_desc **desc_array,
395 					    struct gpio_array *array_info,
396 					    unsigned long *value_bitmap)
397 {
398 	/* GPIO can never have been requested */
399 	WARN_ON(desc_array);
400 	return 0;
401 }
gpiod_set_raw_value(struct gpio_desc * desc,int value)402 static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
403 {
404 	/* GPIO can never have been requested */
405 	WARN_ON(desc);
406 }
gpiod_set_raw_array_value(unsigned int array_size,struct gpio_desc ** desc_array,struct gpio_array * array_info,unsigned long * value_bitmap)407 static inline int gpiod_set_raw_array_value(unsigned int array_size,
408 					    struct gpio_desc **desc_array,
409 					    struct gpio_array *array_info,
410 					    unsigned long *value_bitmap)
411 {
412 	/* GPIO can never have been requested */
413 	WARN_ON(desc_array);
414 	return 0;
415 }
416 
gpiod_get_value_cansleep(const struct gpio_desc * desc)417 static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
418 {
419 	/* GPIO can never have been requested */
420 	WARN_ON(desc);
421 	return 0;
422 }
gpiod_get_array_value_cansleep(unsigned int array_size,struct gpio_desc ** desc_array,struct gpio_array * array_info,unsigned long * value_bitmap)423 static inline int gpiod_get_array_value_cansleep(unsigned int array_size,
424 				     struct gpio_desc **desc_array,
425 				     struct gpio_array *array_info,
426 				     unsigned long *value_bitmap)
427 {
428 	/* GPIO can never have been requested */
429 	WARN_ON(desc_array);
430 	return 0;
431 }
gpiod_set_value_cansleep(struct gpio_desc * desc,int value)432 static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
433 {
434 	/* GPIO can never have been requested */
435 	WARN_ON(desc);
436 }
gpiod_set_array_value_cansleep(unsigned int array_size,struct gpio_desc ** desc_array,struct gpio_array * array_info,unsigned long * value_bitmap)437 static inline int gpiod_set_array_value_cansleep(unsigned int array_size,
438 					    struct gpio_desc **desc_array,
439 					    struct gpio_array *array_info,
440 					    unsigned long *value_bitmap)
441 {
442 	/* GPIO can never have been requested */
443 	WARN_ON(desc_array);
444 	return 0;
445 }
gpiod_get_raw_value_cansleep(const struct gpio_desc * desc)446 static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
447 {
448 	/* GPIO can never have been requested */
449 	WARN_ON(desc);
450 	return 0;
451 }
gpiod_get_raw_array_value_cansleep(unsigned int array_size,struct gpio_desc ** desc_array,struct gpio_array * array_info,unsigned long * value_bitmap)452 static inline int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
453 					       struct gpio_desc **desc_array,
454 					       struct gpio_array *array_info,
455 					       unsigned long *value_bitmap)
456 {
457 	/* GPIO can never have been requested */
458 	WARN_ON(desc_array);
459 	return 0;
460 }
gpiod_set_raw_value_cansleep(struct gpio_desc * desc,int value)461 static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
462 						int value)
463 {
464 	/* GPIO can never have been requested */
465 	WARN_ON(desc);
466 }
gpiod_set_raw_array_value_cansleep(unsigned int array_size,struct gpio_desc ** desc_array,struct gpio_array * array_info,unsigned long * value_bitmap)467 static inline int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
468 						struct gpio_desc **desc_array,
469 						struct gpio_array *array_info,
470 						unsigned long *value_bitmap)
471 {
472 	/* GPIO can never have been requested */
473 	WARN_ON(desc_array);
474 	return 0;
475 }
476 
gpiod_set_config(struct gpio_desc * desc,unsigned long config)477 static inline int gpiod_set_config(struct gpio_desc *desc, unsigned long config)
478 {
479 	/* GPIO can never have been requested */
480 	WARN_ON(desc);
481 	return -ENOSYS;
482 }
483 
gpiod_set_debounce(struct gpio_desc * desc,unsigned int debounce)484 static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned int debounce)
485 {
486 	/* GPIO can never have been requested */
487 	WARN_ON(desc);
488 	return -ENOSYS;
489 }
490 
gpiod_set_transitory(struct gpio_desc * desc,bool transitory)491 static inline int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
492 {
493 	/* GPIO can never have been requested */
494 	WARN_ON(desc);
495 	return -ENOSYS;
496 }
497 
gpiod_toggle_active_low(struct gpio_desc * desc)498 static inline void gpiod_toggle_active_low(struct gpio_desc *desc)
499 {
500 	/* GPIO can never have been requested */
501 	WARN_ON(desc);
502 }
503 
gpiod_is_active_low(const struct gpio_desc * desc)504 static inline int gpiod_is_active_low(const struct gpio_desc *desc)
505 {
506 	/* GPIO can never have been requested */
507 	WARN_ON(desc);
508 	return 0;
509 }
gpiod_cansleep(const struct gpio_desc * desc)510 static inline int gpiod_cansleep(const struct gpio_desc *desc)
511 {
512 	/* GPIO can never have been requested */
513 	WARN_ON(desc);
514 	return 0;
515 }
516 
gpiod_to_irq(const struct gpio_desc * desc)517 static inline int gpiod_to_irq(const struct gpio_desc *desc)
518 {
519 	/* GPIO can never have been requested */
520 	WARN_ON(desc);
521 	return -EINVAL;
522 }
523 
gpiod_set_consumer_name(struct gpio_desc * desc,const char * name)524 static inline int gpiod_set_consumer_name(struct gpio_desc *desc,
525 					  const char *name)
526 {
527 	/* GPIO can never have been requested */
528 	WARN_ON(desc);
529 	return -EINVAL;
530 }
531 
gpio_to_desc(unsigned gpio)532 static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
533 {
534 	return NULL;
535 }
536 
desc_to_gpio(const struct gpio_desc * desc)537 static inline int desc_to_gpio(const struct gpio_desc *desc)
538 {
539 	/* GPIO can never have been requested */
540 	WARN_ON(desc);
541 	return -EINVAL;
542 }
543 
544 /* Child properties interface */
545 struct fwnode_handle;
546 
547 static inline
fwnode_get_named_gpiod(struct fwnode_handle * fwnode,const char * propname,int index,enum gpiod_flags dflags,const char * label)548 struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
549 					 const char *propname, int index,
550 					 enum gpiod_flags dflags,
551 					 const char *label)
552 {
553 	return ERR_PTR(-ENOSYS);
554 }
555 
556 static inline
fwnode_gpiod_get_index(struct fwnode_handle * fwnode,const char * con_id,int index,enum gpiod_flags flags,const char * label)557 struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
558 					 const char *con_id, int index,
559 					 enum gpiod_flags flags,
560 					 const char *label)
561 {
562 	return ERR_PTR(-ENOSYS);
563 }
564 
565 static inline
devm_fwnode_gpiod_get_index(struct device * dev,struct fwnode_handle * fwnode,const char * con_id,int index,enum gpiod_flags flags,const char * label)566 struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
567 					      struct fwnode_handle *fwnode,
568 					      const char *con_id, int index,
569 					      enum gpiod_flags flags,
570 					      const char *label)
571 {
572 	return ERR_PTR(-ENOSYS);
573 }
574 
575 #endif /* CONFIG_GPIOLIB */
576 
577 static inline
devm_fwnode_gpiod_get(struct device * dev,struct fwnode_handle * fwnode,const char * con_id,enum gpiod_flags flags,const char * label)578 struct gpio_desc *devm_fwnode_gpiod_get(struct device *dev,
579 					struct fwnode_handle *fwnode,
580 					const char *con_id,
581 					enum gpiod_flags flags,
582 					const char *label)
583 {
584 	return devm_fwnode_gpiod_get_index(dev, fwnode, con_id, 0,
585 					   flags, label);
586 }
587 
588 static inline
devm_fwnode_get_index_gpiod_from_child(struct device * dev,const char * con_id,int index,struct fwnode_handle * child,enum gpiod_flags flags,const char * label)589 struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
590 						const char *con_id, int index,
591 						struct fwnode_handle *child,
592 						enum gpiod_flags flags,
593 						const char *label)
594 {
595 	return devm_fwnode_gpiod_get_index(dev, child, con_id, index,
596 					   flags, label);
597 }
598 
599 static inline
devm_fwnode_get_gpiod_from_child(struct device * dev,const char * con_id,struct fwnode_handle * child,enum gpiod_flags flags,const char * label)600 struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev,
601 						   const char *con_id,
602 						   struct fwnode_handle *child,
603 						   enum gpiod_flags flags,
604 						   const char *label)
605 {
606 	return devm_fwnode_gpiod_get_index(dev, child, con_id, 0, flags, label);
607 }
608 
609 #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_OF_GPIO)
610 struct device_node;
611 
612 struct gpio_desc *gpiod_get_from_of_node(const struct device_node *node,
613 					 const char *propname, int index,
614 					 enum gpiod_flags dflags,
615 					 const char *label);
616 
617 #else  /* CONFIG_GPIOLIB && CONFIG_OF_GPIO */
618 
619 struct device_node;
620 
621 static inline
gpiod_get_from_of_node(const struct device_node * node,const char * propname,int index,enum gpiod_flags dflags,const char * label)622 struct gpio_desc *gpiod_get_from_of_node(const struct device_node *node,
623 					 const char *propname, int index,
624 					 enum gpiod_flags dflags,
625 					 const char *label)
626 {
627 	return ERR_PTR(-ENOSYS);
628 }
629 
630 #endif /* CONFIG_GPIOLIB && CONFIG_OF_GPIO */
631 
632 #ifdef CONFIG_GPIOLIB
633 struct device_node;
634 
635 struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev,
636 					      const struct device_node *node,
637 					      const char *propname, int index,
638 					      enum gpiod_flags dflags,
639 					      const char *label);
640 
641 #else  /* CONFIG_GPIOLIB */
642 
643 struct device_node;
644 
645 static inline
devm_gpiod_get_from_of_node(struct device * dev,const struct device_node * node,const char * propname,int index,enum gpiod_flags dflags,const char * label)646 struct gpio_desc *devm_gpiod_get_from_of_node(struct device *dev,
647 					      const struct device_node *node,
648 					      const char *propname, int index,
649 					      enum gpiod_flags dflags,
650 					      const char *label)
651 {
652 	return ERR_PTR(-ENOSYS);
653 }
654 
655 #endif /* CONFIG_GPIOLIB */
656 
657 struct acpi_gpio_params {
658 	unsigned int crs_entry_index;
659 	unsigned int line_index;
660 	bool active_low;
661 };
662 
663 struct acpi_gpio_mapping {
664 	const char *name;
665 	const struct acpi_gpio_params *data;
666 	unsigned int size;
667 
668 /* Ignore IoRestriction field */
669 #define ACPI_GPIO_QUIRK_NO_IO_RESTRICTION	BIT(0)
670 /*
671  * When ACPI GPIO mapping table is in use the index parameter inside it
672  * refers to the GPIO resource in _CRS method. That index has no
673  * distinction of actual type of the resource. When consumer wants to
674  * get GpioIo type explicitly, this quirk may be used.
675  */
676 #define ACPI_GPIO_QUIRK_ONLY_GPIOIO		BIT(1)
677 /* Use given pin as an absolute GPIO number in the system */
678 #define ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER		BIT(2)
679 
680 	unsigned int quirks;
681 };
682 
683 struct acpi_device;
684 
685 #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_ACPI)
686 
687 int acpi_dev_add_driver_gpios(struct acpi_device *adev,
688 			      const struct acpi_gpio_mapping *gpios);
689 void acpi_dev_remove_driver_gpios(struct acpi_device *adev);
690 
691 int devm_acpi_dev_add_driver_gpios(struct device *dev,
692 				   const struct acpi_gpio_mapping *gpios);
693 void devm_acpi_dev_remove_driver_gpios(struct device *dev);
694 
695 struct gpio_desc *acpi_get_and_request_gpiod(char *path, int pin, char *label);
696 
697 #else  /* CONFIG_GPIOLIB && CONFIG_ACPI */
698 
acpi_dev_add_driver_gpios(struct acpi_device * adev,const struct acpi_gpio_mapping * gpios)699 static inline int acpi_dev_add_driver_gpios(struct acpi_device *adev,
700 			      const struct acpi_gpio_mapping *gpios)
701 {
702 	return -ENXIO;
703 }
acpi_dev_remove_driver_gpios(struct acpi_device * adev)704 static inline void acpi_dev_remove_driver_gpios(struct acpi_device *adev) {}
705 
devm_acpi_dev_add_driver_gpios(struct device * dev,const struct acpi_gpio_mapping * gpios)706 static inline int devm_acpi_dev_add_driver_gpios(struct device *dev,
707 			      const struct acpi_gpio_mapping *gpios)
708 {
709 	return -ENXIO;
710 }
devm_acpi_dev_remove_driver_gpios(struct device * dev)711 static inline void devm_acpi_dev_remove_driver_gpios(struct device *dev) {}
712 
713 #endif /* CONFIG_GPIOLIB && CONFIG_ACPI */
714 
715 
716 #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
717 
718 int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
719 int gpiod_export_link(struct device *dev, const char *name,
720 		      struct gpio_desc *desc);
721 void gpiod_unexport(struct gpio_desc *desc);
722 
723 #else  /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
724 
gpiod_export(struct gpio_desc * desc,bool direction_may_change)725 static inline int gpiod_export(struct gpio_desc *desc,
726 			       bool direction_may_change)
727 {
728 	return -ENOSYS;
729 }
730 
gpiod_export_link(struct device * dev,const char * name,struct gpio_desc * desc)731 static inline int gpiod_export_link(struct device *dev, const char *name,
732 				    struct gpio_desc *desc)
733 {
734 	return -ENOSYS;
735 }
736 
gpiod_unexport(struct gpio_desc * desc)737 static inline void gpiod_unexport(struct gpio_desc *desc)
738 {
739 }
740 
741 #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
742 
743 #endif
744