consumer.h revision ef70bbe1aaa612f75360e5df5952fddec50b7ca9
179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#ifndef __LINUX_GPIO_CONSUMER_H
279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#define __LINUX_GPIO_CONSUMER_H
379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#include <linux/err.h>
579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#include <linux/kernel.h>
679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#ifdef CONFIG_GPIOLIB
879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct device;
1079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_chip;
1179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
1279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot/**
1379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are
1479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot * preferable to the old integer-based handles.
1579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot *
1679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid
1779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot * until the GPIO is released.
1879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot */
1979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_desc;
2079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
21bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot/* Acquire and dispose GPIOs */
22bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotstruct gpio_desc *__must_check gpiod_get(struct device *dev,
23bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot					 const char *con_id);
24bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotstruct gpio_desc *__must_check gpiod_get_index(struct device *dev,
25bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot					       const char *con_id,
26bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot					       unsigned int idx);
27bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotvoid gpiod_put(struct gpio_desc *desc);
28bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot
29bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotstruct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
30bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot					      const char *con_id);
31bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotstruct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
32bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot						    const char *con_id,
33bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot						    unsigned int idx);
34bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotvoid devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
35bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot
3679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_direction(const struct gpio_desc *desc);
3779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_direction_input(struct gpio_desc *desc);
3879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_direction_output(struct gpio_desc *desc, int value);
39ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabelint gpiod_direction_output_raw(struct gpio_desc *desc, int value);
4079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
4179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot/* Value get/set from non-sleeping context */
4279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_value(const struct gpio_desc *desc);
4379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_set_value(struct gpio_desc *desc, int value);
4479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_raw_value(const struct gpio_desc *desc);
4579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_set_raw_value(struct gpio_desc *desc, int value);
4679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
4779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot/* Value get/set from sleeping context */
4879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_value_cansleep(const struct gpio_desc *desc);
4979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
5079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
5179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
5279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
5379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);
5479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
5579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_is_active_low(const struct gpio_desc *desc);
5679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_cansleep(const struct gpio_desc *desc);
5779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
5879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_to_irq(const struct gpio_desc *desc);
5979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
6079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot/* Convert between the old gpio_ and new gpiod_ interfaces */
6179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_desc *gpio_to_desc(unsigned gpio);
6279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint desc_to_gpio(const struct gpio_desc *desc);
6379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
6479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
6579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#else /* CONFIG_GPIOLIB */
6679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
6779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_desc *__must_check gpiod_get(struct device *dev,
6879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot						       const char *con_id)
6979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
7079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return ERR_PTR(-ENOSYS);
7179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
7279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
7379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot							     const char *con_id,
7479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot							     unsigned int idx)
7579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
7679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return ERR_PTR(-ENOSYS);
7779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
7879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_put(struct gpio_desc *desc)
7979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
8079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	might_sleep();
8179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
8279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
8379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
8479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
8579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
8679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
8779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot							    const char *con_id)
8879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
8979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return ERR_PTR(-ENOSYS);
9079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
9179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline
9279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
9379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot						    const char *con_id,
9479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot						    unsigned int idx)
9579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
9679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return ERR_PTR(-ENOSYS);
9779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
9879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
9979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
10079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	might_sleep();
10179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
10279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
10379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
10479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
10579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
10679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
10779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_direction(const struct gpio_desc *desc)
10879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
10979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
11079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
11179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return -ENOSYS;
11279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
11379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_direction_input(struct gpio_desc *desc)
11479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
11579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
11679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
11779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return -ENOSYS;
11879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
11979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_direction_output(struct gpio_desc *desc, int value)
12079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
12179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
12279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
12379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return -ENOSYS;
12479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
125ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabelstatic inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
126ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel{
127ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel	/* GPIO can never have been requested */
128ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel	WARN_ON(1);
129ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel	return -ENOSYS;
130ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel}
13179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
13279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
13379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_value(const struct gpio_desc *desc)
13479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
13579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
13679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
13779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return 0;
13879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
13979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_set_value(struct gpio_desc *desc, int value)
14079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
14179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
14279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
14379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
14479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_raw_value(const struct gpio_desc *desc)
14579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
14679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
14779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
14879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return 0;
14979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
15079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
15179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
15279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
15379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
15479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
15579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
15679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
15779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
15879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
15979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
16079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return 0;
16179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
16279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
16379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
16479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
16579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
16679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
16779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
16879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
16979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
17079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
17179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return 0;
17279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
17379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
17479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot						int value)
17579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
17679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
17779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
17879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
17979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
18079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
18179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
18279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
18379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
18479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return -ENOSYS;
18579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
18679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
18779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_is_active_low(const struct gpio_desc *desc)
18879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
18979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
19079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
19179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return 0;
19279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
19379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_cansleep(const struct gpio_desc *desc)
19479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
19579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
19679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
19779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return 0;
19879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
19979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
20079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_to_irq(const struct gpio_desc *desc)
20179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
20279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
20379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
20479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return -EINVAL;
20579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
20679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
20779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_desc *gpio_to_desc(unsigned gpio)
20879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
20979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return ERR_PTR(-EINVAL);
21079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
21179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int desc_to_gpio(const struct gpio_desc *desc)
21279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
21379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
21479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
21579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return -EINVAL;
21679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
21779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
21879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
21979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	/* GPIO can never have been requested */
22079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	WARN_ON(1);
22179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return ERR_PTR(-ENODEV);
22279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
22379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
22479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
22579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#endif /* CONFIG_GPIOLIB */
22679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
22779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
22879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
22979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_export(struct gpio_desc *desc, bool direction_may_change);
23079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_export_link(struct device *dev, const char *name,
23179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot		      struct gpio_desc *desc);
23279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value);
23379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_unexport(struct gpio_desc *desc);
23479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
23579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#else  /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
23679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
23779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_export(struct gpio_desc *desc,
23879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot			       bool direction_may_change)
23979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
24079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return -ENOSYS;
24179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
24279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
24379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_export_link(struct device *dev, const char *name,
24479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot				    struct gpio_desc *desc)
24579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
24679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return -ENOSYS;
24779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
24879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
24979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value)
25079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
25179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot	return -ENOSYS;
25279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
25379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
25479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_unexport(struct gpio_desc *desc)
25579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{
25679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot}
25779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
25879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
25979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot
26079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#endif
261