Commit 7d0b18cd authored by Emanuele Ghidoli's avatar Emanuele Ghidoli Committed by Dmitry Torokhov

Input: ilitek_ts_i2c - avoid wrong input subsystem sync

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: 42370681 ("Input: Add support for ILITEK Lego Series")
Signed-off-by: default avatarEmanuele Ghidoli <emanuele.ghidoli@toradex.com>
Signed-off-by: default avatarFrancesco Dolcini <francesco.dolcini@toradex.com>
Link: https://lore.kernel.org/r/20240805085511.43955-2-francesco@dolcini.itSigned-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 14d650fc
...@@ -160,15 +160,14 @@ static int ilitek_process_and_report_v6(struct ilitek_ts_data *ts) ...@@ -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); error = ilitek_i2c_write_and_read(ts, NULL, 0, 0, buf, 64);
if (error) { if (error) {
dev_err(dev, "get touch info failed, err:%d\n", 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]; report_max_point = buf[REPORT_COUNT_ADDRESS];
if (report_max_point > ts->max_tp) { if (report_max_point > ts->max_tp) {
dev_err(dev, "FW report max point:%d > panel info. max:%d\n", dev_err(dev, "FW report max point:%d > panel info. max:%d\n",
report_max_point, ts->max_tp); report_max_point, ts->max_tp);
error = -EINVAL; return -EINVAL;
goto err_sync_frame;
} }
count = DIV_ROUND_UP(report_max_point, packet_max_point); 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) ...@@ -178,7 +177,7 @@ static int ilitek_process_and_report_v6(struct ilitek_ts_data *ts)
if (error) { if (error) {
dev_err(dev, "get touch info. failed, cnt:%d, err:%d\n", dev_err(dev, "get touch info. failed, cnt:%d, err:%d\n",
count, error); count, error);
goto err_sync_frame; return error;
} }
} }
...@@ -203,10 +202,10 @@ static int ilitek_process_and_report_v6(struct ilitek_ts_data *ts) ...@@ -203,10 +202,10 @@ static int ilitek_process_and_report_v6(struct ilitek_ts_data *ts)
ilitek_touch_down(ts, id, x, y); ilitek_touch_down(ts, id, x, y);
} }
err_sync_frame:
input_mt_sync_frame(input); input_mt_sync_frame(input);
input_sync(input); input_sync(input);
return error;
return 0;
} }
/* APIs of cmds for ILITEK Touch IC */ /* APIs of cmds for ILITEK Touch IC */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment