--- v3
+++ v4
@@ -1,119 +1,62 @@
-Read whole info block in one i2c transaction.
-And then re-read the matrix size after applying pdata config, since
-it may have changed.
-Note, however, that the matrix x & y size are just displayed for
-information purposes. They aren't actually used by the driver itself.
-
-Also, parse and info print the firmware major and minor version numbers.
+For objects with multiple instances, dump them all, prepending each with
+its "Instance #".
Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
---
- drivers/input/touchscreen/atmel_mxt_ts.c | 65 +++++------------------------
- 1 files changed, 12 insertions(+), 53 deletions(-)
+ drivers/input/touchscreen/atmel_mxt_ts.c | 30 +++++++++++++++++++++---------
+ 1 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
-index 1da814b..13ecbb4 100644
+index 65fd89b..281fcbd 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
-@@ -36,6 +36,7 @@
- #define MXT_FW_NAME "maxtouch.fw"
+@@ -882,7 +882,7 @@ static ssize_t mxt_object_show(struct device *dev,
+ struct mxt_data *data = dev_get_drvdata(dev);
+ struct mxt_object *object;
+ int count = 0;
+- int i, j;
++ int i, j, k;
+ int error;
+ u8 val;
+ u8 *obuf;
+@@ -902,18 +902,30 @@ static ssize_t mxt_object_show(struct device *dev,
+ count += scnprintf(buf + count, PAGE_SIZE - count,
+ "T%u:\n", object->type);
- /* Registers */
-+#define MXT_INFO 0x00
- #define MXT_FAMILY_ID 0x00
- #define MXT_VARIANT_ID 0x01
- #define MXT_VERSION 0x02
-@@ -738,41 +739,6 @@ static void mxt_handle_pdata(struct mxt_data *data)
+- 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;
++
++ error = __mxt_read_reg(data->client, addr, size, obuf);
++ if (error)
++ break;
+
+- for (j = 0; j < object->size + 1; j++) {
+- val = obuf[j];
++ if (object->instances > 0)
++ count += scnprintf(buf + count,
++ PAGE_SIZE - count,
++ "Instance %u\n", j);
+
++ for (k = 0; k < object->size + 1; k++) {
++ val = obuf[k];
++
++ count += scnprintf(buf + count,
++ PAGE_SIZE - count,
++ "\t[%2u]: %02x (%d)\n",
++ k, val, val);
++ }
+ count += scnprintf(buf + count, PAGE_SIZE - count,
+- "\t[%2d]: %02x (%d)\n", j, val, val);
++ "\n");
+ }
+- count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
}
- }
--static int mxt_get_info(struct mxt_data *data)
--{
-- struct i2c_client *client = data->client;
-- struct mxt_info *info = &data->info;
-- int error;
-- u8 val;
--
-- error = mxt_read_reg(client, MXT_FAMILY_ID, 1, &val);
-- if (error)
-- return error;
-- info->family_id = val;
--
-- error = mxt_read_reg(client, MXT_VARIANT_ID, 1, &val);
-- if (error)
-- return error;
-- info->variant_id = val;
--
-- error = mxt_read_reg(client, MXT_VERSION, 1, &val);
-- if (error)
-- return error;
-- info->version = val;
--
-- error = mxt_read_reg(client, MXT_BUILD, 1, &val);
-- if (error)
-- return error;
-- info->build = val;
--
-- error = mxt_read_reg(client, MXT_OBJECT_NUM, 1, &val);
-- if (error)
-- return error;
-- info->object_num = val;
--
-- return 0;
--}
--
- static int mxt_get_object_table(struct mxt_data *data)
- {
- int error;
-@@ -808,11 +774,12 @@ static int mxt_get_object_table(struct mxt_data *data)
- static int mxt_initialize(struct mxt_data *data)
- {
- struct i2c_client *client = data->client;
-+ struct device *dev = &client->dev;
- struct mxt_info *info = &data->info;
- int error;
-- u8 val;
-
-- error = mxt_get_info(data);
-+ /* Read 7-byte info block starting at address 0 */
-+ error = mxt_read_reg(client, MXT_INFO, sizeof(*info), info);
- if (error)
- return error;
-
-@@ -847,26 +814,18 @@ static int mxt_initialize(struct mxt_data *data)
- MXT_COMMAND_RESET, 1);
- msleep(MXT_RESET_TIME);
-
-- /* Update matrix size at info struct */
-- error = mxt_read_reg(client, MXT_MATRIX_X_SIZE, 1, &val);
-- if (error)
-- return error;
-- info->matrix_xsize = val;
--
-- error = mxt_read_reg(client, MXT_MATRIX_Y_SIZE, 1, &val);
-+ /* Update matrix size, since it may have been modified by pdata */
-+ error = mxt_read_reg(client, MXT_MATRIX_X_SIZE, 2,
-+ &info->matrix_xsize);
- if (error)
- return error;
-- info->matrix_ysize = val;
-
-- dev_info(&client->dev,
-- "Family ID: %d Variant ID: %d Version: %d Build: %d\n",
-- info->family_id, info->variant_id, info->version,
-- info->build);
-+ dev_info(dev, "Family ID: %d Variant ID: %d Major.Minor.Build: %d.%d.%d\n",
-+ info->family_id, info->variant_id, info->version >> 4,
-+ info->version & 0xf, info->build);
-
-- dev_info(&client->dev,
-- "Matrix X Size: %d Matrix Y Size: %d Object Num: %d\n",
-- info->matrix_xsize, info->matrix_ysize,
-- info->object_num);
-+ dev_info(dev, "Matrix X Size: %d Matrix Y Size: %d Object Num: %d\n",
-+ info->matrix_xsize, info->matrix_ysize, info->object_num);
-
- return 0;
- }
+ kfree(obuf);
--
1.7.7.3