Merge branch 'for-3.14-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj...
[sfrench/cifs-2.6.git] / include / linux / gpio / consumer.h
1 #ifndef __LINUX_GPIO_CONSUMER_H
2 #define __LINUX_GPIO_CONSUMER_H
3
4 #include <linux/err.h>
5 #include <linux/kernel.h>
6
7 struct device;
8 struct gpio_chip;
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 void gpiod_put(struct gpio_desc *desc);
28
29 struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
30                                               const char *con_id);
31 struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
32                                                     const char *con_id,
33                                                     unsigned int idx);
34 void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
35
36 int gpiod_get_direction(const struct gpio_desc *desc);
37 int gpiod_direction_input(struct gpio_desc *desc);
38 int gpiod_direction_output(struct gpio_desc *desc, int value);
39
40 /* Value get/set from non-sleeping context */
41 int gpiod_get_value(const struct gpio_desc *desc);
42 void gpiod_set_value(struct gpio_desc *desc, int value);
43 int gpiod_get_raw_value(const struct gpio_desc *desc);
44 void gpiod_set_raw_value(struct gpio_desc *desc, int value);
45
46 /* Value get/set from sleeping context */
47 int gpiod_get_value_cansleep(const struct gpio_desc *desc);
48 void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
49 int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
50 void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
51
52 int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
53
54 int gpiod_is_active_low(const struct gpio_desc *desc);
55 int gpiod_cansleep(const struct gpio_desc *desc);
56
57 int gpiod_to_irq(const struct gpio_desc *desc);
58
59 /* Convert between the old gpio_ and new gpiod_ interfaces */
60 struct gpio_desc *gpio_to_desc(unsigned gpio);
61 int desc_to_gpio(const struct gpio_desc *desc);
62 struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
63
64 #else /* CONFIG_GPIOLIB */
65
66 static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
67                                                        const char *con_id)
68 {
69         return ERR_PTR(-ENOSYS);
70 }
71 static inline struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
72                                                              const char *con_id,
73                                                              unsigned int idx)
74 {
75         return ERR_PTR(-ENOSYS);
76 }
77 static inline void gpiod_put(struct gpio_desc *desc)
78 {
79         might_sleep();
80
81         /* GPIO can never have been requested */
82         WARN_ON(1);
83 }
84
85 static inline struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
86                                                             const char *con_id)
87 {
88         return ERR_PTR(-ENOSYS);
89 }
90 static inline
91 struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
92                                                     const char *con_id,
93                                                     unsigned int idx)
94 {
95         return ERR_PTR(-ENOSYS);
96 }
97 static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
98 {
99         might_sleep();
100
101         /* GPIO can never have been requested */
102         WARN_ON(1);
103 }
104
105
106 static inline int gpiod_get_direction(const struct gpio_desc *desc)
107 {
108         /* GPIO can never have been requested */
109         WARN_ON(1);
110         return -ENOSYS;
111 }
112 static inline int gpiod_direction_input(struct gpio_desc *desc)
113 {
114         /* GPIO can never have been requested */
115         WARN_ON(1);
116         return -ENOSYS;
117 }
118 static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
119 {
120         /* GPIO can never have been requested */
121         WARN_ON(1);
122         return -ENOSYS;
123 }
124
125
126 static inline int gpiod_get_value(const struct gpio_desc *desc)
127 {
128         /* GPIO can never have been requested */
129         WARN_ON(1);
130         return 0;
131 }
132 static inline void gpiod_set_value(struct gpio_desc *desc, int value)
133 {
134         /* GPIO can never have been requested */
135         WARN_ON(1);
136 }
137 static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
138 {
139         /* GPIO can never have been requested */
140         WARN_ON(1);
141         return 0;
142 }
143 static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
144 {
145         /* GPIO can never have been requested */
146         WARN_ON(1);
147 }
148
149 static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
150 {
151         /* GPIO can never have been requested */
152         WARN_ON(1);
153         return 0;
154 }
155 static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
156 {
157         /* GPIO can never have been requested */
158         WARN_ON(1);
159 }
160 static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
161 {
162         /* GPIO can never have been requested */
163         WARN_ON(1);
164         return 0;
165 }
166 static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
167                                                 int value)
168 {
169         /* GPIO can never have been requested */
170         WARN_ON(1);
171 }
172
173 static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
174 {
175         /* GPIO can never have been requested */
176         WARN_ON(1);
177         return -ENOSYS;
178 }
179
180 static inline int gpiod_is_active_low(const struct gpio_desc *desc)
181 {
182         /* GPIO can never have been requested */
183         WARN_ON(1);
184         return 0;
185 }
186 static inline int gpiod_cansleep(const struct gpio_desc *desc)
187 {
188         /* GPIO can never have been requested */
189         WARN_ON(1);
190         return 0;
191 }
192
193 static inline int gpiod_to_irq(const struct gpio_desc *desc)
194 {
195         /* GPIO can never have been requested */
196         WARN_ON(1);
197         return -EINVAL;
198 }
199
200 static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
201 {
202         return ERR_PTR(-EINVAL);
203 }
204 static inline int desc_to_gpio(const struct gpio_desc *desc)
205 {
206         /* GPIO can never have been requested */
207         WARN_ON(1);
208         return -EINVAL;
209 }
210 static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
211 {
212         /* GPIO can never have been requested */
213         WARN_ON(1);
214         return ERR_PTR(-ENODEV);
215 }
216
217
218 #endif /* CONFIG_GPIOLIB */
219
220 #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
221
222 int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
223 int gpiod_export_link(struct device *dev, const char *name,
224                       struct gpio_desc *desc);
225 int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value);
226 void gpiod_unexport(struct gpio_desc *desc);
227
228 #else  /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
229
230 static inline int gpiod_export(struct gpio_desc *desc,
231                                bool direction_may_change)
232 {
233         return -ENOSYS;
234 }
235
236 static inline int gpiod_export_link(struct device *dev, const char *name,
237                                     struct gpio_desc *desc)
238 {
239         return -ENOSYS;
240 }
241
242 static inline int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
243 {
244         return -ENOSYS;
245 }
246
247 static inline void gpiod_unexport(struct gpio_desc *desc)
248 {
249 }
250
251 #endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
252
253 #endif