[U-Boot] [PATCH] USB: add arrow key support to usb_kbd
Simon Glass
sjg at chromium.org
Tue Nov 6 23:52:03 CET 2012
On Tue, Nov 6, 2012 at 1:26 PM, Allen Martin <amartin at nvidia.com> wrote:
> 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 at nvidia.com>
Tested-by: Simon Glass <sjg at chromium.org>
Acked-by: Simon Glass <sjg at chromium.org>
> ---
> common/usb_kbd.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/common/usb_kbd.c b/common/usb_kbd.c
> index 24467ce..4efbcfe 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];
> --
> 1.7.10.4
>
More information about the U-Boot
mailing list