
From: Andrey Panin <pazke@donpac.ru>


Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/i386/kernel/dmi_scan.c |   24 ------------------------
 25-akpm/drivers/input/serio/i8042.c |   31 ++++++++++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 25 deletions(-)

diff -puN arch/i386/kernel/dmi_scan.c~dmi-port-i8042-quirk-to-new-dmi-probing arch/i386/kernel/dmi_scan.c
--- 25/arch/i386/kernel/dmi_scan.c~dmi-port-i8042-quirk-to-new-dmi-probing	Fri May 28 14:28:57 2004
+++ 25-akpm/arch/i386/kernel/dmi_scan.c	Fri May 28 14:28:57 2004
@@ -155,22 +155,6 @@ static void __init dmi_save_ident(struct
 		printk(KERN_ERR "dmi_save_ident: out of memory.\n");
 }
 
-/*
- * HP Proliant 8500 systems can't use i8042 in mux mode,
- * or they instantly reboot.
- */
-#ifdef CONFIG_SERIO_I8042
-extern unsigned int i8042_nomux;
-static __init int set_8042_nomux(struct dmi_system_id *d)
-{
-	if (i8042_nomux == 0)
-	{
-		i8042_nomux = 1;
-		printk(KERN_INFO "Disabling i8042 mux mode\n");
-	}
-	return 0;
-}
-#endif
 
 /*
  * ASUS K7V-RM has broken ACPI table defining sleep modes
@@ -245,14 +229,6 @@ static __initdata struct dmi_system_id d
 			} },
 #endif
 
-#ifdef CONFIG_SERIO_I8042
-	{ set_8042_nomux, "Compaq Proliant 8500", {
-			DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
-			DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"),
-			DMI_MATCH(DMI_PRODUCT_VERSION, "8500"),
-			}},
-#endif
-
 #ifdef	CONFIG_ACPI_PCI
 	/*
 	 *	Boxes that need ACPI PCI IRQ routing disabled
diff -puN drivers/input/serio/i8042.c~dmi-port-i8042-quirk-to-new-dmi-probing drivers/input/serio/i8042.c
--- 25/drivers/input/serio/i8042.c~dmi-port-i8042-quirk-to-new-dmi-probing	Fri May 28 14:28:57 2004
+++ 25-akpm/drivers/input/serio/i8042.c	Fri May 28 14:28:57 2004
@@ -21,6 +21,7 @@
 #include <linux/sysdev.h>
 #include <linux/pm.h>
 #include <linux/serio.h>
+#include <linux/dmi.h>
 
 #include <asm/io.h>
 
@@ -32,7 +33,7 @@ static unsigned int i8042_noaux;
 module_param_named(noaux, i8042_noaux, bool, 0);
 MODULE_PARM_DESC(noaux, "Do not probe or use AUX (mouse) port.");
 
-unsigned int i8042_nomux;
+static unsigned int i8042_nomux;
 module_param_named(nomux, i8042_nomux, bool, 0);
 MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing conrtoller is present.");
 
@@ -943,12 +944,40 @@ static void __init i8042_init_mux_values
 	values->mux = index;
 }
 
+/*
+ * HP Proliant 8500 systems can't use i8042 in mux mode,
+ * or they instantly reboot.
+ */
+static int __init set_8042_nomux(struct dmi_system_id *d)
+{
+	if (!i8042_nomux) {
+		i8042_nomux = 1;
+		printk(KERN_INFO "Disabling i8042 mux mode\n");
+	}
+	return 0;
+}
+
+static struct dmi_system_id __initdata i8042_dmi_table[] = {
+	{
+		.callback = set_8042_nomux,
+		.ident = "Compaq Proliant 8500",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
+			DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"),
+			DMI_MATCH(DMI_PRODUCT_VERSION, "8500"),
+		},
+	},
+	{ },
+};
+
 int __init i8042_init(void)
 {
 	int i;
 
 	dbg_init();
 
+	dmi_check_system(i8042_dmi_table);
+
 	init_timer(&i8042_timer);
 	i8042_timer.function = i8042_timer_func;
 
_
