Jesse Keating 3494df0
From 2a79554c864ac58fa2ad982f0fcee2cc2aa33eb5 Mon Sep 17 00:00:00 2001
Jesse Keating 3494df0
From: Bastien Nocera <hadess@hadess.net>
Jesse Keating 3494df0
Date: Thu, 20 May 2010 10:30:31 -0400
Jesse Keating 3494df0
Subject: Disable i8042 checks on Intel Apple Macs
Jesse Keating 3494df0
Jesse Keating 3494df0
As those computers never had any i8042 controllers, and the
Jesse Keating 3494df0
current lookup code could potentially lock up/hang/wait for
Jesse Keating 3494df0
timeout for long periods of time.
Jesse Keating 3494df0
Jesse Keating 3494df0
Fixes intermittent hangs on boot on a MacbookAir1,1
Jesse Keating 3494df0
Jesse Keating 3494df0
Signed-off-by: Bastien Nocera <hadess@hadess.net>
Jesse Keating 3494df0
---
Jesse Keating 3494df0
 drivers/input/serio/i8042.c |   22 ++++++++++++++++++++++
Jesse Keating 3494df0
 1 files changed, 22 insertions(+), 0 deletions(-)
Jesse Keating 3494df0
Jesse Keating 3494df0
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
Jesse Keating 3494df0
index 6440a8f..4d7cf98 100644
Jesse Keating 3494df0
--- a/drivers/input/serio/i8042.c
Jesse Keating 3494df0
+++ b/drivers/input/serio/i8042.c
Jesse Keating 3494df0
@@ -1451,6 +1451,22 @@ static struct platform_driver i8042_driver = {
Jesse Keating 3494df0
 	.shutdown	= i8042_shutdown,
Jesse Keating 3494df0
 };
Jesse Keating 3494df0
 
Jesse Keating 3494df0
+#ifdef CONFIG_DMI
Jesse Keating 3494df0
+static struct dmi_system_id __initdata dmi_system_table[] = {
Jesse Keating 3494df0
+	{
Jesse Keating 3494df0
+		.matches = {
Jesse Keating 3494df0
+			DMI_MATCH(DMI_BIOS_VENDOR, "Apple Computer, Inc.")
Jesse Keating 3494df0
+		},
Jesse Keating 3494df0
+	},
Jesse Keating 3494df0
+	{
Jesse Keating 3494df0
+		.matches = {
Jesse Keating 3494df0
+			DMI_MATCH(DMI_BIOS_VENDOR, "Apple Inc.")
Jesse Keating 3494df0
+		},
Jesse Keating 3494df0
+	},
Jesse Keating 3494df0
+	{}
Jesse Keating 3494df0
+};
Jesse Keating 3494df0
+#endif /*CONFIG_DMI*/
Jesse Keating 3494df0
+
Jesse Keating 3494df0
 static int __init i8042_init(void)
Jesse Keating 3494df0
 {
Jesse Keating 3494df0
 	struct platform_device *pdev;
Jesse Keating 3494df0
@@ -1458,6 +1474,12 @@ static int __init i8042_init(void)
Jesse Keating 3494df0
 
Jesse Keating 3494df0
 	dbg_init();
Jesse Keating 3494df0
 
Jesse Keating 3494df0
+#ifdef CONFIG_DMI
Jesse Keating 3494df0
+	/* Intel Apple Macs never have an i8042 controller */
Jesse Keating 3494df0
+	if (dmi_check_system(dmi_system_table) > 0)
Jesse Keating 3494df0
+		return -ENODEV;
Jesse Keating 3494df0
+#endif /*CONFIG_DMI*/
Jesse Keating 3494df0
+
Jesse Keating 3494df0
 	err = i8042_platform_init();
Jesse Keating 3494df0
 	if (err)
Jesse Keating 3494df0
 		return err;
Jesse Keating 3494df0
-- 
Jesse Keating 3494df0
1.7.0.1
Jesse Keating 3494df0