mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
USB: add arrow key support to usb_kbd
Check for scancodes for arrow keys and map them to ^F/^B, ^N/^P. Control characters are used instead of ANSI sequence because the queueing code in usb_kbd doesn't handle the data increase when one keypress generates 3 keycodes. The real fix is to convert this driver to use the input subsystem and queue, but this allows arrow keys to work until this driver is converted. Signed-off-by: Allen Martin <amartin@nvidia.com>
This commit is contained in:
parent
5ddcc38bee
commit
4151a400cf
1 changed files with 13 additions and 0 deletions
|
@ -93,6 +93,15 @@ static const unsigned char usb_kbd_num_keypad[] = {
|
|||
'.', 0, 0, 0, '='
|
||||
};
|
||||
|
||||
/*
|
||||
* map arrow keys to ^F/^B ^N/^P, can't really use the proper
|
||||
* ANSI sequence for arrow keys because the queuing code breaks
|
||||
* when a single keypress expands to 3 queue elements
|
||||
*/
|
||||
static const unsigned char usb_kbd_arrow[] = {
|
||||
0x6, 0x2, 0xe, 0x10
|
||||
};
|
||||
|
||||
/*
|
||||
* NOTE: It's important for the NUM, CAPS, SCROLL-lock bits to be in this
|
||||
* order. See usb_kbd_setled() function!
|
||||
|
@ -224,6 +233,10 @@ static int usb_kbd_translate(struct usb_kbd_pdata *data, unsigned char scancode,
|
|||
keycode = usb_kbd_numkey[scancode - 0x1e];
|
||||
}
|
||||
|
||||
/* Arrow keys */
|
||||
if ((scancode >= 0x4f) && (scancode <= 0x52))
|
||||
keycode = usb_kbd_arrow[scancode - 0x4f];
|
||||
|
||||
/* Numeric keypad */
|
||||
if ((scancode >= 0x54) && (scancode <= 0x67))
|
||||
keycode = usb_kbd_num_keypad[scancode - 0x54];
|
||||
|
|
Loading…
Reference in a new issue