[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