Merge tag 'x86-asm-2024-01-08' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
[linux-2.6-microblaze.git] / drivers / gpio / gpio-dwapb.c
index 4a4f61b..8c59332 100644 (file)
@@ -282,13 +282,15 @@ static void dwapb_irq_enable(struct irq_data *d)
 {
        struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
        struct dwapb_gpio *gpio = to_dwapb_gpio(gc);
+       irq_hw_number_t hwirq = irqd_to_hwirq(d);
        unsigned long flags;
        u32 val;
 
        raw_spin_lock_irqsave(&gc->bgpio_lock, flags);
-       val = dwapb_read(gpio, GPIO_INTEN);
-       val |= BIT(irqd_to_hwirq(d));
+       val = dwapb_read(gpio, GPIO_INTEN) | BIT(hwirq);
        dwapb_write(gpio, GPIO_INTEN, val);
+       val = dwapb_read(gpio, GPIO_INTMASK) & ~BIT(hwirq);
+       dwapb_write(gpio, GPIO_INTMASK, val);
        raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags);
 }
 
@@ -296,12 +298,14 @@ static void dwapb_irq_disable(struct irq_data *d)
 {
        struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
        struct dwapb_gpio *gpio = to_dwapb_gpio(gc);
+       irq_hw_number_t hwirq = irqd_to_hwirq(d);
        unsigned long flags;
        u32 val;
 
        raw_spin_lock_irqsave(&gc->bgpio_lock, flags);
-       val = dwapb_read(gpio, GPIO_INTEN);
-       val &= ~BIT(irqd_to_hwirq(d));
+       val = dwapb_read(gpio, GPIO_INTMASK) | BIT(hwirq);
+       dwapb_write(gpio, GPIO_INTMASK, val);
+       val = dwapb_read(gpio, GPIO_INTEN) & ~BIT(hwirq);
        dwapb_write(gpio, GPIO_INTEN, val);
        raw_spin_unlock_irqrestore(&gc->bgpio_lock, flags);
 }