UBUNTU: SAUCE: Input: i8042 - fix the selftest retry logic

BugLink: https://bugs.launchpad.net/bugs/1866734

It returns -NODEV at the first selftest timeout, so the retry logic
doesn't work. Move the return outside of the while loop to make it real
retry 5 times before returns -ENODEV.

BTW, the origin loop will retry 6 times, also fix this.

Signed-off-by: You-Sheng Yang <vicamo.yang@canonical.com>
(backported from
https://lore.kernel.org/linux-input/20200310033640.14440-1-vicamo@gmail.com/)
Signed-off-by: Paolo Pisati <paolo.pisati@canonical.com>
This commit is contained in:
You-Sheng Yang
2020-03-16 17:27:21 +08:00
committed by Paolo Pisati
parent e713ebea4a
commit 9bed638f25
+13 -10
View File
@@ -947,25 +947,28 @@ static int i8042_controller_selftest(void)
{
unsigned char param;
int i = 0;
int ret;
/*
* We try this 5 times; on some really fragile systems this does not
* take the first time...
*/
do {
while (i++ < 5) {
if (i8042_command(&param, I8042_CMD_CTL_TEST)) {
pr_info("i8042 controller selftest timeout\n");
return -ENODEV;
}
if (param == I8042_RET_CTL_TEST)
ret = i8042_command(&param, I8042_CMD_CTL_TEST);
if (ret)
pr_info("i8042 controller selftest timeout (%d/5)\n", i);
else if (param == I8042_RET_CTL_TEST)
return 0;
else
dbg("i8042 controller selftest: %#x != %#x\n",
param, I8042_RET_CTL_TEST);
dbg("i8042 controller selftest: %#x != %#x\n",
param, I8042_RET_CTL_TEST);
msleep(50);
} while (i++ < 5);
}
if (ret)
return -ENODEV;
#ifdef CONFIG_X86
/*