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>
This commit is contained in:
Daniel Kurtz 2012-06-28 21:08:13 +08:00 committed by Henrik Rydberg
parent 9638ab7c9c
commit cf94bc09c8

View File

@ -655,7 +655,8 @@ static int mxt_check_reg_init(struct mxt_data *data)
struct mxt_object *object; struct mxt_object *object;
struct device *dev = &data->client->dev; struct device *dev = &data->client->dev;
int index = 0; int index = 0;
int i, j, config_offset; int i, size;
int ret;
if (!pdata->config) { if (!pdata->config) {
dev_dbg(dev, "No cfg data defined, skipping reg init\n"); 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)) if (!mxt_object_writable(object->type))
continue; continue;
for (j = 0; size = (object->size + 1) * (object->instances + 1);
j < (object->size + 1) * (object->instances + 1); if (index + size > pdata->config_length) {
j++) { dev_err(dev, "Not enough config data!\n");
config_offset = index + j; return -EINVAL;
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]);
} }
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; return 0;