static void gpiochip_irq_disable(struct irq_data *d)
  {
-       struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
+       struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
  
-       if (chip->irq.irq_disable)
-               chip->irq.irq_disable(d);
-       else if (chip->irq.chip->irq_mask)
-               chip->irq.chip->irq_mask(d);
-       gpiochip_disable_irq(chip, d->hwirq);
 +      /*
 +       * Since we override .irq_disable() we need to mimic the
 +       * behaviour of __irq_disable() in irq/chip.c.
 +       * First call .irq_disable() if it exists, else mimic the
 +       * behaviour of mask_irq() which calls .irq_mask() if
 +       * it exists.
 +       */
 -      else
+       if (gc->irq.irq_disable)
+               gc->irq.irq_disable(d);
++      else if (gc->irq.chip->irq_mask)
+               gc->irq.chip->irq_mask(d);
+       gpiochip_disable_irq(gc, d->hwirq);
  }
  
- static void gpiochip_set_irq_hooks(struct gpio_chip *gpiochip)
+ static void gpiochip_set_irq_hooks(struct gpio_chip *gc)
  {
-       struct irq_chip *irqchip = gpiochip->irq.chip;
+       struct irq_chip *irqchip = gc->irq.chip;
  
        if (!irqchip->irq_request_resources &&
            !irqchip->irq_release_resources) {