[ARM] 4088/1: AT91: Unbalanced IRQ in serial driver suspend/resume
authorAndrew Victor <andrew@sanpeople.com>
Tue, 9 Jan 2007 12:20:54 +0000 (13:20 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 24 Jan 2007 11:59:55 +0000 (11:59 +0000)
This patch fixes the unbalanced calls to enable_irq_wake() and
disable_irq_wake() in the AT91 (and AVR32) serial driver.

It should resolve these kernel messages:
  Unbalanced IRQ x wake disable
  BUG: warning at kernel/irq/manage.c:167/set_irq_wake()

Original patch from Marc Pignat.

Signed-off-by: Andrew Victor <andrew@sanpeople.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/serial/atmel_serial.c

index 1f9222c2e656f31507a8e8bf1f83cfa1007dc3c3..881f886b91c64ea604a90a2b011f75a0990ea88b 100644 (file)
@@ -890,7 +890,6 @@ static int atmel_serial_suspend(struct platform_device *pdev, pm_message_t state
        if (device_may_wakeup(&pdev->dev) && !at91_suspend_entering_slow_clock())
                enable_irq_wake(port->irq);
        else {
-               disable_irq_wake(port->irq);
                uart_suspend_port(&atmel_uart, port);
                atmel_port->suspended = 1;
        }
@@ -907,6 +906,8 @@ static int atmel_serial_resume(struct platform_device *pdev)
                uart_resume_port(&atmel_uart, port);
                atmel_port->suspended = 0;
        }
+       else
+               disable_irq_wake(port->irq);
 
        return 0;
 }