Inter-revision diff: patch 9

Comparing v2 (message) to v6 (message)

--- v2
+++ v6
@@ -1,62 +1,78 @@
-Write each object using a single bulk i2c write transfer.
+For objects with multiple instances, dump them all, prepending each with
+its "Instance #".
 
+[rydberg@euromail.se: break out mxt_show_instance()]
 Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
-Reviewed-by: Joonyoung Shim <jy0922.shim@samsung.com>
+Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
 ---
- drivers/input/touchscreen/atmel_mxt_ts.c |   28 ++++++++++++++--------------
- 1 files changed, 14 insertions(+), 14 deletions(-)
+ drivers/input/touchscreen/atmel_mxt_ts.c |   36 +++++++++++++++++++++--------
+ 1 files changed, 26 insertions(+), 10 deletions(-)
 
 diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
-index a865967..3abc5b0 100644
+index c8cfd7b..ee37b0b 100644
 --- a/drivers/input/touchscreen/atmel_mxt_ts.c
 +++ b/drivers/input/touchscreen/atmel_mxt_ts.c
-@@ -628,33 +628,33 @@ end:
- static int mxt_check_reg_init(struct mxt_data *data)
+@@ -877,6 +877,24 @@ static void mxt_calc_resolution(struct mxt_data *data)
+ 	}
+ }
+ 
++static ssize_t mxt_show_instance(char *buf, int count,
++				 struct mxt_object *object, int instance,
++				 const u8 *val)
++{
++	int i;
++
++	if (object->instances > 0)
++		count += scnprintf(buf + count, PAGE_SIZE - count,
++				   "Instance %u\n", instance);
++
++	for (i = 0; i < object->size + 1; i++)
++		count += scnprintf(buf + count, PAGE_SIZE - count,
++				"\t[%2u]: %02x (%d)\n", i, val[i], val[i]);
++	count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
++
++	return count;
++}
++
+ static ssize_t mxt_object_show(struct device *dev,
+ 				    struct device_attribute *attr, char *buf)
  {
- 	const struct mxt_platform_data *pdata = data->pdata;
--	struct mxt_object *object;
- 	struct device *dev = &data->client->dev;
--	int index = 0;
--	int i, j, config_offset, config_size;
-+	int i, offset;
-+	int ret;
+@@ -885,7 +903,6 @@ static ssize_t mxt_object_show(struct device *dev,
+ 	int count = 0;
+ 	int i, j;
+ 	int error;
+-	u8 val;
+ 	u8 *obuf;
  
- 	if (!pdata->config) {
- 		dev_dbg(dev, "No cfg data defined, skipping reg init\n");
- 		return 0;
+ 	/* Pre-allocate buffer large enough to hold max sized object. */
+@@ -903,20 +920,19 @@ static ssize_t mxt_object_show(struct device *dev,
+ 		count += scnprintf(buf + count, PAGE_SIZE - count,
+ 				"T%u:\n", object->type);
+ 
+-		error = __mxt_read_reg(data->client, object->start_address,
+-				object->size + 1, obuf);
+-		if (error)
+-			break;
++		for (j = 0; j < object->instances + 1; j++) {
++			u16 size = object->size + 1;
++			u16 addr = object->start_address + j * size;
+ 
+-		for (j = 0; j < object->size + 1; j++) {
+-			val = obuf[j];
++			error = __mxt_read_reg(data->client, addr, size, obuf);
++			if (error)
++				goto done;
+ 
+-			count += scnprintf(buf + count, PAGE_SIZE - count,
+-					"\t[%2d]: %02x (%d)\n", j, val, val);
++			count = mxt_show_instance(buf, count, object, j, obuf);
+ 		}
+-		count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
  	}
  
--	for (i = 0; i < data->info.object_num; i++) {
--		object = data->object_table + i;
-+	for (offset = 0, i = 0; i < data->info.object_num; i++) {
-+		struct mxt_object *object = &data->object_table[i];
-+		size_t config_size;
- 
- 		if (!mxt_object_writable(object->type))
- 			continue;
- 
- 		config_size = object->size * object->instances;
--		for (j = 0; j < config_size; j++) {
--			config_offset = index + j;
--			if (config_offset > pdata->config_length) {
--				dev_err(dev, "Not enough config data!\n");
--				return -EINVAL;
--			}
--			mxt_write_object(data, object->type, j,
--					 pdata->config[config_offset]);
-+		if (offset + config_size > pdata->config_length) {
-+			dev_err(dev, "Not enough config data!\n");
-+			return -EINVAL;
- 		}
--		index += config_size;
-+
-+		ret = mxt_write_reg(data->client, object->start_address,
-+				    config_size, &pdata->config[offset]);
-+		if (ret)
-+			return ret;
-+		offset += config_size;
- 	}
- 
- 	return 0;
++done:
+ 	kfree(obuf);
+ 	return error ?: count;
+ }
 -- 
 1.7.7.3
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help