Re: [RFC] gpio: consumer: Remove WARN_ON(1) when GPIOLIB is disabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jul 19, 2017 at 07:34:25PM -0300, Fabio Estevam wrote:
> From: Fabio Estevam <fabio.estevam@xxxxxxx>
> 
> gpiod_get_optional() returns NULL when GPIOLIB is disabled since
> commit 22c403676dbbb7c6 ("gpio: return NULL from gpiod_get_optional when
> GPIOLIB is disabled").
> 
> However, many gpiod functions still have WARN_ON(1) in their
> GPIOLIB=n stubs, which causes warnings in drivers even if the
> GPIO descriptior is requested via gpiod_get_optional().
> 
> Remove the WARN_ON(1) so that drivers can silently work fine
> without kernel warnings when GPIOLIB is disabled. 

Hmm, I did not realize that GPIO API allowed calls with NULL desc and
they would be silently accepted and return 0... Not sure if that is the
best way for the subsystem to behave, but Linus is the boss ;)

Maybe check for NULL explicitly and keep warning if !NULL is passed?

> 
> Reported-by: Sergei Shtylyov <sergei.shtylyov@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Fabio Estevam <fabio.estevam@xxxxxxx>
> ---
>  include/linux/gpio/consumer.h | 59 -------------------------------------------
>  1 file changed, 59 deletions(-)
> 
> diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
> index 8f702fc..40c1be5 100644
> --- a/include/linux/gpio/consumer.h
> +++ b/include/linux/gpio/consumer.h
> @@ -197,17 +197,11 @@ gpiod_get_array_optional(struct device *dev, const char *con_id,
>  static inline void gpiod_put(struct gpio_desc *desc)
>  {
>  	might_sleep();
> -
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  
>  static inline void gpiod_put_array(struct gpio_descs *descs)
>  {
>  	might_sleep();
> -
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  
>  static inline struct gpio_desc *__must_check
> @@ -254,150 +248,99 @@ devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
>  {
>  	return NULL;
>  }
> -
>  static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)
>  {
>  	might_sleep();
> -
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
> -
>  static inline void devm_gpiod_put_array(struct device *dev,
>  					struct gpio_descs *descs)
>  {
>  	might_sleep();
> -
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
> -
> -
>  static inline int gpiod_get_direction(const struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return -ENOSYS;
>  }
>  static inline int gpiod_direction_input(struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return -ENOSYS;
>  }
>  static inline int gpiod_direction_output(struct gpio_desc *desc, int value)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return -ENOSYS;
>  }
>  static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return -ENOSYS;
>  }
>  
> -
>  static inline int gpiod_get_value(const struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return 0;
>  }
>  static inline void gpiod_set_value(struct gpio_desc *desc, int value)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  static inline void gpiod_set_array_value(unsigned int array_size,
>  					 struct gpio_desc **desc_array,
>  					 int *value_array)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  static inline int gpiod_get_raw_value(const struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return 0;
>  }
>  static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  static inline void gpiod_set_raw_array_value(unsigned int array_size,
>  					     struct gpio_desc **desc_array,
>  					     int *value_array)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  
>  static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return 0;
>  }
>  static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  static inline void gpiod_set_array_value_cansleep(unsigned int array_size,
>  					    struct gpio_desc **desc_array,
>  					    int *value_array)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return 0;
>  }
>  static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc,
>  						int value)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  static inline void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
>  						struct gpio_desc **desc_array,
>  						int *value_array)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  }
>  
>  static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return -ENOSYS;
>  }
>  
>  static inline int gpiod_is_active_low(const struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return 0;
>  }
>  static inline int gpiod_cansleep(const struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return 0;
>  }
>  
>  static inline int gpiod_to_irq(const struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return -EINVAL;
>  }
>  
> @@ -408,8 +351,6 @@ static inline struct gpio_desc *gpio_to_desc(unsigned gpio)
>  
>  static inline int desc_to_gpio(const struct gpio_desc *desc)
>  {
> -	/* GPIO can never have been requested */
> -	WARN_ON(1);
>  	return -EINVAL;
>  }
>  
> -- 
> 2.7.4
> 

-- 
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-gpio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux