diff options
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/serio/i8042-x86ia64io.h | 33 | ||||
-rw-r--r-- | drivers/input/serio/i8042.c | 4 |
2 files changed, 36 insertions, 1 deletions
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index ae04d8a494e5..66829a860eec 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h | |||
@@ -449,6 +449,34 @@ static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = { | |||
449 | }, | 449 | }, |
450 | { } | 450 | { } |
451 | }; | 451 | }; |
452 | |||
453 | static struct dmi_system_id __initdata i8042_dmi_laptop_table[] = { | ||
454 | { | ||
455 | .ident = "Portable", | ||
456 | .matches = { | ||
457 | DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */ | ||
458 | }, | ||
459 | }, | ||
460 | { | ||
461 | .ident = "Laptop", | ||
462 | .matches = { | ||
463 | DMI_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */ | ||
464 | }, | ||
465 | }, | ||
466 | { | ||
467 | .ident = "Notebook", | ||
468 | .matches = { | ||
469 | DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */ | ||
470 | }, | ||
471 | }, | ||
472 | { | ||
473 | .ident = "Sub-Notebook", | ||
474 | .matches = { | ||
475 | DMI_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */ | ||
476 | }, | ||
477 | }, | ||
478 | { } | ||
479 | }; | ||
452 | #endif | 480 | #endif |
453 | 481 | ||
454 | /* | 482 | /* |
@@ -727,6 +755,11 @@ static int __init i8042_pnp_init(void) | |||
727 | i8042_kbd_irq = i8042_pnp_kbd_irq; | 755 | i8042_kbd_irq = i8042_pnp_kbd_irq; |
728 | i8042_aux_irq = i8042_pnp_aux_irq; | 756 | i8042_aux_irq = i8042_pnp_aux_irq; |
729 | 757 | ||
758 | #ifdef CONFIG_X86 | ||
759 | i8042_bypass_aux_irq_test = !pnp_data_busted && | ||
760 | dmi_check_system(i8042_dmi_laptop_table); | ||
761 | #endif | ||
762 | |||
730 | return 0; | 763 | return 0; |
731 | } | 764 | } |
732 | 765 | ||
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index 9f5c0506242f..b53a015bf8a5 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c | |||
@@ -83,6 +83,8 @@ module_param_named(debug, i8042_debug, bool, 0600); | |||
83 | MODULE_PARM_DESC(debug, "Turn i8042 debugging mode on and off"); | 83 | MODULE_PARM_DESC(debug, "Turn i8042 debugging mode on and off"); |
84 | #endif | 84 | #endif |
85 | 85 | ||
86 | static bool i8042_bypass_aux_irq_test; | ||
87 | |||
86 | #include "i8042.h" | 88 | #include "i8042.h" |
87 | 89 | ||
88 | static DEFINE_SPINLOCK(i8042_lock); | 90 | static DEFINE_SPINLOCK(i8042_lock); |
@@ -641,7 +643,7 @@ static int __devinit i8042_check_aux(void) | |||
641 | * used it for a PCI card or somethig else. | 643 | * used it for a PCI card or somethig else. |
642 | */ | 644 | */ |
643 | 645 | ||
644 | if (i8042_noloop || aux_loop_broken) { | 646 | if (i8042_noloop || i8042_bypass_aux_irq_test || aux_loop_broken) { |
645 | /* | 647 | /* |
646 | * Without LOOP command we can't test AUX IRQ delivery. Assume the port | 648 | * Without LOOP command we can't test AUX IRQ delivery. Assume the port |
647 | * is working and hope we are right. | 649 | * is working and hope we are right. |