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
8#ifdef CONFIG_GPIOLIB
9
10#include <linux/compiler.h>
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#ifndef ARCH_NR_GPIOS
26#define ARCH_NR_GPIOS 256
27#endif
28
29
30
31
32
33
34
35
36
37
38static inline bool gpio_is_valid(int number)
39{
40 return number >= 0 && number < ARCH_NR_GPIOS;
41}
42
43struct device;
44struct gpio;
45struct seq_file;
46struct module;
47struct device_node;
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91struct gpio_chip {
92 const char *label;
93 struct device *dev;
94 struct module *owner;
95
96 int (*request)(struct gpio_chip *chip,
97 unsigned offset);
98 void (*free)(struct gpio_chip *chip,
99 unsigned offset);
100
101 int (*direction_input)(struct gpio_chip *chip,
102 unsigned offset);
103 int (*get)(struct gpio_chip *chip,
104 unsigned offset);
105 int (*direction_output)(struct gpio_chip *chip,
106 unsigned offset, int value);
107 int (*set_debounce)(struct gpio_chip *chip,
108 unsigned offset, unsigned debounce);
109
110 void (*set)(struct gpio_chip *chip,
111 unsigned offset, int value);
112
113 int (*to_irq)(struct gpio_chip *chip,
114 unsigned offset);
115
116 void (*dbg_show)(struct seq_file *s,
117 struct gpio_chip *chip);
118 int base;
119 u16 ngpio;
120 const char *const *names;
121 unsigned can_sleep:1;
122 unsigned exported:1;
123
124#if defined(CONFIG_OF_GPIO)
125
126
127
128
129 struct device_node *of_node;
130 int of_gpio_n_cells;
131 int (*of_xlate)(struct gpio_chip *gc, struct device_node *np,
132 const void *gpio_spec, u32 *flags);
133#endif
134};
135
136extern const char *gpiochip_is_requested(struct gpio_chip *chip,
137 unsigned offset);
138extern int __must_check gpiochip_reserve(int start, int ngpio);
139
140
141extern int gpiochip_add(struct gpio_chip *chip);
142extern int __must_check gpiochip_remove(struct gpio_chip *chip);
143extern struct gpio_chip *gpiochip_find(void *data,
144 int (*match)(struct gpio_chip *chip,
145 void *data));
146
147
148
149
150
151extern int gpio_request(unsigned gpio, const char *label);
152extern void gpio_free(unsigned gpio);
153
154extern int gpio_direction_input(unsigned gpio);
155extern int gpio_direction_output(unsigned gpio, int value);
156
157extern int gpio_set_debounce(unsigned gpio, unsigned debounce);
158
159extern int gpio_get_value_cansleep(unsigned gpio);
160extern void gpio_set_value_cansleep(unsigned gpio, int value);
161
162
163
164
165
166
167extern int __gpio_get_value(unsigned gpio);
168extern void __gpio_set_value(unsigned gpio, int value);
169
170extern int __gpio_cansleep(unsigned gpio);
171
172extern int __gpio_to_irq(unsigned gpio);
173
174extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
175extern int gpio_request_array(const struct gpio *array, size_t num);
176extern void gpio_free_array(const struct gpio *array, size_t num);
177
178#ifdef CONFIG_GPIO_SYSFS
179
180
181
182
183
184extern int gpio_export(unsigned gpio, bool direction_may_change);
185extern int gpio_export_link(struct device *dev, const char *name,
186 unsigned gpio);
187extern int gpio_sysfs_set_active_low(unsigned gpio, int value);
188extern void gpio_unexport(unsigned gpio);
189
190#endif
191
192#else
193
194static inline bool gpio_is_valid(int number)
195{
196
197 return number >= 0;
198}
199
200
201
202
203
204static inline int gpio_cansleep(unsigned gpio)
205{
206 return 0;
207}
208
209static inline int gpio_get_value_cansleep(unsigned gpio)
210{
211 might_sleep();
212 return __gpio_get_value(gpio);
213}
214
215static inline void gpio_set_value_cansleep(unsigned gpio, int value)
216{
217 might_sleep();
218 __gpio_set_value(gpio, value);
219}
220
221#endif
222
223#ifndef CONFIG_GPIO_SYSFS
224
225struct device;
226
227
228
229static inline int gpio_export(unsigned gpio, bool direction_may_change)
230{
231 return -ENOSYS;
232}
233
234static inline int gpio_export_link(struct device *dev, const char *name,
235 unsigned gpio)
236{
237 return -ENOSYS;
238}
239
240static inline int gpio_sysfs_set_active_low(unsigned gpio, int value)
241{
242 return -ENOSYS;
243}
244
245static inline void gpio_unexport(unsigned gpio)
246{
247}
248#endif
249
250#endif
251