summaryrefslogtreecommitdiff
path: root/drivers/staging/unisys
diff options
context:
space:
mode:
authorTim Sell <Timothy.Sell@unisys.com>2015-10-01 16:41:58 (GMT)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-10-02 09:40:19 (GMT)
commit0fbc149c9426f2ca18745bf94eb854b6d41332bb (patch)
tree91304d4b848b96462a5b8e3fe21fa37cd2e0d4ae /drivers/staging/unisys
parentf84bd6267d623b49f196d54ba9edc41ff1c4d5e3 (diff)
downloadlinux-0fbc149c9426f2ca18745bf94eb854b6d41332bb.tar.xz
staging: unisys: visorhid: correctly map keys with extended scancodes
The most-noticed key that wasn't being mapped correctly was Right-Alt, which is the AltGr key on many non-US keyboards, used to select many extended characters. Signed-off-by: Tim Sell <Timothy.Sell@unisys.com> Signed-off-by: Benjamin Romer <benjamin.romer@unisys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/unisys')
-rw-r--r--drivers/staging/unisys/visorhid/visorhid.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/staging/unisys/visorhid/visorhid.c b/drivers/staging/unisys/visorhid/visorhid.c
index cca426b..119b72d 100644
--- a/drivers/staging/unisys/visorhid/visorhid.c
+++ b/drivers/staging/unisys/visorhid/visorhid.c
@@ -213,13 +213,14 @@ static unsigned char visorkbd_keycode[256] = { /* American layout */
/* This maps the <xx> in extended scancodes of the form "0xE0 <xx>" into
* keycodes.
*/
-static unsigned char ext_keycode[256] = {
+static unsigned char visorkbd_ext_keycode[256] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 */
0, 0, 0, 0, KEY_KPENTER, KEY_RIGHTCTRL, 0, 0, /* 0x18 */
0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */
KEY_RIGHTALT, 0, 0, 0, 0, 0, 0, 0, /* 0x28 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 0x30 */
+ KEY_RIGHTALT /* AltGr */, 0, 0, 0, 0, 0, 0, 0, /* 0x38 */
0, 0, 0, 0, 0, 0, 0, KEY_HOME, /* 0x40 */
KEY_UP, KEY_PAGEUP, 0, KEY_LEFT, 0, KEY_RIGHT, 0, KEY_END, /* 0x48 */
KEY_DOWN, KEY_PAGEDOWN, KEY_INSERT, KEY_DELETE, 0, 0, 0, 0, /* 0x50 */
@@ -348,6 +349,9 @@ register_client_keyboard(void)
for (i = 1; i < ARRAY_SIZE(visorkbd_keycode); i++)
set_bit(visorkbd_keycode[i], visorinput_dev->keybit);
+ for (i = 1; i < ARRAY_SIZE(visorkbd_ext_keycode); i++)
+ set_bit(visorkbd_ext_keycode[i], visorinput_dev->keybit);
+
error = input_register_device(visorinput_dev);
if (error) {
input_free_device(visorinput_dev);
@@ -469,7 +473,7 @@ scancode_to_keycode(int scancode)
int keycode;
if (scancode > 0xff)
- keycode = ext_keycode[(scancode >> 8) & 0xff];
+ keycode = visorkbd_ext_keycode[(scancode >> 8) & 0xff];
else
keycode = visorkbd_keycode[scancode];
return keycode;