diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 1 | ||||
-rw-r--r-- | drivers/input/serio/i8042-x86ia64io.h | 4 | ||||
-rw-r--r-- | drivers/input/serio/i8042.c | 22 |
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>"); | |||
27 | MODULE_DESCRIPTION("i8042 keyboard and mouse controller driver"); | 27 | MODULE_DESCRIPTION("i8042 keyboard and mouse controller driver"); |
28 | MODULE_LICENSE("GPL"); | 28 | MODULE_LICENSE("GPL"); |
29 | 29 | ||
30 | static unsigned int i8042_nokbd; | ||
31 | module_param_named(nokbd, i8042_nokbd, bool, 0); | ||
32 | MODULE_PARM_DESC(nokbd, "Do not probe or use KBD port."); | ||
33 | |||
30 | static unsigned int i8042_noaux; | 34 | static unsigned int i8042_noaux; |
31 | module_param_named(noaux, i8042_noaux, bool, 0); | 35 | module_param_named(noaux, i8042_noaux, bool, 0); |
32 | MODULE_PARM_DESC(noaux, "Do not probe or use AUX (mouse) port."); | 36 | 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) | |||
1058 | 1062 | ||
1059 | static int __init i8042_init(void) | 1063 | static 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); |