spin_unlock_irqrestore(&pctl->lock, flags);
 }
 
+static void sunxi_pinctrl_irq_ack_unmask(struct irq_data *d)
+{
+       sunxi_pinctrl_irq_ack(d);
+       sunxi_pinctrl_irq_unmask(d);
+}
+
 static struct irq_chip sunxi_pinctrl_edge_irq_chip = {
        .irq_ack        = sunxi_pinctrl_irq_ack,
        .irq_mask       = sunxi_pinctrl_irq_mask,
        .irq_eoi        = sunxi_pinctrl_irq_ack,
        .irq_mask       = sunxi_pinctrl_irq_mask,
        .irq_unmask     = sunxi_pinctrl_irq_unmask,
+       /* Define irq_enable / disable to avoid spurious irqs for drivers
+        * using these to suppress irqs while they clear the irq source */
+       .irq_enable     = sunxi_pinctrl_irq_ack_unmask,
+       .irq_disable    = sunxi_pinctrl_irq_mask,
        .irq_request_resources = sunxi_pinctrl_irq_request_resources,
        .irq_set_type   = sunxi_pinctrl_irq_set_type,
        .flags          = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_EOI_THREADED |