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@xxxxxxxxxxxx> --- drivers/input/touchscreen/atmel_mxt_ts.c | 18 ++++++++---------- 1 files changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index e988dc0..c422fad 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -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) -- 1.7.7.3 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html