Input: atmel_mxt_ts - optimize writing of object table entries
authorDaniel Kurtz <djkurtz@chromium.org>
Thu, 28 Jun 2012 13:08:13 +0000 (21:08 +0800)
committerHenrik Rydberg <rydberg@euromail.se>
Fri, 29 Jun 2012 13:58:04 +0000 (15:58 +0200)
Write each object using a single bulk i2c write transfer.

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

index dd2577b796a401f26f819cc6c5c331a2f0b0b11a..99d5210c7ae8dda063141cc61bfd7b10bcad2c96 100644 (file)
@@ -655,7 +655,8 @@ 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, size;
+       int ret;
 
        if (!pdata->config) {
                dev_dbg(dev, "No cfg data defined, skipping reg init\n");
@@ -668,18 +669,17 @@ 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_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]);
+               size = (object->size + 1) * (object->instances + 1);
+               if (index + size > pdata->config_length) {
+                       dev_err(dev, "Not enough config data!\n");
+                       return -EINVAL;
                }
-               index += (object->size + 1) * (object->instances + 1);
+
+               ret = __mxt_write_reg(data->client, object->start_address,
+                               size, &pdata->config[index]);
+               if (ret)
+                       return ret;
+               index += size;
        }
 
        return 0;