summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff LaBundy <jeff@labundy.com>2021-01-25 07:17:08 +0300
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2021-01-25 07:49:04 +0300
commit1302c71a30615226838f3583028d122f6792d720 (patch)
tree6edfccf682b0c9261a88b8c7ce0b6d74fc3a9713
parent2539da6677b6355e124b99d1dbe15eb1066f1d46 (diff)
downloadlinux-1302c71a30615226838f3583028d122f6792d720.tar.xz
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: Jeff LaBundy <jeff@labundy.com> Link: https://lore.kernel.org/r/1611002626-5889-4-git-send-email-jeff@labundy.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r--drivers/input/touchscreen/iqs5xx.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/input/touchscreen/iqs5xx.c b/drivers/input/touchscreen/iqs5xx.c
index ff0a0e96aa5c..b2de8c67b541 100644
--- a/drivers/input/touchscreen/iqs5xx.c
+++ b/drivers/input/touchscreen/iqs5xx.c
@@ -336,11 +336,16 @@ static int iqs5xx_bl_open(struct i2c_client *client)
*/
for (i = 0; i < IQS5XX_BL_ATTEMPTS; i++) {
iqs5xx_reset(client);
+ usleep_range(350, 400);
for (j = 0; j < IQS5XX_NUM_RETRIES; j++) {
error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_VER, 0);
- if (!error || error == -EINVAL)
- return error;
+ if (!error)
+ usleep_range(10000, 10100);
+ else if (error != -EINVAL)
+ continue;
+
+ return error;
}
}