aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/serio/i8042-x86ia64io.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/serio/i8042-x86ia64io.h')
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h115
1 files changed, 96 insertions, 19 deletions
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index fb8a3cd3ffd..a39bc4eb902 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -78,6 +78,14 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
78 }, 78 },
79 }, 79 },
80 { 80 {
81 .ident = "ASUS G1S",
82 .matches = {
83 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."),
84 DMI_MATCH(DMI_BOARD_NAME, "G1S"),
85 DMI_MATCH(DMI_BOARD_VERSION, "1.0"),
86 },
87 },
88 {
81 /* AUX LOOP command does not raise AUX IRQ */ 89 /* AUX LOOP command does not raise AUX IRQ */
82 .ident = "ASUS P65UP5", 90 .ident = "ASUS P65UP5",
83 .matches = { 91 .matches = {
@@ -374,6 +382,14 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
374 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"), 382 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"),
375 }, 383 },
376 }, 384 },
385 {
386 .ident = "Acer Aspire 5536",
387 .matches = {
388 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
389 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"),
390 DMI_MATCH(DMI_PRODUCT_VERSION, "0100"),
391 },
392 },
377 { } 393 { }
378}; 394};
379 395
@@ -392,6 +408,34 @@ static struct dmi_system_id __initdata i8042_dmi_reset_table[] = {
392 DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."), 408 DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."),
393 }, 409 },
394 }, 410 },
411 {
412 .ident = "Acer Aspire One 150",
413 .matches = {
414 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
415 DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"),
416 },
417 },
418 {
419 .ident = "Advent 4211",
420 .matches = {
421 DMI_MATCH(DMI_SYS_VENDOR, "DIXONSXP"),
422 DMI_MATCH(DMI_PRODUCT_NAME, "Advent 4211"),
423 },
424 },
425 {
426 .ident = "Medion Akoya Mini E1210",
427 .matches = {
428 DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
429 DMI_MATCH(DMI_PRODUCT_NAME, "E1210"),
430 },
431 },
432 {
433 .ident = "Mivvy M310",
434 .matches = {
435 DMI_MATCH(DMI_SYS_VENDOR, "VIOOO"),
436 DMI_MATCH(DMI_PRODUCT_NAME, "N10"),
437 },
438 },
395 { } 439 { }
396}; 440};
397 441
@@ -413,6 +457,34 @@ static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = {
413 }, 457 },
414 { } 458 { }
415}; 459};
460
461static struct dmi_system_id __initdata i8042_dmi_laptop_table[] = {
462 {
463 .ident = "Portable",
464 .matches = {
465 DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
466 },
467 },
468 {
469 .ident = "Laptop",
470 .matches = {
471 DMI_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */
472 },
473 },
474 {
475 .ident = "Notebook",
476 .matches = {
477 DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */
478 },
479 },
480 {
481 .ident = "Sub-Notebook",
482 .matches = {
483 DMI_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */
484 },
485 },
486 { }
487};
416#endif 488#endif
417 489
418/* 490/*
@@ -486,9 +558,9 @@ static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = {
486#ifdef CONFIG_PNP 558#ifdef CONFIG_PNP
487#include <linux/pnp.h> 559#include <linux/pnp.h>
488 560
489static int i8042_pnp_kbd_registered; 561static bool i8042_pnp_kbd_registered;
490static unsigned int i8042_pnp_kbd_devices; 562static unsigned int i8042_pnp_kbd_devices;
491static int i8042_pnp_aux_registered; 563static bool i8042_pnp_aux_registered;
492static unsigned int i8042_pnp_aux_devices; 564static unsigned int i8042_pnp_aux_devices;
493 565
494static int i8042_pnp_command_reg; 566static int i8042_pnp_command_reg;
@@ -576,12 +648,12 @@ static struct pnp_driver i8042_pnp_aux_driver = {
576static void i8042_pnp_exit(void) 648static void i8042_pnp_exit(void)
577{ 649{
578 if (i8042_pnp_kbd_registered) { 650 if (i8042_pnp_kbd_registered) {
579 i8042_pnp_kbd_registered = 0; 651 i8042_pnp_kbd_registered = false;
580 pnp_unregister_driver(&i8042_pnp_kbd_driver); 652 pnp_unregister_driver(&i8042_pnp_kbd_driver);
581 } 653 }
582 654
583 if (i8042_pnp_aux_registered) { 655 if (i8042_pnp_aux_registered) {
584 i8042_pnp_aux_registered = 0; 656 i8042_pnp_aux_registered = false;
585 pnp_unregister_driver(&i8042_pnp_aux_driver); 657 pnp_unregister_driver(&i8042_pnp_aux_driver);
586 } 658 }
587} 659}
@@ -589,12 +661,12 @@ static void i8042_pnp_exit(void)
589static int __init i8042_pnp_init(void) 661static int __init i8042_pnp_init(void)
590{ 662{
591 char kbd_irq_str[4] = { 0 }, aux_irq_str[4] = { 0 }; 663 char kbd_irq_str[4] = { 0 }, aux_irq_str[4] = { 0 };
592 int pnp_data_busted = 0; 664 int pnp_data_busted = false;
593 int err; 665 int err;
594 666
595#ifdef CONFIG_X86 667#ifdef CONFIG_X86
596 if (dmi_check_system(i8042_dmi_nopnp_table)) 668 if (dmi_check_system(i8042_dmi_nopnp_table))
597 i8042_nopnp = 1; 669 i8042_nopnp = true;
598#endif 670#endif
599 671
600 if (i8042_nopnp) { 672 if (i8042_nopnp) {
@@ -604,11 +676,11 @@ static int __init i8042_pnp_init(void)
604 676
605 err = pnp_register_driver(&i8042_pnp_kbd_driver); 677 err = pnp_register_driver(&i8042_pnp_kbd_driver);
606 if (!err) 678 if (!err)
607 i8042_pnp_kbd_registered = 1; 679 i8042_pnp_kbd_registered = true;
608 680
609 err = pnp_register_driver(&i8042_pnp_aux_driver); 681 err = pnp_register_driver(&i8042_pnp_aux_driver);
610 if (!err) 682 if (!err)
611 i8042_pnp_aux_registered = 1; 683 i8042_pnp_aux_registered = true;
612 684
613 if (!i8042_pnp_kbd_devices && !i8042_pnp_aux_devices) { 685 if (!i8042_pnp_kbd_devices && !i8042_pnp_aux_devices) {
614 i8042_pnp_exit(); 686 i8042_pnp_exit();
@@ -636,9 +708,9 @@ static int __init i8042_pnp_init(void)
636 708
637#if defined(__ia64__) 709#if defined(__ia64__)
638 if (!i8042_pnp_kbd_devices) 710 if (!i8042_pnp_kbd_devices)
639 i8042_nokbd = 1; 711 i8042_nokbd = true;
640 if (!i8042_pnp_aux_devices) 712 if (!i8042_pnp_aux_devices)
641 i8042_noaux = 1; 713 i8042_noaux = true;
642#endif 714#endif
643 715
644 if (((i8042_pnp_data_reg & ~0xf) == (i8042_data_reg & ~0xf) && 716 if (((i8042_pnp_data_reg & ~0xf) == (i8042_data_reg & ~0xf) &&
@@ -649,7 +721,7 @@ static int __init i8042_pnp_init(void)
649 "using default %#x\n", 721 "using default %#x\n",
650 i8042_pnp_data_reg, i8042_data_reg); 722 i8042_pnp_data_reg, i8042_data_reg);
651 i8042_pnp_data_reg = i8042_data_reg; 723 i8042_pnp_data_reg = i8042_data_reg;
652 pnp_data_busted = 1; 724 pnp_data_busted = true;
653 } 725 }
654 726
655 if (((i8042_pnp_command_reg & ~0xf) == (i8042_command_reg & ~0xf) && 727 if (((i8042_pnp_command_reg & ~0xf) == (i8042_command_reg & ~0xf) &&
@@ -660,7 +732,7 @@ static int __init i8042_pnp_init(void)
660 "using default %#x\n", 732 "using default %#x\n",
661 i8042_pnp_command_reg, i8042_command_reg); 733 i8042_pnp_command_reg, i8042_command_reg);
662 i8042_pnp_command_reg = i8042_command_reg; 734 i8042_pnp_command_reg = i8042_command_reg;
663 pnp_data_busted = 1; 735 pnp_data_busted = true;
664 } 736 }
665 737
666 if (!i8042_nokbd && !i8042_pnp_kbd_irq) { 738 if (!i8042_nokbd && !i8042_pnp_kbd_irq) {
@@ -668,7 +740,7 @@ static int __init i8042_pnp_init(void)
668 "PNP: PS/2 controller doesn't have KBD irq; " 740 "PNP: PS/2 controller doesn't have KBD irq; "
669 "using default %d\n", i8042_kbd_irq); 741 "using default %d\n", i8042_kbd_irq);
670 i8042_pnp_kbd_irq = i8042_kbd_irq; 742 i8042_pnp_kbd_irq = i8042_kbd_irq;
671 pnp_data_busted = 1; 743 pnp_data_busted = true;
672 } 744 }
673 745
674 if (!i8042_noaux && !i8042_pnp_aux_irq) { 746 if (!i8042_noaux && !i8042_pnp_aux_irq) {
@@ -677,7 +749,7 @@ static int __init i8042_pnp_init(void)
677 "PNP: PS/2 appears to have AUX port disabled, " 749 "PNP: PS/2 appears to have AUX port disabled, "
678 "if this is incorrect please boot with " 750 "if this is incorrect please boot with "
679 "i8042.nopnp\n"); 751 "i8042.nopnp\n");
680 i8042_noaux = 1; 752 i8042_noaux = true;
681 } else { 753 } else {
682 printk(KERN_WARNING 754 printk(KERN_WARNING
683 "PNP: PS/2 controller doesn't have AUX irq; " 755 "PNP: PS/2 controller doesn't have AUX irq; "
@@ -691,6 +763,11 @@ static int __init i8042_pnp_init(void)
691 i8042_kbd_irq = i8042_pnp_kbd_irq; 763 i8042_kbd_irq = i8042_pnp_kbd_irq;
692 i8042_aux_irq = i8042_pnp_aux_irq; 764 i8042_aux_irq = i8042_pnp_aux_irq;
693 765
766#ifdef CONFIG_X86
767 i8042_bypass_aux_irq_test = !pnp_data_busted &&
768 dmi_check_system(i8042_dmi_laptop_table);
769#endif
770
694 return 0; 771 return 0;
695} 772}
696 773
@@ -719,21 +796,21 @@ static int __init i8042_platform_init(void)
719 return retval; 796 return retval;
720 797
721#if defined(__ia64__) 798#if defined(__ia64__)
722 i8042_reset = 1; 799 i8042_reset = true;
723#endif 800#endif
724 801
725#ifdef CONFIG_X86 802#ifdef CONFIG_X86
726 if (dmi_check_system(i8042_dmi_reset_table)) 803 if (dmi_check_system(i8042_dmi_reset_table))
727 i8042_reset = 1; 804 i8042_reset = true;
728 805
729 if (dmi_check_system(i8042_dmi_noloop_table)) 806 if (dmi_check_system(i8042_dmi_noloop_table))
730 i8042_noloop = 1; 807 i8042_noloop = true;
731 808
732 if (dmi_check_system(i8042_dmi_nomux_table)) 809 if (dmi_check_system(i8042_dmi_nomux_table))
733 i8042_nomux = 1; 810 i8042_nomux = true;
734 811
735 if (dmi_check_system(i8042_dmi_dritek_table)) 812 if (dmi_check_system(i8042_dmi_dritek_table))
736 i8042_dritek = 1; 813 i8042_dritek = true;
737#endif /* CONFIG_X86 */ 814#endif /* CONFIG_X86 */
738 815
739 return retval; 816 return retval;