aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/kernel-parameters.txt1
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h4
-rw-r--r--drivers/input/serio/i8042.c22
3 files changed, 22 insertions, 5 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 3d5cd7a09b2f..111e98056195 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -549,6 +549,7 @@ running once the system is up.
549 keyboard and can not control its state 549 keyboard and can not control its state
550 (Don't attempt to blink the leds) 550 (Don't attempt to blink the leds)
551 i8042.noaux [HW] Don't check for auxiliary (== mouse) port 551 i8042.noaux [HW] Don't check for auxiliary (== mouse) port
552 i8042.nokbd [HW] Don't check/create keyboard port
552 i8042.nomux [HW] Don't check presence of an active multiplexing 553 i8042.nomux [HW] Don't check presence of an active multiplexing
553 controller 554 controller
554 i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX 555 i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 84a73bc6afdc..d5ea3cf09469 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)
297 aux_irq_str); 297 aux_irq_str);
298 298
299#if defined(__ia64__) 299#if defined(__ia64__)
300 if (result_kbd <= 0)
301 i8042_nokbd = 1;
300 if (result_aux <= 0) 302 if (result_aux <= 0)
301 i8042_noaux = 1; 303 i8042_noaux = 1;
302#endif 304#endif
@@ -315,7 +317,7 @@ static int __init i8042_pnp_init(void)
315 i8042_pnp_command_reg = i8042_command_reg; 317 i8042_pnp_command_reg = i8042_command_reg;
316 } 318 }
317 319
318 if (!i8042_pnp_kbd_irq) { 320 if (!i8042_nokbd && !i8042_pnp_kbd_irq) {
319 printk(KERN_WARNING "PNP: PS/2 controller doesn't have KBD irq; using default %d\n", i8042_kbd_irq); 321 printk(KERN_WARNING "PNP: PS/2 controller doesn't have KBD irq; using default %d\n", i8042_kbd_irq);
320 i8042_pnp_kbd_irq = i8042_kbd_irq; 322 i8042_pnp_kbd_irq = i8042_kbd_irq;
321 } 323 }
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index 2a76d08c4d3e..19ef35db342e 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -27,6 +27,10 @@ MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
27MODULE_DESCRIPTION("i8042 keyboard and mouse controller driver"); 27MODULE_DESCRIPTION("i8042 keyboard and mouse controller driver");
28MODULE_LICENSE("GPL"); 28MODULE_LICENSE("GPL");
29 29
30static unsigned int i8042_nokbd;
31module_param_named(nokbd, i8042_nokbd, bool, 0);
32MODULE_PARM_DESC(nokbd, "Do not probe or use KBD port.");
33
30static unsigned int i8042_noaux; 34static unsigned int i8042_noaux;
31module_param_named(noaux, i8042_noaux, bool, 0); 35module_param_named(noaux, i8042_noaux, bool, 0);
32MODULE_PARM_DESC(noaux, "Do not probe or use AUX (mouse) port."); 36MODULE_PARM_DESC(noaux, "Do not probe or use AUX (mouse) port.");
@@ -1058,7 +1062,7 @@ static int __init i8042_create_mux_port(int index)
1058 1062
1059static int __init i8042_init(void) 1063static int __init i8042_init(void)
1060{ 1064{
1061 int i; 1065 int i, have_ports = 0;
1062 int err; 1066 int err;
1063 1067
1064 dbg_init(); 1068 dbg_init();
@@ -1100,11 +1104,20 @@ static int __init i8042_init(void)
1100 if (err) 1104 if (err)
1101 goto err_unregister_ports; 1105 goto err_unregister_ports;
1102 } 1106 }
1107 have_ports = 1;
1103 } 1108 }
1104 1109
1105 err = i8042_create_kbd_port(); 1110 if (!i8042_nokbd) {
1106 if (err) 1111 err = i8042_create_kbd_port();
1107 goto err_unregister_ports; 1112 if (err)
1113 goto err_unregister_ports;
1114 have_ports = 1;
1115 }
1116
1117 if (!have_ports) {
1118 err = -ENODEV;
1119 goto err_unregister_device;
1120 }
1108 1121
1109 mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD); 1122 mod_timer(&i8042_timer, jiffies + I8042_POLL_PERIOD);
1110 1123
@@ -1114,6 +1127,7 @@ static int __init i8042_init(void)
1114 for (i = 0; i < I8042_NUM_PORTS; i++) 1127 for (i = 0; i < I8042_NUM_PORTS; i++)
1115 if (i8042_ports[i].serio) 1128 if (i8042_ports[i].serio)
1116 serio_unregister_port(i8042_ports[i].serio); 1129 serio_unregister_port(i8042_ports[i].serio);
1130 err_unregister_device:
1117 platform_device_unregister(i8042_platform_device); 1131 platform_device_unregister(i8042_platform_device);
1118 err_unregister_driver: 1132 err_unregister_driver:
1119 driver_unregister(&i8042_driver); 1133 driver_unregister(&i8042_driver);