diff options
Diffstat (limited to 'drivers/input/keyboard/atkbd.c')
-rw-r--r-- | drivers/input/keyboard/atkbd.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index 379b7ff354ec..f6e9f39a527b 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
@@ -884,6 +884,39 @@ static void atkbd_inventec_keymap_fixup(struct atkbd *atkbd) | |||
884 | } | 884 | } |
885 | 885 | ||
886 | /* | 886 | /* |
887 | * Perform fixup for HP Pavilion ZV6100 laptop that doesn't generate release | ||
888 | * for its volume buttons | ||
889 | */ | ||
890 | static void atkbd_hp_zv6100_keymap_fixup(struct atkbd *atkbd) | ||
891 | { | ||
892 | const unsigned int forced_release_keys[] = { | ||
893 | 0xae, 0xb0, | ||
894 | }; | ||
895 | int i; | ||
896 | |||
897 | if (atkbd->set == 2) | ||
898 | for (i = 0; i < ARRAY_SIZE(forced_release_keys); i++) | ||
899 | __set_bit(forced_release_keys[i], | ||
900 | atkbd->force_release_mask); | ||
901 | } | ||
902 | |||
903 | /* | ||
904 | * Samsung NC10 with Fn+F? key release not working | ||
905 | */ | ||
906 | static void atkbd_samsung_keymap_fixup(struct atkbd *atkbd) | ||
907 | { | ||
908 | const unsigned int forced_release_keys[] = { | ||
909 | 0x82, 0x83, 0x84, 0x86, 0x88, 0x89, 0xb3, 0xf7, 0xf9, | ||
910 | }; | ||
911 | int i; | ||
912 | |||
913 | if (atkbd->set == 2) | ||
914 | for (i = 0; i < ARRAY_SIZE(forced_release_keys); i++) | ||
915 | __set_bit(forced_release_keys[i], | ||
916 | atkbd->force_release_mask); | ||
917 | } | ||
918 | |||
919 | /* | ||
887 | * atkbd_set_keycode_table() initializes keyboard's keycode table | 920 | * atkbd_set_keycode_table() initializes keyboard's keycode table |
888 | * according to the selected scancode set | 921 | * according to the selected scancode set |
889 | */ | 922 | */ |
@@ -1476,6 +1509,15 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { | |||
1476 | .driver_data = atkbd_dell_laptop_keymap_fixup, | 1509 | .driver_data = atkbd_dell_laptop_keymap_fixup, |
1477 | }, | 1510 | }, |
1478 | { | 1511 | { |
1512 | .ident = "Dell Laptop", | ||
1513 | .matches = { | ||
1514 | DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), | ||
1515 | DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */ | ||
1516 | }, | ||
1517 | .callback = atkbd_setup_fixup, | ||
1518 | .driver_data = atkbd_dell_laptop_keymap_fixup, | ||
1519 | }, | ||
1520 | { | ||
1479 | .ident = "HP 2133", | 1521 | .ident = "HP 2133", |
1480 | .matches = { | 1522 | .matches = { |
1481 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | 1523 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), |
@@ -1485,6 +1527,15 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { | |||
1485 | .driver_data = atkbd_hp_keymap_fixup, | 1527 | .driver_data = atkbd_hp_keymap_fixup, |
1486 | }, | 1528 | }, |
1487 | { | 1529 | { |
1530 | .ident = "HP Pavilion ZV6100", | ||
1531 | .matches = { | ||
1532 | DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), | ||
1533 | DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion ZV6100"), | ||
1534 | }, | ||
1535 | .callback = atkbd_setup_fixup, | ||
1536 | .driver_data = atkbd_hp_zv6100_keymap_fixup, | ||
1537 | }, | ||
1538 | { | ||
1488 | .ident = "Inventec Symphony", | 1539 | .ident = "Inventec Symphony", |
1489 | .matches = { | 1540 | .matches = { |
1490 | DMI_MATCH(DMI_SYS_VENDOR, "INVENTEC"), | 1541 | DMI_MATCH(DMI_SYS_VENDOR, "INVENTEC"), |
@@ -1493,6 +1544,15 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { | |||
1493 | .callback = atkbd_setup_fixup, | 1544 | .callback = atkbd_setup_fixup, |
1494 | .driver_data = atkbd_inventec_keymap_fixup, | 1545 | .driver_data = atkbd_inventec_keymap_fixup, |
1495 | }, | 1546 | }, |
1547 | { | ||
1548 | .ident = "Samsung NC10", | ||
1549 | .matches = { | ||
1550 | DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), | ||
1551 | DMI_MATCH(DMI_PRODUCT_NAME, "NC10"), | ||
1552 | }, | ||
1553 | .callback = atkbd_setup_fixup, | ||
1554 | .driver_data = atkbd_samsung_keymap_fixup, | ||
1555 | }, | ||
1496 | { } | 1556 | { } |
1497 | }; | 1557 | }; |
1498 | 1558 | ||