提交 0dbc8b7a 编写于 作者: L Linus Walleij

gpio: move varargs hack outside #ifdef GPIOLIB

commit 39b2bbe3
"gpio: add flags argument to gpiod_get*() functions"
added a dynamic flags argument to all the GPIOD getter
functions, however this did not cover the stubs so
when people used gpiod stubs to compile out descriptor
code, compilation failed.

Solve this by:
- Also rename all the stub functions __gpiod_*
- Moving the vararg hack outside of #ifdef CONFIG_GPIOLIB
  so these will always be available.
Reviewed-by: NAlexandre Courbot <acourbot@nvidia.com>
Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
上级 7cc01f63
...@@ -38,60 +38,32 @@ enum gpiod_flags { ...@@ -38,60 +38,32 @@ enum gpiod_flags {
struct gpio_desc *__must_check __gpiod_get(struct device *dev, struct gpio_desc *__must_check __gpiod_get(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags); enum gpiod_flags flags);
#define __gpiod_get(dev, con_id, flags, ...) __gpiod_get(dev, con_id, flags)
#define gpiod_get(varargs...) __gpiod_get(varargs, 0)
struct gpio_desc *__must_check __gpiod_get_index(struct device *dev, struct gpio_desc *__must_check __gpiod_get_index(struct device *dev,
const char *con_id, const char *con_id,
unsigned int idx, unsigned int idx,
enum gpiod_flags flags); enum gpiod_flags flags);
#define __gpiod_get_index(dev, con_id, index, flags, ...) \
__gpiod_get_index(dev, con_id, index, flags)
#define gpiod_get_index(varargs...) __gpiod_get_index(varargs, 0)
struct gpio_desc *__must_check __gpiod_get_optional(struct device *dev, struct gpio_desc *__must_check __gpiod_get_optional(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags); enum gpiod_flags flags);
#define __gpiod_get_optional(dev, con_id, flags, ...) \
__gpiod_get_optional(dev, con_id, flags)
#define gpiod_get_optional(varargs...) __gpiod_get_optional(varargs, 0)
struct gpio_desc *__must_check __gpiod_get_index_optional(struct device *dev, struct gpio_desc *__must_check __gpiod_get_index_optional(struct device *dev,
const char *con_id, const char *con_id,
unsigned int index, unsigned int index,
enum gpiod_flags flags); enum gpiod_flags flags);
#define __gpiod_get_index_optional(dev, con_id, index, flags, ...) \
__gpiod_get_index_optional(dev, con_id, index, flags)
#define gpiod_get_index_optional(varargs...) \
__gpiod_get_index_optional(varargs, 0)
void gpiod_put(struct gpio_desc *desc); void gpiod_put(struct gpio_desc *desc);
struct gpio_desc *__must_check __devm_gpiod_get(struct device *dev, struct gpio_desc *__must_check __devm_gpiod_get(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags); enum gpiod_flags flags);
#define __devm_gpiod_get(dev, con_id, flags, ...) \
__devm_gpiod_get(dev, con_id, flags)
#define devm_gpiod_get(varargs...) __devm_gpiod_get(varargs, 0)
struct gpio_desc *__must_check __devm_gpiod_get_index(struct device *dev, struct gpio_desc *__must_check __devm_gpiod_get_index(struct device *dev,
const char *con_id, const char *con_id,
unsigned int idx, unsigned int idx,
enum gpiod_flags flags); enum gpiod_flags flags);
#define __devm_gpiod_get_index(dev, con_id, index, flags, ...) \
__devm_gpiod_get_index(dev, con_id, index, flags)
#define devm_gpiod_get_index(varargs...) __devm_gpiod_get_index(varargs, 0)
struct gpio_desc *__must_check __devm_gpiod_get_optional(struct device *dev, struct gpio_desc *__must_check __devm_gpiod_get_optional(struct device *dev,
const char *con_id, const char *con_id,
enum gpiod_flags flags); enum gpiod_flags flags);
#define __devm_gpiod_get_optional(dev, con_id, flags, ...) \
__devm_gpiod_get_optional(dev, con_id, flags)
#define devm_gpiod_get_optional(varargs...) \
__devm_gpiod_get_optional(varargs, 0)
struct gpio_desc *__must_check struct gpio_desc *__must_check
__devm_gpiod_get_index_optional(struct device *dev, const char *con_id, __devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
unsigned int index, enum gpiod_flags flags); unsigned int index, enum gpiod_flags flags);
#define __devm_gpiod_get_index_optional(dev, con_id, index, flags, ...) \
__devm_gpiod_get_index_optional(dev, con_id, index, flags)
#define devm_gpiod_get_index_optional(varargs...) \
__devm_gpiod_get_index_optional(varargs, 0)
void devm_gpiod_put(struct device *dev, struct gpio_desc *desc); void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
int gpiod_get_direction(const struct gpio_desc *desc); int gpiod_get_direction(const struct gpio_desc *desc);
...@@ -124,27 +96,31 @@ int desc_to_gpio(const struct gpio_desc *desc); ...@@ -124,27 +96,31 @@ int desc_to_gpio(const struct gpio_desc *desc);
#else /* CONFIG_GPIOLIB */ #else /* CONFIG_GPIOLIB */
static inline struct gpio_desc *__must_check gpiod_get(struct device *dev, static inline struct gpio_desc *__must_check __gpiod_get(struct device *dev,
const char *con_id) const char *con_id,
enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline struct gpio_desc *__must_check gpiod_get_index(struct device *dev, static inline struct gpio_desc *__must_check
const char *con_id, __gpiod_get_index(struct device *dev,
unsigned int idx) const char *con_id,
unsigned int idx,
enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
gpiod_get_optional(struct device *dev, const char *con_id) __gpiod_get_optional(struct device *dev, const char *con_id,
enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
gpiod_get_index_optional(struct device *dev, const char *con_id, __gpiod_get_index_optional(struct device *dev, const char *con_id,
unsigned int index) unsigned int index, enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
...@@ -157,28 +133,33 @@ static inline void gpiod_put(struct gpio_desc *desc) ...@@ -157,28 +133,33 @@ static inline void gpiod_put(struct gpio_desc *desc)
WARN_ON(1); WARN_ON(1);
} }
static inline struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, static inline struct gpio_desc *__must_check
const char *con_id) __devm_gpiod_get(struct device *dev,
const char *con_id,
enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline static inline
struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, struct gpio_desc *__must_check
const char *con_id, __devm_gpiod_get_index(struct device *dev,
unsigned int idx) const char *con_id,
unsigned int idx,
enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
devm_gpiod_get_optional(struct device *dev, const char *con_id) __devm_gpiod_get_optional(struct device *dev, const char *con_id,
enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
static inline struct gpio_desc *__must_check static inline struct gpio_desc *__must_check
devm_gpiod_get_index_optional(struct device *dev, const char *con_id, __devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
unsigned int index) unsigned int index, enum gpiod_flags flags)
{ {
return ERR_PTR(-ENOSYS); return ERR_PTR(-ENOSYS);
} }
...@@ -303,9 +284,43 @@ static inline int desc_to_gpio(const struct gpio_desc *desc) ...@@ -303,9 +284,43 @@ static inline int desc_to_gpio(const struct gpio_desc *desc)
return -EINVAL; return -EINVAL;
} }
#endif /* CONFIG_GPIOLIB */ #endif /* CONFIG_GPIOLIB */
/*
* Vararg-hacks! This is done to transition the kernel to always pass
* the options flags argument to the below functions. During a transition
* phase these vararg macros make both old-and-newstyle code compile,
* but when all calls to the elder API are removed, these should go away
* and the __gpiod_get() etc functions above be renamed just gpiod_get()
* etc.
*/
#define __gpiod_get(dev, con_id, flags, ...) __gpiod_get(dev, con_id, flags)
#define gpiod_get(varargs...) __gpiod_get(varargs, 0)
#define __gpiod_get_index(dev, con_id, index, flags, ...) \
__gpiod_get_index(dev, con_id, index, flags)
#define gpiod_get_index(varargs...) __gpiod_get_index(varargs, 0)
#define __gpiod_get_optional(dev, con_id, flags, ...) \
__gpiod_get_optional(dev, con_id, flags)
#define gpiod_get_optional(varargs...) __gpiod_get_optional(varargs, 0)
#define __gpiod_get_index_optional(dev, con_id, index, flags, ...) \
__gpiod_get_index_optional(dev, con_id, index, flags)
#define gpiod_get_index_optional(varargs...) \
__gpiod_get_index_optional(varargs, 0)
#define __devm_gpiod_get(dev, con_id, flags, ...) \
__devm_gpiod_get(dev, con_id, flags)
#define devm_gpiod_get(varargs...) __devm_gpiod_get(varargs, 0)
#define __devm_gpiod_get_index(dev, con_id, index, flags, ...) \
__devm_gpiod_get_index(dev, con_id, index, flags)
#define devm_gpiod_get_index(varargs...) __devm_gpiod_get_index(varargs, 0)
#define __devm_gpiod_get_optional(dev, con_id, flags, ...) \
__devm_gpiod_get_optional(dev, con_id, flags)
#define devm_gpiod_get_optional(varargs...) \
__devm_gpiod_get_optional(varargs, 0)
#define __devm_gpiod_get_index_optional(dev, con_id, index, flags, ...) \
__devm_gpiod_get_index_optional(dev, con_id, index, flags)
#define devm_gpiod_get_index_optional(varargs...) \
__devm_gpiod_get_index_optional(varargs, 0)
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
int gpiod_export(struct gpio_desc *desc, bool direction_may_change); int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册