mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
gpio: don't WARN() on NULL descs if gpiolib is disabled
If gpiolib is disabled, we use the inline stubs from gpio/consumer.h instead of regular definitions of GPIO API. The stubs for 'optional' variants of gpiod_get routines return NULL in this case as if the relevant GPIO wasn't found. This is correct so far. Calling other (non-gpio_get) stubs from this header triggers a warning because the GPIO descriptor couldn't have been requested. The warning however is unconditional (WARN_ON(1)) and is emitted even if the passed descriptor pointer is NULL. We don't want to force the users of 'optional' gpio_get to check the returned pointer before calling e.g. gpiod_set_value() so let's only WARN on non-NULL descriptors. Cc: stable@vger.kernel.org Reported-by: Claus H. Stovgaard <cst@phaseone.com> Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
This commit is contained in:
parent
223ecaf140
commit
ffe0bbabb0
1 changed files with 32 additions and 32 deletions
|
@ -247,7 +247,7 @@ static inline void gpiod_put(struct gpio_desc *desc)
|
||||||
might_sleep();
|
might_sleep();
|
||||||
|
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void devm_gpiod_unhinge(struct device *dev,
|
static inline void devm_gpiod_unhinge(struct device *dev,
|
||||||
|
@ -256,7 +256,7 @@ static inline void devm_gpiod_unhinge(struct device *dev,
|
||||||
might_sleep();
|
might_sleep();
|
||||||
|
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void gpiod_put_array(struct gpio_descs *descs)
|
static inline void gpiod_put_array(struct gpio_descs *descs)
|
||||||
|
@ -264,7 +264,7 @@ static inline void gpiod_put_array(struct gpio_descs *descs)
|
||||||
might_sleep();
|
might_sleep();
|
||||||
|
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(descs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct gpio_desc *__must_check
|
static inline struct gpio_desc *__must_check
|
||||||
|
@ -317,7 +317,7 @@ static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
|
||||||
might_sleep();
|
might_sleep();
|
||||||
|
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void devm_gpiod_put_array(struct device *dev,
|
static inline void devm_gpiod_put_array(struct device *dev,
|
||||||
|
@ -326,32 +326,32 @@ static inline void devm_gpiod_put_array(struct device *dev,
|
||||||
might_sleep();
|
might_sleep();
|
||||||
|
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(descs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline int gpiod_get_direction(const struct gpio_desc *desc)
|
static inline int gpiod_get_direction(const struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
static inline int gpiod_direction_input(struct gpio_desc *desc)
|
static inline int gpiod_direction_input(struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
|
static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
|
static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,7 +359,7 @@ static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
|
||||||
static inline int gpiod_get_value(const struct gpio_desc *desc)
|
static inline int gpiod_get_value(const struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline int gpiod_get_array_value(unsigned int array_size,
|
static inline int gpiod_get_array_value(unsigned int array_size,
|
||||||
|
@ -368,13 +368,13 @@ static inline int gpiod_get_array_value(unsigned int array_size,
|
||||||
unsigned long *value_bitmap)
|
unsigned long *value_bitmap)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc_array);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline void gpiod_set_value(struct gpio_desc *desc, int value)
|
static inline void gpiod_set_value(struct gpio_desc *desc, int value)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
}
|
}
|
||||||
static inline int gpiod_set_array_value(unsigned int array_size,
|
static inline int gpiod_set_array_value(unsigned int array_size,
|
||||||
struct gpio_desc **desc_array,
|
struct gpio_desc **desc_array,
|
||||||
|
@ -382,13 +382,13 @@ static inline int gpiod_set_array_value(unsigned int array_size,
|
||||||
unsigned long *value_bitmap)
|
unsigned long *value_bitmap)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc_array);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
|
static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline int gpiod_get_raw_array_value(unsigned int array_size,
|
static inline int gpiod_get_raw_array_value(unsigned int array_size,
|
||||||
|
@ -397,13 +397,13 @@ static inline int gpiod_get_raw_array_value(unsigned int array_size,
|
||||||
unsigned long *value_bitmap)
|
unsigned long *value_bitmap)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc_array);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
|
static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
}
|
}
|
||||||
static inline int gpiod_set_raw_array_value(unsigned int array_size,
|
static inline int gpiod_set_raw_array_value(unsigned int array_size,
|
||||||
struct gpio_desc **desc_array,
|
struct gpio_desc **desc_array,
|
||||||
|
@ -411,14 +411,14 @@ static inline int gpiod_set_raw_array_value(unsigned int array_size,
|
||||||
unsigned long *value_bitmap)
|
unsigned long *value_bitmap)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc_array);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
|
static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline int gpiod_get_array_value_cansleep(unsigned int array_size,
|
static inline int gpiod_get_array_value_cansleep(unsigned int array_size,
|
||||||
|
@ -427,13 +427,13 @@ static inline int gpiod_get_array_value_cansleep(unsigned int array_size,
|
||||||
unsigned long *value_bitmap)
|
unsigned long *value_bitmap)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc_array);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
|
static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
}
|
}
|
||||||
static inline int gpiod_set_array_value_cansleep(unsigned int array_size,
|
static inline int gpiod_set_array_value_cansleep(unsigned int array_size,
|
||||||
struct gpio_desc **desc_array,
|
struct gpio_desc **desc_array,
|
||||||
|
@ -441,13 +441,13 @@ static inline int gpiod_set_array_value_cansleep(unsigned int array_size,
|
||||||
unsigned long *value_bitmap)
|
unsigned long *value_bitmap)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc_array);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
|
static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
|
static inline int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
|
||||||
|
@ -456,14 +456,14 @@ static inline int gpiod_get_raw_array_value_cansleep(unsigned int array_size,
|
||||||
unsigned long *value_bitmap)
|
unsigned long *value_bitmap)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc_array);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
|
static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
|
||||||
int value)
|
int value)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
}
|
}
|
||||||
static inline int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
|
static inline int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
|
||||||
struct gpio_desc **desc_array,
|
struct gpio_desc **desc_array,
|
||||||
|
@ -471,41 +471,41 @@ static inline int gpiod_set_raw_array_value_cansleep(unsigned int array_size,
|
||||||
unsigned long *value_bitmap)
|
unsigned long *value_bitmap)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc_array);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
|
static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
|
static inline int gpiod_set_transitory(struct gpio_desc *desc, bool transitory)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int gpiod_is_active_low(const struct gpio_desc *desc)
|
static inline int gpiod_is_active_low(const struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline int gpiod_cansleep(const struct gpio_desc *desc)
|
static inline int gpiod_cansleep(const struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int gpiod_to_irq(const struct gpio_desc *desc)
|
static inline int gpiod_to_irq(const struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -513,7 +513,7 @@ static inline int gpiod_set_consumer_name(struct gpio_desc *desc,
|
||||||
const char *name)
|
const char *name)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -525,7 +525,7 @@ static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
|
||||||
static inline int desc_to_gpio(const struct gpio_desc *desc)
|
static inline int desc_to_gpio(const struct gpio_desc *desc)
|
||||||
{
|
{
|
||||||
/* GPIO can never have been requested */
|
/* GPIO can never have been requested */
|
||||||
WARN_ON(1);
|
WARN_ON(desc);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue