@@ -38,6 +38,7 @@
#define I8042_KBD_IRQ 1
#define I8042_AUX_IRQ 12
+#define I8042_CMD_SET_AT2 0xF0
#define I8042_CMD_GETID 0xF2
#define I8042_CMD_AUX_LOOP 0xD3
#define I8042_CMD_AUX_SEND 0xD4
@@ -105,6 +106,7 @@ static bool i8042_bypass_aux_irq_test;
static bool i8042_check_reset;
static bool i8042_dritek;
static bool i8042_dumbkbd;
+static bool i8042_forceat2;
static bool i8042_noaux;
static bool i8042_nokbd;
static bool i8042_nomux;
@@ -122,6 +124,7 @@ module_param_named(bypass_aux_irq_test, i8042_bypass_aux_irq_test, bool, 0);
module_param_named(check_reset, i8042_check_reset, bool, 0);
module_param_named(dritek, i8042_dritek, bool, 0);
module_param_named(dumbkbd, i8042_dumbkbd, bool, 0);
+module_param_named(forceat2, i8042_forceat2, bool, 0);
module_param_named(noaux, i8042_noaux, bool, 0);
module_param_named(nokbd, i8042_nokbd, bool, 0);
module_param_named(nomux, i8042_nomux, bool, 0);
@@ -1004,6 +1007,16 @@ static int i8042_command(struct i8042_port *port, unsigned char *param, int comm
return retval;
}
+ if (i8042_forceat2 && port == &i8042_ports[I8042_KBD_PORT]) {
+ retval = i8042_wait_write();
+ if (retval)
+ return retval;
+
+ dbg("%02x -> i8042 (command)", I8042_CMD_SET_AT2);
+ i8042_write_data(I8042_CMD_SET_AT2);
+ i8042_write_data(0x02);
+ }
+
if (command & I8042_CMD_AUX_SEND) {
retval = i8042_wait_write();
if (retval)