/
0025-CHROMIUM-Input-atmel_mxt_ts-dump-mxt_read-write_reg.patch
95 lines (83 loc) · 2.8 KB
/
0025-CHROMIUM-Input-atmel_mxt_ts-dump-mxt_read-write_reg.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
From e3ec445543f4fc6a603d3b7990763ef0641077ee Mon Sep 17 00:00:00 2001
From: Daniel Kurtz <djkurtz@chromium.org>
Date: Wed, 15 Feb 2012 16:32:02 +0800
Subject: [PATCH 25/57] CHROMIUM: Input: atmel_mxt_ts - dump mxt_read/write_reg
For verbose on-the-wire debugging.
Prints DUMP_LEN bytes (in hex) per line.
Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
BUG=chromium-os:27713
TEST=builds clean w/ & w/out DEBUG defined.
If DEBUG defined, bytes read & written over i2c by atmel_mxt_ts should
appear in /var/log/messages
Change-Id: Ib1b8301a25bb915fea47e4dd62ff261ae5284c3c
Reviewed-on: https://gerrit.chromium.org/gerrit/17943
Commit-Ready: Daniel Kurtz <djkurtz@chromium.org>
Reviewed-by: Daniel Kurtz <djkurtz@chromium.org>
Tested-by: Daniel Kurtz <djkurtz@chromium.org>
v3.7 rebase:
Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
---
drivers/input/touchscreen/atmel_mxt_ts.c | 35 +++++++++++++++++++++++++++++++-
1 file changed, 34 insertions(+), 1 deletion(-)
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 2f22ae1..50fe84a 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -546,11 +546,39 @@ static int mxt_fw_write(struct i2c_client *client,
return mxt_i2c_send(client, data, frame_size);
}
+#ifdef DEBUG
+#define DUMP_LEN 16
+static void mxt_dump_xfer(struct device *dev, const char *func, u16 reg,
+ u16 len, const u8 *val)
+{
+ /* Rough guess for string size */
+ char str[DUMP_LEN * 3 + 2];
+ int i;
+ size_t n;
+
+ for (i = 0, n = 0; i < len; i++) {
+ n += snprintf(&str[n], sizeof(str) - n, "%02x ", val[i]);
+ if ((i + 1) % DUMP_LEN == 0 || (i + 1) == len) {
+ dev_dbg(dev,
+ "%s(reg: %d len: %d offset: 0x%02x): %s\n",
+ func, reg, len, (i / DUMP_LEN) * DUMP_LEN,
+ str);
+ n = 0;
+ }
+ }
+}
+#undef DUMP_LEN
+#else
+static void mxt_dump_xfer(struct device *dev, const char *func, u16 reg,
+ u16 len, const u8 *val) { }
+#endif
+
static int __mxt_read_reg(struct i2c_client *client,
u16 reg, u16 len, void *val)
{
struct i2c_msg xfer[2];
u8 buf[2];
+ int ret;
buf[0] = reg & 0xff;
buf[1] = (reg >> 8) & 0xff;
@@ -567,7 +595,11 @@ static int __mxt_read_reg(struct i2c_client *client,
xfer[1].len = len;
xfer[1].buf = val;
- return mxt_i2c_transfer(client, xfer, 2);
+ ret = mxt_i2c_transfer(client, xfer, 2);
+ if (ret == 0)
+ mxt_dump_xfer(&client->dev, __func__, reg, len, val);
+
+ return ret;
}
static int mxt_read_reg(struct i2c_client *client, u16 reg, u8 *val)
@@ -591,6 +623,7 @@ static int __mxt_write_reg(struct i2c_client *client, u16 reg, u16 len,
buf[1] = (reg >> 8) & 0xff;
memcpy(&buf[2], val, len);
+ mxt_dump_xfer(&client->dev, __func__, reg, len, val);
ret = mxt_i2c_send(client, buf, count);
kfree(buf);
return ret;
--
1.8.2.1