瀏覽代碼

Input: appletouch - apply idle reset logic to all touchpads

Not only Geyser 3 but also Geyser 1 need to be reset after they become
idle to stop them from needlessly waking up the kernel. Do idle reset
on all touchpads, regardless of their version - if we see 10 empty
packets the touchpad needs to be reset; good touchpads should not send
empty packets anyway.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Anton Ekblad 17 年之前
父節點
當前提交
46249ea60f
共有 1 個文件被更改,包括 11 次插入14 次删除
  1. 11 14
      drivers/input/mouse/appletouch.c

+ 11 - 14
drivers/input/mouse/appletouch.c

@@ -504,25 +504,22 @@ static void atp_complete(struct urb* urb)
 		memset(dev->xy_acc, 0, sizeof(dev->xy_acc));
 		memset(dev->xy_acc, 0, sizeof(dev->xy_acc));
 	}
 	}
 
 
-	/* Geyser 3 will continue to send packets continually after
+	input_report_key(dev->input, BTN_LEFT, key);
+	input_sync(dev->input);
+
+	/* Many Geysers will continue to send packets continually after
 	   the first touch unless reinitialised. Do so if it's been
 	   the first touch unless reinitialised. Do so if it's been
 	   idle for a while in order to avoid waking the kernel up
 	   idle for a while in order to avoid waking the kernel up
 	   several hundred times a second */
 	   several hundred times a second */
 
 
-	if (atp_is_geyser_3(dev)) {
-		if (!x && !y && !key) {
-			dev->idlecount++;
-			if (dev->idlecount == 10) {
-				dev->valid = 0;
-				schedule_work(&dev->work);
-			}
+	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);
-	input_sync(dev->input);
+	} else
+		dev->idlecount = 0;
 
 
 exit:
 exit:
 	retval = usb_submit_urb(dev->urb, GFP_ATOMIC);
 	retval = usb_submit_urb(dev->urb, GFP_ATOMIC);