pinctrl: sunxi: Mask non-wakeup IRQs on suspend
authorSamuel Holland <samuel@sholland.org>
Fri, 17 Jan 2020 21:33:40 +0000 (15:33 -0600)
committerLinus Walleij <linus.walleij@linaro.org>
Fri, 21 Feb 2020 14:16:08 +0000 (15:16 +0100)
The pin controller hardware does not distinguish IRQs intended for
wakeup from other IRQs, so we must mask non-wakeup IRQs in software to
prevent inadvertent wakeups. This is accomplished at the irqchip level
via the IRQCHIP_MASK_ON_SUSPEND flag.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Link: https://lore.kernel.org/r/20200117213340.47714-2-samuel@sholland.org
Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sunxi/pinctrl-sunxi.c

index 9ede17a..8e792f8 100644 (file)
@@ -1076,6 +1076,7 @@ static struct irq_chip sunxi_pinctrl_edge_irq_chip = {
        .irq_release_resources = sunxi_pinctrl_irq_release_resources,
        .irq_set_type   = sunxi_pinctrl_irq_set_type,
        .irq_set_wake   = sunxi_pinctrl_irq_set_wake,
+       .flags          = IRQCHIP_MASK_ON_SUSPEND,
 };
 
 static struct irq_chip sunxi_pinctrl_level_irq_chip = {
@@ -1092,6 +1093,7 @@ static struct irq_chip sunxi_pinctrl_level_irq_chip = {
        .irq_set_type   = sunxi_pinctrl_irq_set_type,
        .irq_set_wake   = sunxi_pinctrl_irq_set_wake,
        .flags          = IRQCHIP_EOI_THREADED |
+                         IRQCHIP_MASK_ON_SUSPEND |
                          IRQCHIP_EOI_IF_HANDLED,
 };