diff options
| author | Allen Martin <amartin@nvidia.com> | 2012-11-06 13:26:03 -0800 | 
|---|---|---|
| committer | Marek Vasut <marex@denx.de> | 2012-11-20 00:16:06 +0100 | 
| commit | 4151a400cfcd4762ca422a04890cd5869bac155c (patch) | |
| tree | d9d752c63ec145953b8fc685a28b00a6fe3e1622 /common | |
| parent | 5ddcc38bee7c4e58197ff8de7919aca2532a8e03 (diff) | |
| download | olio-uboot-2014.01-4151a400cfcd4762ca422a04890cd5869bac155c.tar.xz olio-uboot-2014.01-4151a400cfcd4762ca422a04890cd5869bac155c.zip | |
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>
Diffstat (limited to 'common')
| -rw-r--r-- | common/usb_kbd.c | 13 | 
1 files changed, 13 insertions, 0 deletions
| diff --git a/common/usb_kbd.c b/common/usb_kbd.c index 24467cec1..4efbcfe90 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -94,6 +94,15 @@ static const unsigned char usb_kbd_num_keypad[] = {  };  /* + * 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]; |