aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h36
1 files changed, 29 insertions, 7 deletions
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 4fca1e7f2678..702a526cf45b 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -366,6 +366,7 @@ static void i8042_pnp_exit(void)
366static int __init i8042_pnp_init(void) 366static int __init i8042_pnp_init(void)
367{ 367{
368 char kbd_irq_str[4] = { 0 }, aux_irq_str[4] = { 0 }; 368 char kbd_irq_str[4] = { 0 }, aux_irq_str[4] = { 0 };
369 int pnp_data_busted = 0;
369 int err; 370 int err;
370 371
371 if (i8042_nopnp) { 372 if (i8042_nopnp) {
@@ -413,27 +414,48 @@ static int __init i8042_pnp_init(void)
413#endif 414#endif
414 415
415 if (((i8042_pnp_data_reg & ~0xf) == (i8042_data_reg & ~0xf) && 416 if (((i8042_pnp_data_reg & ~0xf) == (i8042_data_reg & ~0xf) &&
416 i8042_pnp_data_reg != i8042_data_reg) || !i8042_pnp_data_reg) { 417 i8042_pnp_data_reg != i8042_data_reg) ||
417 printk(KERN_WARNING "PNP: PS/2 controller has invalid data port %#x; using default %#x\n", 418 !i8042_pnp_data_reg) {
419 printk(KERN_WARNING
420 "PNP: PS/2 controller has invalid data port %#x; "
421 "using default %#x\n",
418 i8042_pnp_data_reg, i8042_data_reg); 422 i8042_pnp_data_reg, i8042_data_reg);
419 i8042_pnp_data_reg = i8042_data_reg; 423 i8042_pnp_data_reg = i8042_data_reg;
424 pnp_data_busted = 1;
420 } 425 }
421 426
422 if (((i8042_pnp_command_reg & ~0xf) == (i8042_command_reg & ~0xf) && 427 if (((i8042_pnp_command_reg & ~0xf) == (i8042_command_reg & ~0xf) &&
423 i8042_pnp_command_reg != i8042_command_reg) || !i8042_pnp_command_reg) { 428 i8042_pnp_command_reg != i8042_command_reg) ||
424 printk(KERN_WARNING "PNP: PS/2 controller has invalid command port %#x; using default %#x\n", 429 !i8042_pnp_command_reg) {
430 printk(KERN_WARNING
431 "PNP: PS/2 controller has invalid command port %#x; "
432 "using default %#x\n",
425 i8042_pnp_command_reg, i8042_command_reg); 433 i8042_pnp_command_reg, i8042_command_reg);
426 i8042_pnp_command_reg = i8042_command_reg; 434 i8042_pnp_command_reg = i8042_command_reg;
435 pnp_data_busted = 1;
427 } 436 }
428 437
429 if (!i8042_nokbd && !i8042_pnp_kbd_irq) { 438 if (!i8042_nokbd && !i8042_pnp_kbd_irq) {
430 printk(KERN_WARNING "PNP: PS/2 controller doesn't have KBD irq; using default %d\n", i8042_kbd_irq); 439 printk(KERN_WARNING
440 "PNP: PS/2 controller doesn't have KBD irq; "
441 "using default %d\n", i8042_kbd_irq);
431 i8042_pnp_kbd_irq = i8042_kbd_irq; 442 i8042_pnp_kbd_irq = i8042_kbd_irq;
443 pnp_data_busted = 1;
432 } 444 }
433 445
434 if (!i8042_noaux && !i8042_pnp_aux_irq) { 446 if (!i8042_noaux && !i8042_pnp_aux_irq) {
435 printk(KERN_WARNING "PNP: PS/2 controller doesn't have AUX irq; using default %d\n", i8042_aux_irq); 447 if (!pnp_data_busted && i8042_pnp_kbd_irq) {
436 i8042_pnp_aux_irq = i8042_aux_irq; 448 printk(KERN_WARNING
449 "PNP: PS/2 appears to have AUX port disabled, "
450 "if this is incorrect please boot with "
451 "i8042.nopnp\n");
452 i8042_noaux = 1;
453 } else {
454 printk(KERN_WARNING
455 "PNP: PS/2 controller doesn't have AUX irq; "
456 "using default %d\n", i8042_aux_irq);
457 i8042_pnp_aux_irq = i8042_aux_irq;
458 }
437 } 459 }
438 460
439 i8042_data_reg = i8042_pnp_data_reg; 461 i8042_data_reg = i8042_pnp_data_reg;