gpio: regmap: disable IRQ domain without GPIOLIB_IRQCHIP

Message ID 20210304070501.30942-1-noltari@gmail.com
State New
Headers show
Series
  • gpio: regmap: disable IRQ domain without GPIOLIB_IRQCHIP
Related show

Commit Message

Álvaro Fernández Rojas March 4, 2021, 7:05 a.m.
The current code doesn't check if GPIOLIB_IRQCHIP is enabled, which results in
a compilation error when trying to build gpio-regmap without having selected
CONFIG_GPIOLIB_IRQCHIP.

Fixes: ebe363197e52 ("gpio: add a reusable generic gpio_chip using regmap")
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
---
 drivers/gpio/gpio-regmap.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Michael Walle March 4, 2021, 8:29 a.m. | #1
Am 2021-03-04 08:05, schrieb Álvaro Fernández Rojas:
> The current code doesn't check if GPIOLIB_IRQCHIP is enabled, which 
> results in
> a compilation error when trying to build gpio-regmap without having 
> selected
> CONFIG_GPIOLIB_IRQCHIP.
> 
> Fixes: ebe363197e52 ("gpio: add a reusable generic gpio_chip using 
> regmap")
> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>

Nice catch.

However, instead of having that ifdef, commit 6a45b0e2589f ("gpiolib:
Introduce gpiochip_irqchip_add_domain()") could be fixed. That one is
missing a stub if CONFIG_GPIOLIB_IRQCHIP is not defined.

--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -624,8 +624,16 @@ void gpiochip_irq_domain_deactivate(struct 
irq_domain *domain,
  bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gc,
                                 unsigned int offset);

+#ifdef CONFIG_GPIOLIB_IRQCHIP
  int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
                                 struct irq_domain *domain);
+#else
+static inline int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
+                                             struct irq_domain *domain)
+{
+       return 0;
+}
+#endif /* CONFIG_GPIOLIB_IRQCHIP */

Linus, do you agree?

-michael
Linus Walleij March 4, 2021, 8:54 a.m. | #2
On Thu, Mar 4, 2021 at 9:29 AM Michael Walle <michael@walle.cc> wrote:
> Am 2021-03-04 08:05, schrieb Álvaro Fernández Rojas:

> > The current code doesn't check if GPIOLIB_IRQCHIP is enabled, which
> > results in
> > a compilation error when trying to build gpio-regmap without having
> > selected
> > CONFIG_GPIOLIB_IRQCHIP.
> >
> > Fixes: ebe363197e52 ("gpio: add a reusable generic gpio_chip using
> > regmap")
> > Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
>
> Nice catch.
>
> However, instead of having that ifdef, commit 6a45b0e2589f ("gpiolib:
> Introduce gpiochip_irqchip_add_domain()") could be fixed. That one is
> missing a stub if CONFIG_GPIOLIB_IRQCHIP is not defined.
>
> --- a/include/linux/gpio/driver.h
> +++ b/include/linux/gpio/driver.h
> @@ -624,8 +624,16 @@ void gpiochip_irq_domain_deactivate(struct
> irq_domain *domain,
>   bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gc,
>                                  unsigned int offset);
>
> +#ifdef CONFIG_GPIOLIB_IRQCHIP
>   int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
>                                  struct irq_domain *domain);
> +#else
> +static inline int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
> +                                             struct irq_domain *domain)
> +{
> +       return 0;
> +}
> +#endif /* CONFIG_GPIOLIB_IRQCHIP */
>
> Linus, do you agree?

Oh that is a better fix. Please go with this Álvaro!

Yours,
Linus Walleij

Patch

diff --git a/drivers/gpio/gpio-regmap.c b/drivers/gpio/gpio-regmap.c
index 5412cb3b0b2a..fed1e269c42a 100644
--- a/drivers/gpio/gpio-regmap.c
+++ b/drivers/gpio/gpio-regmap.c
@@ -279,16 +279,20 @@  struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *config
 	if (ret < 0)
 		goto err_free_gpio;
 
+#ifdef CONFIG_GPIOLIB_IRQCHIP
 	if (config->irq_domain) {
 		ret = gpiochip_irqchip_add_domain(chip, config->irq_domain);
 		if (ret)
 			goto err_remove_gpiochip;
 	}
+#endif /* CONFIG_GPIOLIB_IRQCHIP */
 
 	return gpio;
 
+#ifdef CONFIG_GPIOLIB_IRQCHIP
 err_remove_gpiochip:
 	gpiochip_remove(chip);
+#endif /* CONFIG_GPIOLIB_IRQCHIP */
 err_free_gpio:
 	kfree(gpio);
 	return ERR_PTR(ret);