Input: appletouch - another fix for idle reset logic
authorSoeren Sonnenburg <kernel@nn7.de>
Sat, 13 Oct 2007 04:31:15 +0000 (00:31 -0400)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 13 Oct 2007 04:31:15 +0000 (00:31 -0400)
Make sure we reset idlecount when we get a good (non-empty) packet.

Signed-off-by: Soeren Sonnenburg <kernel@nn7.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/mouse/appletouch.c

index a1804bfdbb8ce38510f783c233682e12e5dabac8..0117817bf538c5ce36511965b08134b550aa5c3a 100644 (file)
@@ -502,18 +502,23 @@ static void atp_complete(struct urb* urb)
 
                /* reset the accumulator on release */
                memset(dev->xy_acc, 0, sizeof(dev->xy_acc));
+       }
+
+       /* Geyser 3 will continue to send packets continually after
+          the first touch unless reinitialised. Do so if it's been
+          idle for a while in order to avoid waking the kernel up
+          several hundred times a second */
 
-               /* Geyser 3 will continue to send packets continually after
-                  the first touch unless reinitialised. Do so if it's been
-                  idle for a while in order to avoid waking the kernel up
-                  several hundred times a second */
-               if (!key && atp_is_geyser_3(dev)) {
+       if (atp_is_geyser_3(dev)) {
+               if (!x && !y && !key) {
                        dev->idlecount++;
                        if (dev->idlecount == 10) {
                                dev->valid = 0;
                                schedule_work(&dev->work);
                        }
                }
+               else
+                       dev->idlecount = 0;
        }
 
        input_report_key(dev->input, BTN_LEFT, key);