CHROMIUM: Input: cyapa - avoid "unbalanced IRQ wake disable"
authorDaniel Kurtz <djkurtz@chromium.org>
Fri, 17 Feb 2012 07:17:00 +0000 (15:17 +0800)
committerGrant Grundler <grundler@google.com>
Thu, 24 May 2012 22:12:01 +0000 (15:12 -0700)
To avoid kernel "Unbalanced IRQ # wake disable" WARNING, only disable
irq wake on resume if irq wake was successfully enabled on suspend.

Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
BUG=chrome-os-partner:7652
TEST=Using lumpy with cyapa trackpad driver configured with
  .flags = I2C_CLIENT_WAKE, and power/wakeup == enabled.
  Notice no "Unbalanced IRQ # wake disable" WARNING in /var/log/messages
  after suspend/resume

Change-Id: I2ff559bc2b5b73a43e28923eae49932df6115d4f
Reviewed-on: https://gerrit.chromium.org/gerrit/16121
Commit-Ready: Daniel Kurtz <djkurtz@chromium.org>
Reviewed-by: Daniel Kurtz <djkurtz@chromium.org>
Tested-by: Daniel Kurtz <djkurtz@chromium.org>
drivers/input/mouse/cyapa.c

index 5059343..6137dde 100644 (file)
@@ -214,6 +214,7 @@ struct cyapa {
        struct input_dev        *input;
        int irq;
        u8 adapter_func;
+       bool irq_wake;  /* irq wake is enabled */
        bool smbus;
 
        /* read from query data region. */
@@ -2025,7 +2026,7 @@ static int cyapa_suspend(struct device *dev)
                dev_err(dev, "set power mode failed, %d\n", ret);
 
        if (device_may_wakeup(dev))
-               enable_irq_wake(cyapa->irq);
+               cyapa->irq_wake = (enable_irq_wake(cyapa->irq) == 0);
        disable_irq(cyapa->irq);
 
        return 0;
@@ -2037,7 +2038,7 @@ static int cyapa_resume(struct device *dev)
        struct cyapa *cyapa = dev_get_drvdata(dev);
 
        enable_irq(cyapa->irq);
-       if (device_may_wakeup(dev))
+       if (device_may_wakeup(dev) && cyapa->irq_wake)
                disable_irq_wake(cyapa->irq);
 
        cyapa_detect(cyapa);