xref: /linux-6.15/include/linux/of_gpio.h (revision 40fc56ee)
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * OF helpers for the GPIO API
4  *
5  * Copyright (c) 2007-2008  MontaVista Software, Inc.
6  *
7  * Author: Anton Vorontsov <[email protected]>
8  */
9 
10 #ifndef __LINUX_OF_GPIO_H
11 #define __LINUX_OF_GPIO_H
12 
13 #include <linux/compiler.h>
14 #include <linux/gpio/driver.h>
15 #include <linux/gpio.h>		/* FIXME: Shouldn't be here */
16 #include <linux/of.h>
17 
18 struct device_node;
19 
20 /*
21  * This is Linux-specific flags. By default controllers' and Linux' mapping
22  * match, but GPIO controllers are free to translate their own flags to
23  * Linux-specific in their .xlate callback. Though, 1:1 mapping is recommended.
24  */
25 enum of_gpio_flags {
26 	OF_GPIO_ACTIVE_LOW = 0x1,
27 	OF_GPIO_SINGLE_ENDED = 0x2,
28 	OF_GPIO_OPEN_DRAIN = 0x4,
29 	OF_GPIO_TRANSITORY = 0x8,
30 	OF_GPIO_PULL_UP = 0x10,
31 	OF_GPIO_PULL_DOWN = 0x20,
32 	OF_GPIO_PULL_DISABLE = 0x40,
33 };
34 
35 #ifdef CONFIG_OF_GPIO
36 
37 #include <linux/container_of.h>
38 
39 /*
40  * OF GPIO chip for memory mapped banks
41  */
42 struct of_mm_gpio_chip {
43 	struct gpio_chip gc;
44 	void (*save_regs)(struct of_mm_gpio_chip *mm_gc);
45 	void __iomem *regs;
46 };
47 
48 static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
49 {
50 	return container_of(gc, struct of_mm_gpio_chip, gc);
51 }
52 
53 extern int of_get_named_gpio(const struct device_node *np,
54 			     const char *list_name, int index);
55 
56 extern int of_mm_gpiochip_add_data(struct device_node *np,
57 				   struct of_mm_gpio_chip *mm_gc,
58 				   void *data);
59 static inline int of_mm_gpiochip_add(struct device_node *np,
60 				     struct of_mm_gpio_chip *mm_gc)
61 {
62 	return of_mm_gpiochip_add_data(np, mm_gc, NULL);
63 }
64 extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc);
65 
66 #else /* CONFIG_OF_GPIO */
67 
68 #include <linux/errno.h>
69 
70 /* Drivers may not strictly depend on the GPIO support, so let them link. */
71 static inline int of_get_named_gpio(const struct device_node *np,
72                                    const char *propname, int index)
73 {
74 	return -ENOSYS;
75 }
76 
77 #endif /* CONFIG_OF_GPIO */
78 
79 #endif /* __LINUX_OF_GPIO_H */
80