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:
committed by
Paolo Pisati
parent
e713ebea4a
commit
9bed638f25
+13
-10
@@ -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(¶m, I8042_CMD_CTL_TEST)) {
|
||||
pr_info("i8042 controller selftest timeout\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (param == I8042_RET_CTL_TEST)
|
||||
ret = i8042_command(¶m, 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
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user