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