aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h4
-rw-r--r--drivers/input/serio/i8042.c22
2 files changed, 21 insertions, 5 deletions
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);