1#ifndef _ASM_GENERIC_GPIO_H
2#define _ASM_GENERIC_GPIO_H
3
4#include <linux/kernel.h>
5#include <linux/types.h>
6#include <linux/errno.h>
7#include <linux/of.h>
8
9#ifdef CONFIG_GPIOLIB
10
11#include <linux/compiler.h>
12#include <linux/gpio/driver.h>
13#include <linux/gpio/consumer.h>
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#ifndef ARCH_NR_GPIOS
29#define ARCH_NR_GPIOS 512
30#endif
31
32
33
34
35
36
37
38
39
40
41static inline bool gpio_is_valid(int number)
42{
43 return number >= 0 && number < ARCH_NR_GPIOS;
44}
45
46struct device;
47struct gpio;
48struct seq_file;
49struct module;
50struct device_node;
51struct gpio_desc;
52
53
54static inline struct gpio_chip *gpio_to_chip(unsigned gpio)
55{
56 return gpiod_to_chip(gpio_to_desc(gpio));
57}
58
59
60
61
62extern int gpio_request(unsigned gpio, const char *label);
63extern void gpio_free(unsigned gpio);
64
65static inline int gpio_direction_input(unsigned gpio)
66{
67 return gpiod_direction_input(gpio_to_desc(gpio));
68}
69static inline int gpio_direction_output(unsigned gpio, int value)
70{
71 return gpiod_direction_output_raw(gpio_to_desc(gpio), value);
72}
73
74static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
75{
76 return gpiod_set_debounce(gpio_to_desc(gpio), debounce);
77}
78
79static inline int gpio_get_value_cansleep(unsigned gpio)
80{
81 return gpiod_get_raw_value_cansleep(gpio_to_desc(gpio));
82}
83static inline void gpio_set_value_cansleep(unsigned gpio, int value)
84{
85 return gpiod_set_raw_value_cansleep(gpio_to_desc(gpio), value);
86}
87
88
89
90
91
92
93static inline int __gpio_get_value(unsigned gpio)
94{
95 return gpiod_get_raw_value(gpio_to_desc(gpio));
96}
97static inline void __gpio_set_value(unsigned gpio, int value)
98{
99 return gpiod_set_raw_value(gpio_to_desc(gpio), value);
100}
101
102static inline int __gpio_cansleep(unsigned gpio)
103{
104 return gpiod_cansleep(gpio_to_desc(gpio));
105}
106
107static inline int __gpio_to_irq(unsigned gpio)
108{
109 return gpiod_to_irq(gpio_to_desc(gpio));
110}
111
112extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
113extern int gpio_request_array(const struct gpio *array, size_t num);
114extern void gpio_free_array(const struct gpio *array, size_t num);
115
116
117
118
119
120static inline int gpio_export(unsigned gpio, bool direction_may_change)
121{
122 return gpiod_export(gpio_to_desc(gpio), direction_may_change);
123}
124
125static inline int gpio_export_link(struct device *dev, const char *name,
126 unsigned gpio)
127{
128 return gpiod_export_link(dev, name, gpio_to_desc(gpio));
129}
130
131static inline void gpio_unexport(unsigned gpio)
132{
133 gpiod_unexport(gpio_to_desc(gpio));
134}
135
136#else
137
138static inline bool gpio_is_valid(int number)
139{
140
141 return number >= 0;
142}
143
144
145
146
147
148static inline int gpio_cansleep(unsigned gpio)
149{
150 return 0;
151}
152
153static inline int gpio_get_value_cansleep(unsigned gpio)
154{
155 might_sleep();
156 return __gpio_get_value(gpio);
157}
158
159static inline void gpio_set_value_cansleep(unsigned gpio, int value)
160{
161 might_sleep();
162 __gpio_set_value(gpio, value);
163}
164
165#endif
166
167#endif
168