Commit 1302c71a authored by Jeff LaBundy's avatar Jeff LaBundy Committed by Dmitry Torokhov

Input: iqs5xx - accommodate bootloader latency

The bootloader NAK's all I2C communication after the first 64-byte
bulk write if the bus frequency is equal to 400 kHz. This prevents
the platform from pushing updated firmware to the device.

The vendor's USB bootloader programming dongle appears to insert a
delay between the "open" command and the first 64-byte bulk write.
Adding a similar delay to the driver seems to eliminate the issue.

Furthermore, the dongle does not access the bootloader immediately
after powering up the device. Follow suit by adding a delay before
the "open" command to avoid wasted retries at 400 kHz.
Signed-off-by: default avatarJeff LaBundy <jeff@labundy.com>
Link: https://lore.kernel.org/r/1611002626-5889-4-git-send-email-jeff@labundy.comSigned-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 2539da66
...@@ -336,11 +336,16 @@ static int iqs5xx_bl_open(struct i2c_client *client) ...@@ -336,11 +336,16 @@ static int iqs5xx_bl_open(struct i2c_client *client)
*/ */
for (i = 0; i < IQS5XX_BL_ATTEMPTS; i++) { for (i = 0; i < IQS5XX_BL_ATTEMPTS; i++) {
iqs5xx_reset(client); iqs5xx_reset(client);
usleep_range(350, 400);
for (j = 0; j < IQS5XX_NUM_RETRIES; j++) { for (j = 0; j < IQS5XX_NUM_RETRIES; j++) {
error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_VER, 0); error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_VER, 0);
if (!error || error == -EINVAL) if (!error)
return error; usleep_range(10000, 10100);
else if (error != -EINVAL)
continue;
return error;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment