[I8042PRT] Enable keyboard clock explicitly (fixes Lenovo ACPI bug). CORE-14256 ...
authorNikita Krapivin <33228822+nkrapivin@users.noreply.github.com>
Wed, 21 Mar 2018 21:07:30 +0000 (02:07 +0500)
committerHermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
Wed, 21 Mar 2018 21:07:30 +0000 (22:07 +0100)
drivers/input/i8042prt/i8042prt.h
drivers/input/i8042prt/pnp.c

index acae330..71be982 100644 (file)
@@ -223,6 +223,8 @@ typedef struct _I8042_HOOK_WORKITEM
 #define MOUSE_ENAB         0xA8
 #define MOUSE_LINE_TEST    0xA9
 #define CTRL_SELF_TEST     0xAA
+#define KBD_CLK_DISABLE    0xAD
+#define KBD_CLK_ENABLE     0xAE
 #define CTRL_WRITE_MOUSE   0xD4
 
 /*-----------------------------------------------------
index b95dc9a..e5fe57b 100644 (file)
@@ -274,6 +274,10 @@ i8042ConnectKeyboardInterrupt(
     TRACE_(I8042PRT, "i8042ConnectKeyboardInterrupt()\n");
 
     PortDeviceExtension = DeviceExtension->Common.PortDeviceExtension;
+
+    // Enable keyboard clock line
+    i8042Write(PortDeviceExtension, PortDeviceExtension->ControlPort, KBD_CLK_ENABLE);
+
     DirqlMax = MAX(
         PortDeviceExtension->KeyboardInterrupt.Dirql,
         PortDeviceExtension->MouseInterrupt.Dirql);