diff options
Diffstat (limited to 'drivers/input/keyboard/atkbd.c')
-rw-r--r-- | drivers/input/keyboard/atkbd.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index fa6ed339d171..97f709f2a68f 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
@@ -901,6 +901,22 @@ static void atkbd_hp_zv6100_keymap_fixup(struct atkbd *atkbd) | |||
901 | } | 901 | } |
902 | 902 | ||
903 | /* | 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 | /* | ||
904 | * atkbd_set_keycode_table() initializes keyboard's keycode table | 920 | * atkbd_set_keycode_table() initializes keyboard's keycode table |
905 | * according to the selected scancode set | 921 | * according to the selected scancode set |
906 | */ | 922 | */ |
@@ -1519,6 +1535,15 @@ static struct dmi_system_id atkbd_dmi_quirk_table[] __initdata = { | |||
1519 | .callback = atkbd_setup_fixup, | 1535 | .callback = atkbd_setup_fixup, |
1520 | .driver_data = atkbd_inventec_keymap_fixup, | 1536 | .driver_data = atkbd_inventec_keymap_fixup, |
1521 | }, | 1537 | }, |
1538 | { | ||
1539 | .ident = "Samsung NC10", | ||
1540 | .matches = { | ||
1541 | DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), | ||
1542 | DMI_MATCH(DMI_PRODUCT_NAME, "NC10"), | ||
1543 | }, | ||
1544 | .callback = atkbd_setup_fixup, | ||
1545 | .driver_data = atkbd_samsung_keymap_fixup, | ||
1546 | }, | ||
1522 | { } | 1547 | { } |
1523 | }; | 1548 | }; |
1524 | 1549 | ||