Input: atmel_mxt_ts: Configuration data unnecessarily uploaded at each probe.
Subsystems (3)
PATCH 1/1 Input: atmel_mxt_ts: Configuration data unnecessarily uploaded at each probe.
mxt_update_cfg() first checks the info block CRC (data->info_crc) and always does an upload irrespective of configuration CRC if it does not match.
However the info_crc is never initialised from the information provided by the firmware which causes an upload to be done at each probe if configuration data firmware is available.
Signed-off-by Martin Fuzzey <[email protected]>
--- drivers/input/touchscreen/atmel_mxt_ts.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/input/touchscreen/atmel_mxt_ts.c +7 -2
@@ -1413,21 +1413,26 @@ static int mxt_get_object_table(struct mxt_data *data)int i;u8 reportid;u16 end_address; +u8 *crc_ptr; table_size = data->info.object_num *sizeof (struct mxt_object ); - object_table =kzalloc (table_size,GFP_KERNEL ); + object_table =kzalloc (table_size +MXT_INFO_CHECKSUM_SIZE ,GFP_KERNEL );if (!object_table) {dev_err (&data->client->dev,"Failed to allocate memory\n" );return -ENOMEM ; } - error =__mxt_read_reg (client,MXT_OBJECT_START , table_size, + error =__mxt_read_reg (client,MXT_OBJECT_START , + table_size +MXT_INFO_CHECKSUM_SIZE , object_table);if (error) {kfree (object_table);return error; } + crc_ptr = (u8 *)object_table + table_size; + data->info_crc = crc_ptr[0 ] | (crc_ptr[1 ] <<8 ) | (crc_ptr[2 ] <<16 ); +/* Valid Report IDs start counting from 1 */ reportid =1 ; data->mem_size =0 ;