]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpio: pxa: Make irq_chip immutable
authorPeng Fan <peng.fan@nxp.com>
Fri, 9 May 2025 04:45:40 +0000 (12:45 +0800)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Thu, 15 May 2025 15:02:22 +0000 (17:02 +0200)
Kernel warns about mutable irq_chips:
"not an immutable chip, please consider fixing!"

Constify pxa_muxed_gpio_chip, flag the irq_chip as IRQCHIP_IMMUTABLE,
add the new helper functions, and call the appropriate gpiolib functions.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20250509-gpio-v1-9-639377c98288@nxp.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-pxa.c

index 91cea97255fa6dd851bb2036fcf76f81956b8fe7..530ddeaba2f19c5901eb3f3f5c875bbdb01022b8 100644 (file)
@@ -497,6 +497,8 @@ static void pxa_mask_muxed_gpio(struct irq_data *d)
        gfer = readl_relaxed(base + GFER_OFFSET) & ~GPIO_bit(gpio);
        writel_relaxed(grer, base + GRER_OFFSET);
        writel_relaxed(gfer, base + GFER_OFFSET);
+
+       gpiochip_disable_irq(&pchip->chip, gpio);
 }
 
 static int pxa_gpio_set_wake(struct irq_data *d, unsigned int on)
@@ -516,17 +518,21 @@ static void pxa_unmask_muxed_gpio(struct irq_data *d)
        unsigned int gpio = irqd_to_hwirq(d);
        struct pxa_gpio_bank *c = gpio_to_pxabank(&pchip->chip, gpio);
 
+       gpiochip_enable_irq(&pchip->chip, gpio);
+
        c->irq_mask |= GPIO_bit(gpio);
        update_edge_detect(c);
 }
 
-static struct irq_chip pxa_muxed_gpio_chip = {
+static const struct irq_chip pxa_muxed_gpio_chip = {
        .name           = "GPIO",
        .irq_ack        = pxa_ack_muxed_gpio,
        .irq_mask       = pxa_mask_muxed_gpio,
        .irq_unmask     = pxa_unmask_muxed_gpio,
        .irq_set_type   = pxa_gpio_irq_type,
        .irq_set_wake   = pxa_gpio_set_wake,
+       .flags = IRQCHIP_IMMUTABLE,
+       GPIOCHIP_IRQ_RESOURCE_HELPERS,
 };
 
 static int pxa_gpio_nums(struct platform_device *pdev)