]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Input: ilitek_ts_i2c - avoid wrong input subsystem sync
authorEmanuele Ghidoli <emanuele.ghidoli@toradex.com>
Mon, 5 Aug 2024 08:55:10 +0000 (10:55 +0200)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 5 Aug 2024 17:33:19 +0000 (10:33 -0700)
For different reasons i2c transaction may fail or report id in the
message may be wrong. Avoid closing the frame in this case as it will
result in all contacts being dropped, indicating that nothing is
touching the screen anymore, while usually it is not the case.

Fixes: 42370681bd46 ("Input: Add support for ILITEK Lego Series")
Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>
Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
Link: https://lore.kernel.org/r/20240805085511.43955-2-francesco@dolcini.it
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/touchscreen/ilitek_ts_i2c.c

index 3eb762896345b75bf68e2ab82534b3e97f043a23..e1849185e18c718902a98cd2799745a98928d3be 100644 (file)
@@ -160,15 +160,14 @@ static int ilitek_process_and_report_v6(struct ilitek_ts_data *ts)
        error = ilitek_i2c_write_and_read(ts, NULL, 0, 0, buf, 64);
        if (error) {
                dev_err(dev, "get touch info failed, err:%d\n", error);
-               goto err_sync_frame;
+               return error;
        }
 
        report_max_point = buf[REPORT_COUNT_ADDRESS];
        if (report_max_point > ts->max_tp) {
                dev_err(dev, "FW report max point:%d > panel info. max:%d\n",
                        report_max_point, ts->max_tp);
-               error = -EINVAL;
-               goto err_sync_frame;
+               return -EINVAL;
        }
 
        count = DIV_ROUND_UP(report_max_point, packet_max_point);
@@ -178,7 +177,7 @@ static int ilitek_process_and_report_v6(struct ilitek_ts_data *ts)
                if (error) {
                        dev_err(dev, "get touch info. failed, cnt:%d, err:%d\n",
                                count, error);
-                       goto err_sync_frame;
+                       return error;
                }
        }
 
@@ -203,10 +202,10 @@ static int ilitek_process_and_report_v6(struct ilitek_ts_data *ts)
                ilitek_touch_down(ts, id, x, y);
        }
 
-err_sync_frame:
        input_mt_sync_frame(input);
        input_sync(input);
-       return error;
+
+       return 0;
 }
 
 /* APIs of cmds for ILITEK Touch IC */