From 945ef0d428bc33c639e49d27fb8cc765adec3fdf Mon Sep 17 00:00:00 2001
From: Dmitry Torokhov <dtor_core@ameritech.net>
Date: Sun, 4 Sep 2005 01:42:00 -0500
Subject: Input: i8042 - add i8042.nokbd module option to allow supressing     
   creation of keyboard port.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
---
 drivers/input/serio/i8042-x86ia64io.h |  4 +++-
 drivers/input/serio/i8042.c           | 22 ++++++++++++++++++----
 2 files changed, 21 insertions(+), 5 deletions(-)

(limited to 'drivers')

diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 84a73bc6afd..d5ea3cf0946 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -297,6 +297,8 @@ static int __init i8042_pnp_init(void)
 		aux_irq_str);
 
 #if defined(__ia64__)
+	if (result_kbd <= 0)
+		i8042_nokbd = 1;
 	if (result_aux <= 0)
 		i8042_noaux = 1;
 #endif
@@ -315,7 +317,7 @@ static int __init i8042_pnp_init(void)
 		i8042_pnp_command_reg = i8042_command_reg;
 	}
 
-	if (!i8042_pnp_kbd_irq) {
+	if (!i8042_nokbd && !i8042_pnp_kbd_irq) {
 		printk(KERN_WARNING "PNP: PS/2 controller doesn't have KBD irq; using default %d\n", i8042_kbd_irq);
 		i8042_pnp_kbd_irq = i8042_kbd_irq;
 	}
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index 2a76d08c4d3..19ef35db342 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -27,6 +27,10 @@ MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
 MODULE_DESCRIPTION("i8042 keyboard and mouse controller driver");
 MODULE_LICENSE("GPL");
 
+static unsigned int i8042_nokbd;
+module_param_named(nokbd, i8042_nokbd, bool, 0);
+MODULE_PARM_DESC(nokbd, "Do not probe or use KBD port.");
+
 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.");
@@ -1058,7 +1062,7 @@ static int __init i8042_create_mux_port(int index)
 
 static int __init i8042_init(void)
 {
-	int i;
+	int i, have_ports = 0;
 	int err;
 
 	dbg_init();
@@ -1100,11 +1104,20 @@ static int __init i8042_init(void)
 			if (err)
 				goto err_unregister_ports;
 		}
+		have_ports = 1;
 	}
 
-	err = i8042_create_kbd_port();
-	if (err)
-		goto err_unregister_ports;
+	if (!i8042_nokbd) {
+		err = i8042_create_kbd_port();
+		if (err)
+			goto err_unregister_ports;
+		have_ports = 1;
+	}
+
+	if (!have_ports) {
+		err = -ENODEV;
+		goto err_unregister_device;
+	}
 
 	mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
 
@@ -1114,6 +1127,7 @@ static int __init i8042_init(void)
 	for (i = 0; i < I8042_NUM_PORTS; i++)
 		if (i8042_ports[i].serio)
 			serio_unregister_port(i8042_ports[i].serio);
+ err_unregister_device:
 	platform_device_unregister(i8042_platform_device);
  err_unregister_driver:
 	driver_unregister(&i8042_driver);
-- 
cgit v1.2.3