]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blob - include/linux/gpio/consumer.h
Merge tag 'hsi-for-3.16-fixes1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[mirror_ubuntu-zesty-kernel.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