You can pull this changeset from: bk://kernel.bkbits.net/vojtech/for-linus
=================================================================== [EMAIL PROTECTED], 2005-01-27 13:47:19+01:00, [EMAIL PROTECTED] input: Always bring the i8042 multiplexer out of multiplexing mode before rebooting. Signed-off-by: Vojtech Pavlik <[EMAIL PROTECTED]> i8042.c | 36 ++++++++++++++++++++++-------------- 1 files changed, 22 insertions(+), 14 deletions(-) =================================================================== diff -Nru a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c --- a/drivers/input/serio/i8042.c 2005-01-27 17:47:51 +01:00 +++ b/drivers/input/serio/i8042.c 2005-01-27 17:47:51 +01:00 @@ -458,12 +458,11 @@ } /* - * i8042_enable_mux_mode checks whether the controller has an active - * multiplexor and puts the chip into Multiplexed (as opposed to - * Legacy) mode. + * i8042_set_mux_mode checks whether the controller has an active + * multiplexor and puts the chip into Multiplexed (1) or Legacy (0) mode. */ -static int i8042_enable_mux_mode(struct i8042_values *values, unsigned char *mux_version) +static int i8042_set_mux_mode(unsigned int mode, unsigned char *mux_version) { unsigned char param; @@ -482,11 +481,11 @@ param = 0xf0; if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param != 0x0f) return -1; - param = 0x56; + param = mode ? 0x56 : 0xf6; if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param != 0xa9) return -1; - param = 0xa4; - if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param == 0x5b) + param = mode ? 0xa4 : 0xa5; + if (i8042_command(¶m, I8042_CMD_AUX_LOOP) || param == (mode ? 0x5b : 0x5a)) return -1; if (mux_version) @@ -540,11 +539,11 @@ { unsigned char mux_version; - if (i8042_enable_mux_mode(values, &mux_version)) + if (i8042_set_mux_mode(1, &mux_version)) return -1; - /* Workaround for broken chips which seem to support MUX, but in reality don't. */ - /* They all report version 10.12 */ + /* Workaround for interference with USB Legacy emulation */ + /* that causes a v10.12 MUX to be found. */ if (mux_version == 0xAC) return -1; @@ -774,12 +773,21 @@ */ void i8042_controller_reset(void) { - if (i8042_reset) { - unsigned char param; + unsigned char param; + +/* + * Reset the controller if requested. + */ + if (i8042_reset) if (i8042_command(¶m, I8042_CMD_CTL_TEST)) printk(KERN_ERR "i8042.c: i8042 controller reset timeout.\n"); - } + +/* + * Disable MUX mode if present. + */ + + i8042_set_mux_mode(0, NULL); /* * Restore the original control register setting. @@ -888,7 +896,7 @@ } if (i8042_mux_present) - if (i8042_enable_mux_mode(&i8042_aux_values, NULL) || + if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports(&i8042_aux_values)) { printk(KERN_WARNING "i8042: failed to resume active multiplexor, mouse won't work.\n"); } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/