|
@@ -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;
|