All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/2] Input: ilitek_ts_i2c - Fix spurious input events
@ 2024-08-05  8:55 Francesco Dolcini
  2024-08-05  8:55 ` [PATCH v4 1/2] Input: ilitek_ts_i2c - avoid wrong input subsystem sync Francesco Dolcini
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Francesco Dolcini @ 2024-08-05  8:55 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: Francesco Dolcini, linux-input, linux-kernel

From: Francesco Dolcini <francesco.dolcini@toradex.com>

A couple of fixes to prevent spurious events when the data buffer is not the
expected one.

v4:
 - remove err_sync_frame label, return directly instead
 - removed reviewed-by
v3:
 - added reviewed-by and take over series from emanuele
v2:
 - initial series, sent by mistake as v2 instead of v1

Emanuele Ghidoli (2):
  Input: ilitek_ts_i2c - avoid wrong input subsystem sync
  Input: ilitek_ts_i2c - add report id message validation

 drivers/input/touchscreen/ilitek_ts_i2c.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v4 1/2] Input: ilitek_ts_i2c - avoid wrong input subsystem sync
  2024-08-05  8:55 [PATCH v4 0/2] Input: ilitek_ts_i2c - Fix spurious input events Francesco Dolcini
@ 2024-08-05  8:55 ` Francesco Dolcini
  2024-08-05  8:55 ` [PATCH v4 2/2] Input: ilitek_ts_i2c - add report id message validation Francesco Dolcini
  2024-08-05 17:43 ` [PATCH v4 0/2] Input: ilitek_ts_i2c - Fix spurious input events Dmitry Torokhov
  2 siblings, 0 replies; 4+ messages in thread
From: Francesco Dolcini @ 2024-08-05  8:55 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Emanuele Ghidoli, linux-input, linux-kernel, Francesco Dolcini

From: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>

For different reasons i2c transaction may fail or
report id message content may be wrong.
Avoid sync the input subsystem if message cannot be parsed.
An input subsystem sync without points is interpreted as
"nothing is touching the screen" while normally this 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>
---
v4:
 - remove err_sync_frame label, just return in case of error
 - removed reviewed by

v3: https://lore.kernel.org/all/20231222183114.30775-1-francesco@dolcini.it/
 - series taken over from Emanuele to Francesco and resent

v2: https://lore.kernel.org/all/20230920074650.922292-1-ghidoliemanuele@gmail.com/
 - first version

v1: not existing, patch was initially sent as v2 by mistake
---
 drivers/input/touchscreen/ilitek_ts_i2c.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/input/touchscreen/ilitek_ts_i2c.c b/drivers/input/touchscreen/ilitek_ts_i2c.c
index 3eb762896345..e1849185e18c 100644
--- a/drivers/input/touchscreen/ilitek_ts_i2c.c
+++ b/drivers/input/touchscreen/ilitek_ts_i2c.c
@@ -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 */
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v4 2/2] Input: ilitek_ts_i2c - add report id message validation
  2024-08-05  8:55 [PATCH v4 0/2] Input: ilitek_ts_i2c - Fix spurious input events Francesco Dolcini
  2024-08-05  8:55 ` [PATCH v4 1/2] Input: ilitek_ts_i2c - avoid wrong input subsystem sync Francesco Dolcini
@ 2024-08-05  8:55 ` Francesco Dolcini
  2024-08-05 17:43 ` [PATCH v4 0/2] Input: ilitek_ts_i2c - Fix spurious input events Dmitry Torokhov
  2 siblings, 0 replies; 4+ messages in thread
From: Francesco Dolcini @ 2024-08-05  8:55 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Emanuele Ghidoli, linux-input, linux-kernel, Francesco Dolcini

From: Emanuele Ghidoli <emanuele.ghidoli@toradex.com>

Ilitek touch IC driver answer to plain i2c read request, after it has
generated an interrupt request, with a report id message starting
with an identifier and a series of points.
If a request is sent unsolicited by an interrupt request the answer
do not contain this identifier.
Add a test to discard these messages, making the driver robust to
spurious interrupt requests.

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>
---
v4:
 - just return in case of error
 - removed reviewed by

v3: https://lore.kernel.org/all/20231222183114.30775-1-francesco@dolcini.it/
 - series taken over from Emanuele to Francesco and resent

v2: https://lore.kernel.org/all/20230920074650.922292-1-ghidoliemanuele@gmail.com/
 - first version

v1: not existing, patch was initially sent as v2 by mistake
---
 drivers/input/touchscreen/ilitek_ts_i2c.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/input/touchscreen/ilitek_ts_i2c.c b/drivers/input/touchscreen/ilitek_ts_i2c.c
index e1849185e18c..5a807ad72319 100644
--- a/drivers/input/touchscreen/ilitek_ts_i2c.c
+++ b/drivers/input/touchscreen/ilitek_ts_i2c.c
@@ -37,6 +37,8 @@
 #define ILITEK_TP_CMD_GET_MCU_VER			0x61
 #define ILITEK_TP_CMD_GET_IC_MODE			0xC0
 
+#define ILITEK_TP_I2C_REPORT_ID				0x48
+
 #define REPORT_COUNT_ADDRESS				61
 #define ILITEK_SUPPORT_MAX_POINT			40
 
@@ -163,6 +165,11 @@ static int ilitek_process_and_report_v6(struct ilitek_ts_data *ts)
 		return error;
 	}
 
+	if (buf[0] != ILITEK_TP_I2C_REPORT_ID) {
+		dev_err(dev, "get touch info failed. Wrong id: 0x%02X\n", buf[0]);
+		return -EINVAL;
+	}
+
 	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",
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v4 0/2] Input: ilitek_ts_i2c - Fix spurious input events
  2024-08-05  8:55 [PATCH v4 0/2] Input: ilitek_ts_i2c - Fix spurious input events Francesco Dolcini
  2024-08-05  8:55 ` [PATCH v4 1/2] Input: ilitek_ts_i2c - avoid wrong input subsystem sync Francesco Dolcini
  2024-08-05  8:55 ` [PATCH v4 2/2] Input: ilitek_ts_i2c - add report id message validation Francesco Dolcini
@ 2024-08-05 17:43 ` Dmitry Torokhov
  2 siblings, 0 replies; 4+ messages in thread
From: Dmitry Torokhov @ 2024-08-05 17:43 UTC (permalink / raw)
  To: Francesco Dolcini; +Cc: Francesco Dolcini, linux-input, linux-kernel

On Mon, Aug 05, 2024 at 10:55:09AM +0200, Francesco Dolcini wrote:
> From: Francesco Dolcini <francesco.dolcini@toradex.com>
> 
> A couple of fixes to prevent spurious events when the data buffer is not the
> expected one.
> 
> v4:
>  - remove err_sync_frame label, return directly instead
>  - removed reviewed-by
> v3:
>  - added reviewed-by and take over series from emanuele
> v2:
>  - initial series, sent by mistake as v2 instead of v1
> 
> Emanuele Ghidoli (2):
>   Input: ilitek_ts_i2c - avoid wrong input subsystem sync
>   Input: ilitek_ts_i2c - add report id message validation
> 
>  drivers/input/touchscreen/ilitek_ts_i2c.c | 18 ++++++++++++------
>  1 file changed, 12 insertions(+), 6 deletions(-)

Applied the lot, thank you.

-- 
Dmitry

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-08-05 17:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-05  8:55 [PATCH v4 0/2] Input: ilitek_ts_i2c - Fix spurious input events Francesco Dolcini
2024-08-05  8:55 ` [PATCH v4 1/2] Input: ilitek_ts_i2c - avoid wrong input subsystem sync Francesco Dolcini
2024-08-05  8:55 ` [PATCH v4 2/2] Input: ilitek_ts_i2c - add report id message validation Francesco Dolcini
2024-08-05 17:43 ` [PATCH v4 0/2] Input: ilitek_ts_i2c - Fix spurious input events Dmitry Torokhov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.