CHROMIUM: atkbd: improve workaround for chromeos EC bug
authorLuigi Semenzato <semenzato@chromium.org>
Thu, 14 Feb 2013 20:36:50 +0000 (12:36 -0800)
committerChromeBot <chrome-bot@google.com>
Fri, 15 Feb 2013 17:18:09 +0000 (09:18 -0800)
This makes the workaround for commit b483f9730b97ba8812340cf1584b491d5aa1e774
(https://gerrit.chromium.org/gerrit/43049, "CHROMIUM: atkbd: workaround
for ChromeOS EC keyboard enable bug") work properly by re-enabling the
keyboard IRQ which was accidentally disabled.

BUG=chrome-os-partner:17810
TEST=tested with > 200 power cycles and > 30 workaround triggers
BRANCH=none

Change-Id: Ia8a817f665a3575eebeb1ba2ec3aa89f80c3e0e3
Signed-off-by: Luigi Semenzato <semenzato@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/43300

drivers/input/keyboard/atkbd.c

index 41ebfee..4400c30 100644 (file)
@@ -726,8 +726,11 @@ getid_retry:
                        dev_warn(&ps2dev->serio->dev, "atkbd: SETLEDS failed");
                        if (getid_attempts_left <= 0)
                                return -1;
-                       else
+                       else {
+                               ps2_drain(ps2dev, 6, 1);
+                               ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE);
                                goto getid_retry;
+                       }
                }
                atkbd->id = 0xabba;
                return 0;
@@ -737,8 +740,11 @@ getid_retry:
                dev_warn(&ps2dev->serio->dev, "bad keyboard id %d", param[0]);
                if (getid_attempts_left <= 0)
                        return -1;
-               else
+               else {
+                       ps2_drain(ps2dev, 6, 1);
+                       ps2_command(ps2dev, NULL, ATKBD_CMD_ENABLE);
                        goto getid_retry;
+               }
        }
 
        atkbd->id = (param[0] << 8) | param[1];