Linux-libre 3.16.41-gnu
[librecmc/linux-libre.git] / include / linux / gpio / consumer.h
1 #ifndef __LINUX_GPIO_CONSUMER_H
2 #define __LINUX_GPIO_CONSUMER_H
3
4 #include <linux/bug.h>
5 #include <linux/err.h>
6 #include <linux/kernel.h>
7
8 struct device;
9
10 /**
11  * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are
12  * preferable to the old integer-based handles.
13  *
14  * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid
15  * until the GPIO is released.
16  */
17 struct gpio_desc;
18
19 #ifdef CONFIG_GPIOLIB
20
21 /* Acquire and dispose GPIOs */
22 struct gpio_desc *__must_check gpiod_get(struct device *dev,
23                                          const char *con_id);
24 struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
25                                                const char *con_id,
26                                                unsigned int idx);
27 struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
28                                                   const char *con_id);
29 struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
30                                                         const char *con_id,
31                                                         unsigned int index);
32
33 void gpiod_put(struct gpio_desc *desc);
34
35 struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
36                                               const char *con_id);
37 struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
38                                                     const char *con_id,
39                                                     unsigned int idx);
40 struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
41                                                        const char *con_id);
42 struct gpio_desc *__must_check
43 devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
44                               unsigned int index);
45
46 void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
47
48 int gpiod_get_direction(const struct gpio_desc *desc);
49 int gpiod_direction_input(struct gpio_desc *desc);
50 int gpiod_direction_output(struct gpio_desc *desc, int value);
51 int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
52
53 /* Value get/set from non-sleeping context */
54 int gpiod_get_value(const struct gpio_desc *desc);
55 void gpiod_set_value(struct gpio_desc *desc, int value);
56 int gpiod_get_raw_value(const struct gpio_desc *desc);
57 void gpiod_set_raw_value(struct gpio_desc *desc, int value);
58
59 /* Value get/set from sleeping context */
60 int gpiod_get_value_cansleep(const struct gpio_desc *desc);
61 void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
62 int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
63 void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
64
65 int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
66
67 int gpiod_is_active_low(const struct gpio_desc *desc);
68 int gpiod_cansleep(const struct gpio_desc *desc);
69
70 int gpiod_to_irq(const struct gpio_desc *desc);
71
72 /* Convert between the old gpio_ and new gpiod_ interfaces */
73 struct gpio_desc *gpio_to_desc(unsigned gpio);
74 int desc_to_gpio(const struct gpio_desc *desc);
75
76 #else /* CONFIG_GPIOLIB */
77
78 static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
79                                                        const char *con_id)
80 {
81         return ERR_PTR(-ENOSYS);
82 }
83 static inline struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
84                                                              const char *con_id,
85                                                              unsigned int idx)
86 {
87         return ERR_PTR(-ENOSYS);
88 }
89
90 static inline struct gpio_desc *__must_check
91 gpiod_get_optional(struct device *dev, const char *con_id)
92 {
93         return ERR_PTR(-ENOSYS);
94 }
95
96 static inline struct gpio_desc *__must_check
97 gpiod_get_index_optional(struct device *dev, const char *con_id,
98                          unsigned int index)
99 {
100         return ERR_PTR(-ENOSYS);
101 }
102
103 static inline void gpiod_put(struct gpio_desc *desc)
104 {
105         might_sleep();
106
107         /* GPIO can never have been requested */
108         WARN_ON(1);
109 }
110
111 static inline struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
112                                                             const char *con_id)
113 {
114         return ERR_PTR(-ENOSYS);
115 }
116 static inline
117 struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
118                                                     const char *con_id,
119                                                     unsigned int idx)
120 {
121         return ERR_PTR(-ENOSYS);
122 }
123
124 static inline struct gpio_desc *__must_check
125 devm_gpiod_get_optional(struct device *dev, const char *con_id)
126 {
127         return ERR_PTR(-ENOSYS);
128 }
129
130 static inline struct gpio_desc *__must_check
131 devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
132                               unsigned int index)
133 {
134         return ERR_PTR(-ENOSYS);
135 }
136
137 static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
138 {
139         might_sleep();
140
141         /* GPIO can never have been requested */
142         WARN_ON(1);
143 }
144
145
146 static inline int gpiod_get_direction(const struct gpio_desc *desc)
147 {
148         /* GPIO can never have been requested */
149         WARN_ON(1);
150         return -ENOSYS;
151 }
152 static inline int gpiod_direction_input(struct gpio_desc *desc)
153 {
154         /* GPIO can never have been requested */
155         WARN_ON(1);
156         return -ENOSYS;
157 }
158 static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
159 {
160         /* GPIO can never have been requested */
161         WARN_ON(1);
162         return -ENOSYS;
163 }
164 static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
165 {
166         /* GPIO can never have been requested */
167         WARN_ON(1);
168         return -ENOSYS;
169 }
170
171
172 static inline int gpiod_get_value(const struct gpio_desc *desc)
173 {
174         /* GPIO can never have been requested */
175         WARN_ON(1);
176         return 0;
177 }
178 static inline void gpiod_set_value(struct gpio_desc *desc, int value)
179 {
180         /* GPIO can never have been requested */
181         WARN_ON(1);
182 }
183 static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
184 {
185         /* GPIO can never have been requested */
186         WARN_ON(1);
187         return 0;
188 }
189 static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
190 {
191         /* GPIO can never have been requested */
192         WARN_ON(1);
193 }
194
195 static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
196 {
197         /* GPIO can never have been requested */
198         WARN_ON(1);
199         return 0;
200 }
201 static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
202 {
203         /* GPIO can never have been requested */
204         WARN_ON(1);
205 }
206 static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
207 {
208         /* GPIO can never have been requested */
209         WARN_ON(1);
210         return 0;
211 }
212 static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
213                                                 int value)
214 {
215         /* GPIO can never have been requested */
216         WARN_ON(1);
217 }
218
219 static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
220 {
221         /* GPIO can never have been requested */
222         WARN_ON(1);
223         return -ENOSYS;
224 }
225
226 static inline int gpiod_is_active_low(const struct gpio_desc *desc)
227 {
228         /* GPIO can never have been requested */
229         WARN_ON(1);
230         return 0;
231 }
232 static inline int gpiod_cansleep(const struct gpio_desc *desc)
233 {
234         /* GPIO can never have been requested */
235         WARN_ON(1);
236         return 0;
237 }
238
239 static inline int gpiod_to_irq(const struct gpio_desc *desc)
240 {
241         /* GPIO can never have been requested */
242         WARN_ON(1);
243         return -EINVAL;
244 }
245
246 static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
247 {
248         return ERR_PTR(-EINVAL);
249 }
250 static inline int desc_to_gpio(const struct gpio_desc *desc)
251 {
252         /* GPIO can never have been requested */
253         WARN_ON(1);
254         return -EINVAL;
255 }
256
257
258 #endif /* CONFIG_GPIOLIB */
259
260 #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
261
262 int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
263 int gpiod_export_link(struct device *dev, const char *name,
264                       struct gpio_desc *desc);
265 int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value);
266 void gpiod_unexport(struct gpio_desc *desc);
267
268 #else  /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
269
270 static inline int gpiod_export(struct gpio_desc *desc,
271                                bool direction_may_change)
272 {
273         return -ENOSYS;
274 }
275
276 static inline int gpiod_export_link(struct device *dev, const char *name,
277                                     struct gpio_desc *desc)
278 {
279         return -ENOSYS;
280 }
281
282 static inline int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
283 {
284         return -ENOSYS;
285 }
286
287 static inline void gpiod_unexport(struct gpio_desc *desc)
288 {
289 }
290
291 #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
292
293 #endif