/* 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);