This patch fixes the unbalanced calls to enable_irq_wake() and
disable_irq_wake() in the AT91 PCMCIA/Compact Flash driver.

If 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 <[EMAIL PROTECTED]>


diff -urN -x CVS linux-2.6.20-rc4/drivers/pcmcia/at91_cf.c 
linux-2.6/drivers/pcmcia/at91_cf.c
--- linux-2.6.20-rc4/drivers/pcmcia/at91_cf.c   Tue Jan  9 08:46:02 2007
+++ linux-2.6/drivers/pcmcia/at91_cf.c  Thu Dec 14 16:22:05 2006
@@ -333,20 +333,27 @@
        struct at91_cf_data     *board = cf->board;
 
        pcmcia_socket_dev_suspend(&pdev->dev, mesg);
+
        if (device_may_wakeup(&pdev->dev)) {
                enable_irq_wake(board->det_pin);
                if (board->irq_pin)
                        enable_irq_wake(board->irq_pin);
-       } else {
-               disable_irq_wake(board->det_pin);
-               if (board->irq_pin)
-                       disable_irq_wake(board->irq_pin);
        }
+
        return 0;
 }
 
 static int at91_cf_resume(struct platform_device *pdev)
 {
+       struct at91_cf_socket   *cf = platform_get_drvdata(pdev);
+       struct at91_cf_data     *board = cf->board;
+
+       if (device_may_wakeup(&pdev->dev)) {
+               disable_irq_wake(board->det_pin);
+               if (board->irq_pin)
+                       disable_irq_wake(board->irq_pin);
+       }
+
        pcmcia_socket_dev_resume(&pdev->dev);
        return 0;
 }




_______________________________________________
Linux PCMCIA reimplementation list
http://lists.infradead.org/mailman/listinfo/linux-pcmcia

Reply via email to