diff options
| author | Daniel Kurtz <djkurtz@chromium.org> | 2012-06-28 09:08:13 -0400 |
|---|---|---|
| committer | Henrik Rydberg <rydberg@euromail.se> | 2012-06-29 09:58:04 -0400 |
| commit | cf94bc09c89c923d339c68cf89360c02578ceee3 (patch) | |
| tree | 28722fe5a388a47f2bee443f5702b0383873fe84 /drivers/input | |
| parent | 9638ab7c9c3b352d54f4f7e80027bd6e1c0584e8 (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')
| -rw-r--r-- | drivers/input/touchscreen/atmel_mxt_ts.c | 24 |
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 dd2577b796a4..99d5210c7ae8 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; |
