aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/touchscreen/atmel_mxt_ts.c
diff options
context:
space:
mode:
authorDaniel Kurtz <djkurtz@chromium.org>2012-06-28 09:08:13 -0400
committerHenrik Rydberg <rydberg@euromail.se>2012-06-29 09:58:04 -0400
commitcf94bc09c89c923d339c68cf89360c02578ceee3 (patch)
tree28722fe5a388a47f2bee443f5702b0383873fe84 /drivers/input/touchscreen/atmel_mxt_ts.c
parent9638ab7c9c3b352d54f4f7e80027bd6e1c0584e8 (diff)
Input: atmel_mxt_ts - optimize writing of object table entries
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>
Diffstat (limited to 'drivers/input/touchscreen/atmel_mxt_ts.c')
-rw-r--r--drivers/input/touchscreen/atmel_mxt_ts.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index dd2577b796a..99d5210c7ae 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -655,7 +655,8 @@ static int mxt_check_reg_init(struct mxt_data *data)
655 struct mxt_object *object; 655 struct mxt_object *object;
656 struct device *dev = &data->client->dev; 656 struct device *dev = &data->client->dev;
657 int index = 0; 657 int index = 0;
658 int i, j, config_offset; 658 int i, size;
659 int ret;
659 660
660 if (!pdata->config) { 661 if (!pdata->config) {
661 dev_dbg(dev, "No cfg data defined, skipping reg init\n"); 662 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)
668 if (!mxt_object_writable(object->type)) 669 if (!mxt_object_writable(object->type))
669 continue; 670 continue;
670 671
671 for (j = 0; 672 size = (object->size + 1) * (object->instances + 1);
672 j < (object->size + 1) * (object->instances + 1); 673 if (index + size > pdata->config_length) {
673 j++) { 674 dev_err(dev, "Not enough config data!\n");
674 config_offset = index + j; 675 return -EINVAL;
675 if (config_offset > pdata->config_length) {
676 dev_err(dev, "Not enough config data!\n");
677 return -EINVAL;
678 }
679 mxt_write_object(data, object->type, j,
680 pdata->config[config_offset]);
681 } 676 }
682 index += (object->size + 1) * (object->instances + 1); 677
678 ret = __mxt_write_reg(data->client, object->start_address,
679 size, &pdata->config[index]);
680 if (ret)
681 return ret;
682 index += size;
683 } 683 }
684 684
685 return 0; 685 return 0;