]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
gpio: davinci: Update irq chip data
authorPeng Fan <peng.fan@nxp.com>
Fri, 9 May 2025 04:45:36 +0000 (12:45 +0800)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Thu, 15 May 2025 15:02:22 +0000 (17:02 +0200)
Use "struct davinci_gpio_controller *chips" as irq chip data to prepare
for immutable irq chip, then it will be easy to get gpio_chip pointer in
irq mask/unmask.

No functional change.

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-5-639377c98288@nxp.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpio-davinci.c

index 63fc7888c1d42d25b0d88301eb7aaf9ad7b431e7..227ba588c8c9e214363d3b6ee3dcc5d439aa692a 100644 (file)
@@ -68,15 +68,6 @@ static inline u32 __gpio_mask(unsigned gpio)
        return 1 << (gpio % 32);
 }
 
-static inline struct davinci_gpio_regs __iomem *irq2regs(struct irq_data *d)
-{
-       struct davinci_gpio_regs __iomem *g;
-
-       g = (__force struct davinci_gpio_regs __iomem *)irq_data_get_irq_chip_data(d);
-
-       return g;
-}
-
 static int davinci_gpio_irq_setup(struct platform_device *pdev);
 
 /*--------------------------------------------------------------------------*/
@@ -255,7 +246,9 @@ static int davinci_gpio_probe(struct platform_device *pdev)
 
 static void gpio_irq_mask(struct irq_data *d)
 {
-       struct davinci_gpio_regs __iomem *g = irq2regs(d);
+       struct davinci_gpio_controller *chips = irq_data_get_irq_chip_data(d);
+       irq_hw_number_t hwirq = irqd_to_hwirq(d);
+       struct davinci_gpio_regs __iomem *g = chips->regs[hwirq / 32];
        uintptr_t mask = (uintptr_t)irq_data_get_irq_handler_data(d);
 
        writel_relaxed(mask, &g->clr_falling);
@@ -264,7 +257,9 @@ static void gpio_irq_mask(struct irq_data *d)
 
 static void gpio_irq_unmask(struct irq_data *d)
 {
-       struct davinci_gpio_regs __iomem *g = irq2regs(d);
+       struct davinci_gpio_controller *chips = irq_data_get_irq_chip_data(d);
+       irq_hw_number_t hwirq = irqd_to_hwirq(d);
+       struct davinci_gpio_regs __iomem *g = chips->regs[hwirq / 32];
        uintptr_t mask = (uintptr_t)irq_data_get_irq_handler_data(d);
        unsigned status = irqd_get_trigger_type(d);
 
@@ -399,12 +394,11 @@ davinci_gpio_irq_map(struct irq_domain *d, unsigned int irq,
 {
        struct davinci_gpio_controller *chips =
                                (struct davinci_gpio_controller *)d->host_data;
-       struct davinci_gpio_regs __iomem *g = chips->regs[hw / 32];
 
        irq_set_chip_and_handler_name(irq, &gpio_irqchip, handle_simple_irq,
                                "davinci_gpio");
        irq_set_irq_type(irq, IRQ_TYPE_NONE);
-       irq_set_chip_data(irq, (__force void *)g);
+       irq_set_chip_data(irq, (__force void *)chips);
        irq_set_handler_data(irq, (void *)(uintptr_t)__gpio_mask(hw));
 
        return 0;