mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 23:20:05 +00:00
gpio: rcar: Check for irq_set_irq_wake() failures
If an interrupt controller doesn't support wake-up configuration, irq_set_irq_wake() returns an error code. Then any subsequent call trying to deconfigure wake-up will cause an imbalance, and a warning will be printed: WARNING: CPU: 1 PID: 1341 at kernel/irq/manage.c:540 irq_set_irq_wake+0x9c/0xf8() Unbalanced IRQ 26 wake disable To fix this, refrain from any further parent interrupt controller (de)configuration if irq_set_irq_wake() failed. Alternative fixes would be: - calling "gic_set_irqchip_flags(IRQCHIP_SKIP_SET_WAKE)" from the platform code, - setting "gic_chip.flags = IRQCHIP_SKIP_SET_WAKE" in the GIC driver code, but these were withheld as the GIC hardware doesn't really support wake-up interrupts. Fixes: ab82fa7da4dce5c7 ("gpio: rcar: Prevent module clock disable when wake-up is enabled") Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
3fff99bc4e
commit
501ef0f95a
@ -177,8 +177,17 @@ static int gpio_rcar_irq_set_wake(struct irq_data *d, unsigned int on)
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||
struct gpio_rcar_priv *p = container_of(gc, struct gpio_rcar_priv,
|
||||
gpio_chip);
|
||||
int error;
|
||||
|
||||
irq_set_irq_wake(p->irq_parent, on);
|
||||
if (p->irq_parent) {
|
||||
error = irq_set_irq_wake(p->irq_parent, on);
|
||||
if (error) {
|
||||
dev_dbg(&p->pdev->dev,
|
||||
"irq %u doesn't support irq_set_wake\n",
|
||||
p->irq_parent);
|
||||
p->irq_parent = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!p->clk)
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user