linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] input: edt-ft5x06: Do not hardcode register numbers in code, use #define
@ 2015-04-21 11:19 Rostislav Lisovy
  2015-04-21 11:19 ` [PATCH 2/2] input: edt-ft5x06: Perform register read from the very beginning (reg 0x0) Rostislav Lisovy
  0 siblings, 1 reply; 2+ messages in thread
From: Rostislav Lisovy @ 2015-04-21 11:19 UTC (permalink / raw)
  To: linux-kernel, linux-input, Dmitry Torokhov
  Cc: Simon Budig, Daniel Wagener, Lothar Waßmann, lisovy

Signed-off-by: Rostislav Lisovy <lisovy@jablotron.cz>
---
 drivers/input/touchscreen/edt-ft5x06.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index e6aef3e..c938d4b 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -48,6 +48,9 @@
 #define WORK_REGISTER_OFFSET		0x31
 #define WORK_REGISTER_NUM_X		0x33
 #define WORK_REGISTER_NUM_Y		0x34
+#define WORK_REGISTER_FW_ID		0xA6
+#define WORK_REGISTER_FT_ID		0xA8
+#define WORK_REGISTER_FW_VER		0xBB
 
 #define M09_REGISTER_THRESHOLD		0x80
 #define M09_REGISTER_GAIN		0x92
@@ -799,14 +802,16 @@ static int edt_ft5x06_ts_identify(struct i2c_client *client,
 	char *p;
 	int error;
 	char *model_name = tsdata->name;
+	u8 cmd;
 
 	/* see what we find if we assume it is a M06 *
 	 * if we get less than EDT_NAME_LEN, we don't want
 	 * to have garbage in there
 	 */
 	memset(rdbuf, 0, sizeof(rdbuf));
-	error = edt_ft5x06_ts_readwrite(client, 1, "\xbb",
-					EDT_NAME_LEN - 1, rdbuf);
+	cmd = WORK_REGISTER_FW_VER;
+	error = edt_ft5x06_ts_readwrite(client, 1, &cmd, EDT_NAME_LEN - 1,
+					rdbuf);
 	if (error)
 		return error;
 
@@ -831,15 +836,15 @@ static int edt_ft5x06_ts_identify(struct i2c_client *client,
 		/* since there are only two versions around (M06, M09) */
 		tsdata->version = M09;
 
-		error = edt_ft5x06_ts_readwrite(client, 1, "\xA6",
-						2, rdbuf);
+		cmd = WORK_REGISTER_FW_ID;
+		error = edt_ft5x06_ts_readwrite(client, 1, &cmd, 2, rdbuf);
 		if (error)
 			return error;
 
 		strlcpy(fw_version, rdbuf, 2);
 
-		error = edt_ft5x06_ts_readwrite(client, 1, "\xA8",
-						1, rdbuf);
+		cmd = WORK_REGISTER_FT_ID;
+		error = edt_ft5x06_ts_readwrite(client, 1, &cmd, 1, rdbuf);
 		if (error)
 			return error;
 
-- 
2.1.0


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

* [PATCH 2/2] input: edt-ft5x06: Perform register read from the very beginning (reg 0x0)
  2015-04-21 11:19 [PATCH 1/2] input: edt-ft5x06: Do not hardcode register numbers in code, use #define Rostislav Lisovy
@ 2015-04-21 11:19 ` Rostislav Lisovy
  0 siblings, 0 replies; 2+ messages in thread
From: Rostislav Lisovy @ 2015-04-21 11:19 UTC (permalink / raw)
  To: linux-kernel, linux-input, Dmitry Torokhov
  Cc: Simon Budig, Daniel Wagener, Lothar Waßmann, lisovy

When the touch controller detects a touch event, it raises
an interrupt. The driver then reads the touch controller
registers in its ISR. When register readout is started with the
register 0x02, some devices (tested with the register-compatible
FT5316) return 'garbage' (on single touch, "number of touchpoints"
is 5, all the other registers are either 0xFF, 0x0F or 0x00)
and since the device thinks the interrupt event was not handled
properly (by proper register read), the interrupt is being invoked
cca 60--70 times.

By starting the register read with the register 0x00 (X and Y
coordinated are at the offset 3), valid data are read and the
interrupt event is properly handled.

Signed-off-by: Rostislav Lisovy <lisovy@jablotron.cz>
---
 drivers/input/touchscreen/edt-ft5x06.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index c938d4b..72bd74c 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -187,10 +187,10 @@ static irqreturn_t edt_ft5x06_ts_isr(int irq, void *dev_id)
 		break;
 
 	case M09:
-		cmd = 0x02;
-		offset = 1;
+		cmd = 0x00;
+		offset = 3;
 		tplen = 6;
-		datalen = 29;
+		datalen = 31;
 		break;
 
 	default:
-- 
2.1.0


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

end of thread, other threads:[~2015-04-21 11:20 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-21 11:19 [PATCH 1/2] input: edt-ft5x06: Do not hardcode register numbers in code, use #define Rostislav Lisovy
2015-04-21 11:19 ` [PATCH 2/2] input: edt-ft5x06: Perform register read from the very beginning (reg 0x0) Rostislav Lisovy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).