Sometimes configuration fails to load with: Bad format: failed to parse object This can occur because the firmware loader does not ensure that the configuration data is null terminated. The scanf() therefore reads arbitrary garbage at the end of file. If one item of garbage happens to be parsable the error occurs. By skipping control characters (line endings) before scanning each line rather than relying on the white space skipping of sscanf we correctly detect end of file. Signed-off-by: Martin Fuzzey <mfuzzey@xxxxxxxxxxx> --- drivers/input/touchscreen/atmel_mxt_ts.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 0666759..29f9b9d 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -1086,6 +1086,13 @@ static int mxt_prepare_cfg_mem(struct mxt_data *data, u8 val; while (data_pos < cfg->size) { + if (cfg->data[data_pos] < 0x20) { + /* firmware loading does not ensure null termination + * which is required by scanf */ + data_pos++; + continue; + } + /* Read type, instance, length */ ret = sscanf(cfg->data + data_pos, "%x %x %x%n", &type, &instance, &size, &offset); -- 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