diff options
author | Simon Glass <sjg@chromium.org> | 2015-11-11 20:05:39 +0300 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2015-11-20 06:13:41 +0300 |
commit | ba42034267050d1a41479ba133d1c5b8679397f7 (patch) | |
tree | a2469efcc8de1658910e5e473fcd8f83a6b11b34 | |
parent | a683d0d347f2977632c5b1b0b58ca1fa894fef9c (diff) | |
download | u-boot-ba42034267050d1a41479ba133d1c5b8679397f7.tar.xz |
input: Handle caps lock
When caps lock is enabled we should convert lower case to upper case. Add
this to the input key processing so that caps lock works correctly.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
-rw-r--r-- | drivers/input/input.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c index a64bd87e19..5de8d9d005 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -452,16 +452,19 @@ static int input_keycodes_to_ascii(struct input_config *config, /* Start conversion by looking for the first new keycode (by same). */ for (i = same; i < num_keycodes; i++) { int key = keycode[i]; - int ch = (key < table->num_entries) ? table->xlate[key] : 0xff; + int ch; /* * For a normal key (with an ASCII value), add it; otherwise * translate special key to escape sequence if possible. */ - if (ch != 0xff) { - if (ch_count < max_chars) - output_ch[ch_count] = (uchar)ch; - ch_count++; + if (key < table->num_entries) { + ch = table->xlate[key]; + if ((config->flags & FLAG_CAPS_LOCK) && + ch >= 'a' && ch <= 'z') + ch -= 'a' - 'A'; + if (ch_count < max_chars && ch != 0xff) + output_ch[ch_count++] = (uchar)ch; } else { ch_count += input_keycode_to_ansi364(config, key, output_ch, max_chars); |