blob: 8f702fcbe4853e349235813c3438493b362fea3c [file] [log] [blame]
Alexandre Courbot79a9bec2013-10-17 10:21:36 -07001#ifndef __LINUX_GPIO_CONSUMER_H
2#define __LINUX_GPIO_CONSUMER_H
3
Arnd Bergmanncdf86cd22014-05-08 15:42:25 +02004#include <linux/bug.h>
Alexandre Courbot79a9bec2013-10-17 10:21:36 -07005#include <linux/err.h>
6#include <linux/kernel.h>
7
Alexandre Courbot79a9bec2013-10-17 10:21:36 -07008struct device;
Alexandre Courbot79a9bec2013-10-17 10:21:36 -07009
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 */
17struct gpio_desc;
18
Rojhalat Ibrahim66858522015-02-11 17:27:58 +010019/**
20 * Struct containing an array of descriptors that can be obtained using
21 * gpiod_get_array().
22 */
23struct gpio_descs {
24 unsigned int ndescs;
25 struct gpio_desc *desc[];
26};
27
Alexandre Courbot39b2bbe2014-07-25 23:38:36 +090028#define GPIOD_FLAGS_BIT_DIR_SET BIT(0)
29#define GPIOD_FLAGS_BIT_DIR_OUT BIT(1)
30#define GPIOD_FLAGS_BIT_DIR_VAL BIT(2)
31
32/**
33 * Optional flags that can be passed to one of gpiod_* to configure direction
34 * and output value. These values cannot be OR'd.
35 */
36enum gpiod_flags {
37 GPIOD_ASIS = 0,
38 GPIOD_IN = GPIOD_FLAGS_BIT_DIR_SET,
39 GPIOD_OUT_LOW = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT,
40 GPIOD_OUT_HIGH = GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
41 GPIOD_FLAGS_BIT_DIR_VAL,
42};
43
Linus Walleij58b84f62014-08-19 12:00:53 -050044#ifdef CONFIG_GPIOLIB
45
Rojhalat Ibrahim66858522015-02-11 17:27:58 +010046/* Return the number of GPIOs associated with a device / function */
47int gpiod_count(struct device *dev, const char *con_id);
48
Alexandre Courbotbae48da2013-10-17 10:21:38 -070049/* Acquire and dispose GPIOs */
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +010050struct gpio_desc *__must_check gpiod_get(struct device *dev,
Alexandre Courbot39b2bbe2014-07-25 23:38:36 +090051 const char *con_id,
52 enum gpiod_flags flags);
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +010053struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
Alexandre Courbotbae48da2013-10-17 10:21:38 -070054 const char *con_id,
Alexandre Courbot39b2bbe2014-07-25 23:38:36 +090055 unsigned int idx,
56 enum gpiod_flags flags);
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +010057struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
Alexandre Courbot39b2bbe2014-07-25 23:38:36 +090058 const char *con_id,
59 enum gpiod_flags flags);
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +010060struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
Thierry Reding29a1f2332014-04-25 17:10:06 +020061 const char *con_id,
Alexandre Courbot39b2bbe2014-07-25 23:38:36 +090062 unsigned int index,
63 enum gpiod_flags flags);
Rojhalat Ibrahim66858522015-02-11 17:27:58 +010064struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
65 const char *con_id,
66 enum gpiod_flags flags);
67struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
68 const char *con_id,
69 enum gpiod_flags flags);
Alexandre Courbotbae48da2013-10-17 10:21:38 -070070void gpiod_put(struct gpio_desc *desc);
Rojhalat Ibrahim66858522015-02-11 17:27:58 +010071void gpiod_put_array(struct gpio_descs *descs);
Alexandre Courbotbae48da2013-10-17 10:21:38 -070072
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +010073struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
Alexandre Courbot39b2bbe2014-07-25 23:38:36 +090074 const char *con_id,
75 enum gpiod_flags flags);
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +010076struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
Alexandre Courbotbae48da2013-10-17 10:21:38 -070077 const char *con_id,
Alexandre Courbot39b2bbe2014-07-25 23:38:36 +090078 unsigned int idx,
79 enum gpiod_flags flags);
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +010080struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
Alexandre Courbot39b2bbe2014-07-25 23:38:36 +090081 const char *con_id,
82 enum gpiod_flags flags);
Thierry Reding29a1f2332014-04-25 17:10:06 +020083struct gpio_desc *__must_check
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +010084devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
Alexandre Courbot39b2bbe2014-07-25 23:38:36 +090085 unsigned int index, enum gpiod_flags flags);
Rojhalat Ibrahim331758e2015-02-11 17:28:02 +010086struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
87 const char *con_id,
88 enum gpiod_flags flags);
89struct gpio_descs *__must_check
90devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
91 enum gpiod_flags flags);
Alexandre Courbotbae48da2013-10-17 10:21:38 -070092void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
Rojhalat Ibrahim331758e2015-02-11 17:28:02 +010093void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs);
Alexandre Courbotbae48da2013-10-17 10:21:38 -070094
Alexandre Courbot8e53b0f2014-11-25 17:16:31 +090095int gpiod_get_direction(struct gpio_desc *desc);
Alexandre Courbot79a9bec2013-10-17 10:21:36 -070096int gpiod_direction_input(struct gpio_desc *desc);
97int gpiod_direction_output(struct gpio_desc *desc, int value);
Philipp Zabelef70bbe2014-01-07 12:34:11 +010098int gpiod_direction_output_raw(struct gpio_desc *desc, int value);
Alexandre Courbot79a9bec2013-10-17 10:21:36 -070099
100/* Value get/set from non-sleeping context */
101int gpiod_get_value(const struct gpio_desc *desc);
102void gpiod_set_value(struct gpio_desc *desc, int value);
Rojhalat Ibrahim3fff99b2015-05-13 11:04:56 +0200103void gpiod_set_array_value(unsigned int array_size,
104 struct gpio_desc **desc_array, int *value_array);
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700105int gpiod_get_raw_value(const struct gpio_desc *desc);
106void gpiod_set_raw_value(struct gpio_desc *desc, int value);
Rojhalat Ibrahim3fff99b2015-05-13 11:04:56 +0200107void gpiod_set_raw_array_value(unsigned int array_size,
108 struct gpio_desc **desc_array,
109 int *value_array);
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700110
111/* Value get/set from sleeping context */
112int gpiod_get_value_cansleep(const struct gpio_desc *desc);
113void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
Rojhalat Ibrahim3fff99b2015-05-13 11:04:56 +0200114void gpiod_set_array_value_cansleep(unsigned int array_size,
115 struct gpio_desc **desc_array,
116 int *value_array);
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700117int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
118void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
Rojhalat Ibrahim3fff99b2015-05-13 11:04:56 +0200119void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
120 struct gpio_desc **desc_array,
121 int *value_array);
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700122
123int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
124
125int gpiod_is_active_low(const struct gpio_desc *desc);
126int gpiod_cansleep(const struct gpio_desc *desc);
127
128int gpiod_to_irq(const struct gpio_desc *desc);
129
130/* Convert between the old gpio_ and new gpiod_ interfaces */
131struct gpio_desc *gpio_to_desc(unsigned gpio);
132int desc_to_gpio(const struct gpio_desc *desc);
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700133
Mika Westerberg40b73182014-10-21 13:33:59 +0200134/* Child properties interface */
135struct fwnode_handle;
136
137struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
Boris Brezillon537b94d2017-02-02 14:53:11 +0100138 const char *propname, int index,
Alexander Steinb2987d72017-01-12 17:39:24 +0100139 enum gpiod_flags dflags,
140 const char *label);
Boris Brezillon537b94d2017-02-02 14:53:11 +0100141struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
142 const char *con_id, int index,
143 struct fwnode_handle *child,
144 enum gpiod_flags flags,
145 const char *label);
Linus Walleij3498d862017-02-21 14:19:45 +0100146
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700147#else /* CONFIG_GPIOLIB */
148
Rojhalat Ibrahim66858522015-02-11 17:27:58 +0100149static inline int gpiod_count(struct device *dev, const char *con_id)
150{
151 return 0;
152}
153
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +0100154static inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
155 const char *con_id,
156 enum gpiod_flags flags)
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700157{
158 return ERR_PTR(-ENOSYS);
159}
Linus Walleij0dbc8b72014-09-01 15:15:40 +0200160static inline struct gpio_desc *__must_check
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +0100161gpiod_get_index(struct device *dev,
162 const char *con_id,
163 unsigned int idx,
164 enum gpiod_flags flags)
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700165{
166 return ERR_PTR(-ENOSYS);
167}
Thierry Reding29a1f2332014-04-25 17:10:06 +0200168
169static inline struct gpio_desc *__must_check
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +0100170gpiod_get_optional(struct device *dev, const char *con_id,
171 enum gpiod_flags flags)
Thierry Reding29a1f2332014-04-25 17:10:06 +0200172{
Dmitry Torokhov22c40362017-02-12 17:13:55 -0800173 return NULL;
Thierry Reding29a1f2332014-04-25 17:10:06 +0200174}
175
176static inline struct gpio_desc *__must_check
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +0100177gpiod_get_index_optional(struct device *dev, const char *con_id,
178 unsigned int index, enum gpiod_flags flags)
Thierry Reding29a1f2332014-04-25 17:10:06 +0200179{
Dmitry Torokhov22c40362017-02-12 17:13:55 -0800180 return NULL;
Thierry Reding29a1f2332014-04-25 17:10:06 +0200181}
182
Rojhalat Ibrahim66858522015-02-11 17:27:58 +0100183static inline struct gpio_descs *__must_check
184gpiod_get_array(struct device *dev, const char *con_id,
185 enum gpiod_flags flags)
186{
187 return ERR_PTR(-ENOSYS);
188}
189
190static inline struct gpio_descs *__must_check
191gpiod_get_array_optional(struct device *dev, const char *con_id,
192 enum gpiod_flags flags)
193{
Dmitry Torokhov22c40362017-02-12 17:13:55 -0800194 return NULL;
Rojhalat Ibrahim66858522015-02-11 17:27:58 +0100195}
196
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700197static inline void gpiod_put(struct gpio_desc *desc)
198{
199 might_sleep();
200
201 /* GPIO can never have been requested */
202 WARN_ON(1);
203}
204
Rojhalat Ibrahim66858522015-02-11 17:27:58 +0100205static inline void gpiod_put_array(struct gpio_descs *descs)
206{
207 might_sleep();
208
209 /* GPIO can never have been requested */
210 WARN_ON(1);
211}
212
Linus Walleij0dbc8b72014-09-01 15:15:40 +0200213static inline struct gpio_desc *__must_check
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +0100214devm_gpiod_get(struct device *dev,
Linus Walleij0dbc8b72014-09-01 15:15:40 +0200215 const char *con_id,
216 enum gpiod_flags flags)
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700217{
218 return ERR_PTR(-ENOSYS);
219}
220static inline
Linus Walleij0dbc8b72014-09-01 15:15:40 +0200221struct gpio_desc *__must_check
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +0100222devm_gpiod_get_index(struct device *dev,
Linus Walleij0dbc8b72014-09-01 15:15:40 +0200223 const char *con_id,
224 unsigned int idx,
225 enum gpiod_flags flags)
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700226{
227 return ERR_PTR(-ENOSYS);
228}
Thierry Reding29a1f2332014-04-25 17:10:06 +0200229
230static inline struct gpio_desc *__must_check
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +0100231devm_gpiod_get_optional(struct device *dev, const char *con_id,
Linus Walleij0dbc8b72014-09-01 15:15:40 +0200232 enum gpiod_flags flags)
Thierry Reding29a1f2332014-04-25 17:10:06 +0200233{
Dmitry Torokhov22c40362017-02-12 17:13:55 -0800234 return NULL;
Thierry Reding29a1f2332014-04-25 17:10:06 +0200235}
236
237static inline struct gpio_desc *__must_check
Uwe Kleine-Königb17d1bf2015-02-11 11:52:37 +0100238devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
Linus Walleij0dbc8b72014-09-01 15:15:40 +0200239 unsigned int index, enum gpiod_flags flags)
Thierry Reding29a1f2332014-04-25 17:10:06 +0200240{
Dmitry Torokhov22c40362017-02-12 17:13:55 -0800241 return NULL;
Thierry Reding29a1f2332014-04-25 17:10:06 +0200242}
243
Rojhalat Ibrahim331758e2015-02-11 17:28:02 +0100244static inline struct gpio_descs *__must_check
245devm_gpiod_get_array(struct device *dev, const char *con_id,
246 enum gpiod_flags flags)
247{
248 return ERR_PTR(-ENOSYS);
249}
250
251static inline struct gpio_descs *__must_check
252devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
253 enum gpiod_flags flags)
254{
Dmitry Torokhov22c40362017-02-12 17:13:55 -0800255 return NULL;
Rojhalat Ibrahim331758e2015-02-11 17:28:02 +0100256}
257
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700258static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
259{
260 might_sleep();
261
262 /* GPIO can never have been requested */
263 WARN_ON(1);
264}
265
Rojhalat Ibrahim331758e2015-02-11 17:28:02 +0100266static inline void devm_gpiod_put_array(struct device *dev,
267 struct gpio_descs *descs)
268{
269 might_sleep();
270
271 /* GPIO can never have been requested */
272 WARN_ON(1);
273}
274
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700275
276static inline int gpiod_get_direction(const struct gpio_desc *desc)
277{
278 /* GPIO can never have been requested */
279 WARN_ON(1);
280 return -ENOSYS;
281}
282static inline int gpiod_direction_input(struct gpio_desc *desc)
283{
284 /* GPIO can never have been requested */
285 WARN_ON(1);
286 return -ENOSYS;
287}
288static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
289{
290 /* GPIO can never have been requested */
291 WARN_ON(1);
292 return -ENOSYS;
293}
Philipp Zabelef70bbe2014-01-07 12:34:11 +0100294static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
295{
296 /* GPIO can never have been requested */
297 WARN_ON(1);
298 return -ENOSYS;
299}
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700300
301
302static inline int gpiod_get_value(const struct gpio_desc *desc)
303{
304 /* GPIO can never have been requested */
305 WARN_ON(1);
306 return 0;
307}
308static inline void gpiod_set_value(struct gpio_desc *desc, int value)
309{
310 /* GPIO can never have been requested */
311 WARN_ON(1);
312}
Rojhalat Ibrahim3fff99b2015-05-13 11:04:56 +0200313static inline void gpiod_set_array_value(unsigned int array_size,
314 struct gpio_desc **desc_array,
315 int *value_array)
Rojhalat Ibrahim5f424242014-11-04 17:12:06 +0100316{
317 /* GPIO can never have been requested */
318 WARN_ON(1);
319}
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700320static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
321{
322 /* GPIO can never have been requested */
323 WARN_ON(1);
324 return 0;
325}
326static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
327{
328 /* GPIO can never have been requested */
329 WARN_ON(1);
330}
Rojhalat Ibrahim3fff99b2015-05-13 11:04:56 +0200331static inline void gpiod_set_raw_array_value(unsigned int array_size,
332 struct gpio_desc **desc_array,
333 int *value_array)
Rojhalat Ibrahim5f424242014-11-04 17:12:06 +0100334{
335 /* GPIO can never have been requested */
336 WARN_ON(1);
337}
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700338
339static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
340{
341 /* GPIO can never have been requested */
342 WARN_ON(1);
343 return 0;
344}
345static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
346{
347 /* GPIO can never have been requested */
348 WARN_ON(1);
349}
Rojhalat Ibrahim3fff99b2015-05-13 11:04:56 +0200350static inline void gpiod_set_array_value_cansleep(unsigned int array_size,
Rojhalat Ibrahim5f424242014-11-04 17:12:06 +0100351 struct gpio_desc **desc_array,
352 int *value_array)
353{
354 /* GPIO can never have been requested */
355 WARN_ON(1);
356}
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700357static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
358{
359 /* GPIO can never have been requested */
360 WARN_ON(1);
361 return 0;
362}
363static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
364 int value)
365{
366 /* GPIO can never have been requested */
367 WARN_ON(1);
368}
Rojhalat Ibrahim3fff99b2015-05-13 11:04:56 +0200369static inline void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
Rojhalat Ibrahim5f424242014-11-04 17:12:06 +0100370 struct gpio_desc **desc_array,
371 int *value_array)
372{
373 /* GPIO can never have been requested */
374 WARN_ON(1);
375}
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700376
377static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
378{
379 /* GPIO can never have been requested */
380 WARN_ON(1);
381 return -ENOSYS;
382}
383
384static inline int gpiod_is_active_low(const struct gpio_desc *desc)
385{
386 /* GPIO can never have been requested */
387 WARN_ON(1);
388 return 0;
389}
390static inline int gpiod_cansleep(const struct gpio_desc *desc)
391{
392 /* GPIO can never have been requested */
393 WARN_ON(1);
394 return 0;
395}
396
397static inline int gpiod_to_irq(const struct gpio_desc *desc)
398{
399 /* GPIO can never have been requested */
400 WARN_ON(1);
401 return -EINVAL;
402}
403
404static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
405{
406 return ERR_PTR(-EINVAL);
407}
Markus Pargmannc0017ed2015-08-14 16:10:59 +0200408
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700409static inline int desc_to_gpio(const struct gpio_desc *desc)
410{
411 /* GPIO can never have been requested */
412 WARN_ON(1);
413 return -EINVAL;
414}
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700415
Geert Uytterhoeven496e7ce2015-05-07 01:08:08 -0700416/* Child properties interface */
417struct fwnode_handle;
418
Andy Shevchenkoa264d102017-01-09 16:02:28 +0200419static inline
420struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
Boris Brezillon537b94d2017-02-02 14:53:11 +0100421 const char *propname, int index,
Alexander Steinb2987d72017-01-12 17:39:24 +0100422 enum gpiod_flags dflags,
423 const char *label)
Geert Uytterhoeven496e7ce2015-05-07 01:08:08 -0700424{
425 return ERR_PTR(-ENOSYS);
426}
427
Andy Shevchenkoa264d102017-01-09 16:02:28 +0200428static inline
Boris Brezillon537b94d2017-02-02 14:53:11 +0100429struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
430 const char *con_id, int index,
431 struct fwnode_handle *child,
432 enum gpiod_flags flags,
433 const char *label)
434{
435 return ERR_PTR(-ENOSYS);
436}
437
438#endif /* CONFIG_GPIOLIB */
439
440static inline
Boris Brezillon4b094792017-02-02 14:53:10 +0100441struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev,
442 const char *con_id,
443 struct fwnode_handle *child,
444 enum gpiod_flags flags,
445 const char *label)
Geert Uytterhoeven496e7ce2015-05-07 01:08:08 -0700446{
Boris Brezillon537b94d2017-02-02 14:53:11 +0100447 return devm_fwnode_get_index_gpiod_from_child(dev, con_id, 0, child,
448 flags, label);
Geert Uytterhoeven496e7ce2015-05-07 01:08:08 -0700449}
450
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700451#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
452
453int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
454int gpiod_export_link(struct device *dev, const char *name,
455 struct gpio_desc *desc);
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700456void gpiod_unexport(struct gpio_desc *desc);
457
458#else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
459
460static inline int gpiod_export(struct gpio_desc *desc,
461 bool direction_may_change)
462{
463 return -ENOSYS;
464}
465
466static inline int gpiod_export_link(struct device *dev, const char *name,
467 struct gpio_desc *desc)
468{
469 return -ENOSYS;
470}
471
Alexandre Courbot79a9bec2013-10-17 10:21:36 -0700472static inline void gpiod_unexport(struct gpio_desc *desc)
473{
474}
475
476#endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
477
478#endif