Avoid processing reports containing invalid values to reduce
multitouch input stutter.

Signed-off-by: Joey Pabalinas <joeypabali...@gmail.com>

 1 file changed, 9 insertions(+)

diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index c0654db0b736543ca0..08b50e5908cecdda66 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -694,10 +694,19 @@ static void mt_complete_slot(struct mt_device *td, struct 
input_dev *input)
 {
        if ((td->mtclass.quirks & MT_QUIRK_CONTACT_CNT_ACCURATE) &&
            td->num_received >= td->num_expected)
                return;
 
+       /* drop invalid values after counting them */
+       if (td->curdata.x == 0xffff &&
+                       td->curdata.y == 0xffff &&
+                       td->curdata.w == 0xffff &&
+                       td->curdata.h == 0xffff) {
+               td->num_received++;
+               return;
+       }
+
        if (td->curvalid || (td->mtclass.quirks & MT_QUIRK_ALWAYS_VALID)) {
                int active;
                int slotnum = mt_compute_slot(td, input);
                struct mt_slot *s = &td->curdata;
                struct input_mt *mt = input->mt;
-- 
2.18.0

Reply via email to