CHROMIUM: Input: atmel_mxt_ts - store actual size and instance
authorDaniel Kurtz <djkurtz@chromium.org>
Wed, 15 Feb 2012 17:36:55 +0000 (01:36 +0800)
committerGrant Grundler <grundler@google.com>
Thu, 24 May 2012 22:12:04 +0000 (15:12 -0700)
These two object table entry fields are reported 1 less than their value.
So add 1 once, when building the object table, instead of every time
these fields are accessed.

Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
BUG=chromium-os:27713
TEST=Confirm object table is read correctly:
  cat /sys/bus/i2c/devices/<dev>/object

Change-Id: If303428b09e8ad5516bae8f2eccb3fd1c386192d
Reviewed-on: https://gerrit.chromium.org/gerrit/17946
Commit-Ready: Daniel Kurtz <djkurtz@chromium.org>
Reviewed-by: Daniel Kurtz <djkurtz@chromium.org>
Tested-by: Daniel Kurtz <djkurtz@chromium.org>
drivers/input/touchscreen/atmel_mxt_ts.c

index 5e72929..eb6d324 100644 (file)
@@ -676,7 +676,7 @@ static int mxt_check_reg_init(struct mxt_data *data)
        struct mxt_object *object;
        struct device *dev = &data->client->dev;
        int index = 0;
-       int i, j, config_offset;
+       int i, j, config_offset, config_size;
 
        if (!pdata->config) {
                dev_dbg(dev, "No cfg data defined, skipping reg init\n");
@@ -689,9 +689,8 @@ static int mxt_check_reg_init(struct mxt_data *data)
                if (!mxt_object_writable(object->type))
                        continue;
 
-               for (j = 0;
-                    j < (object->size + 1) * (object->instances + 1);
-                    j++) {
+               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");
@@ -700,7 +699,7 @@ static int mxt_check_reg_init(struct mxt_data *data)
                        mxt_write_object(data, object->type, j,
                                         pdata->config[config_offset]);
                }
-               index += (object->size + 1) * (object->instances + 1);
+               index += config_size;
        }
 
        return 0;
@@ -829,13 +828,12 @@ static int mxt_get_object_table(struct mxt_data *data)
 
                object->type = buf[0];
                object->start_address = (buf[2] << 8) | buf[1];
-               object->size = buf[3];
-               object->instances = buf[4];
+               object->size = buf[3] + 1;
+               object->instances = buf[4] + 1;
                object->num_report_ids = buf[5];
 
                if (object->num_report_ids) {
-                       reportid += object->num_report_ids *
-                                       (object->instances + 1);
+                       reportid += object->num_report_ids * object->instances;
                        object->max_reportid = reportid;
                }
        }
@@ -950,7 +948,7 @@ static ssize_t mxt_object_show(struct device *dev,
                        continue;
                }
 
-               for (j = 0; j < object->size + 1; j++) {
+               for (j = 0; j < object->size; j++) {
                        error = mxt_read_object(data,
                                                object->type, j, &val);
                        if (error)