diff options
author | Vasily Khoruzhick <anarsoul@gmail.com> | 2011-02-15 15:27:29 +0200 |
---|---|---|
committer | Aurelien Jarno <aurelien@aurel32.net> | 2011-02-20 19:53:23 +0100 |
commit | 582798b5c6c3ae0e53f099dc516a025b9d8589fd (patch) | |
tree | 83a20c1850929239dc737032f90871db35f7ec07 /hw/pxa2xx_keypad.c | |
parent | b976b4c0e7b77082b8dc43bf408dc92efedc53a0 (diff) |
pxa2xx_keypad: Handle 0xe0xx keycodes
Add handling of 0xe0xx keycodes to pxa2xx_driver.
Extended keycodes in keymap should be marked with most significant
bit set (i.e. 0x80). Without this patch it's not possible to handle
i.e. cursor keys.
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'hw/pxa2xx_keypad.c')
-rw-r--r-- | hw/pxa2xx_keypad.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/hw/pxa2xx_keypad.c b/hw/pxa2xx_keypad.c index 5b8890b0f..d77dbf179 100644 --- a/hw/pxa2xx_keypad.c +++ b/hw/pxa2xx_keypad.c @@ -83,6 +83,7 @@ struct PXA2xxKeyPadState { qemu_irq irq; struct keymap *map; int pressed_cnt; + int alt_code; uint32_t kpc; uint32_t kpdk; @@ -116,6 +117,11 @@ static void pxa27x_keyboard_event (PXA2xxKeyPadState *kp, int keycode) int row, col, rel, assert_irq = 0; uint32_t val; + if (keycode == 0xe0) { + kp->alt_code = 1; + return; + } + if(!(kp->kpc & KPC_ME)) /* skip if not enabled */ return; @@ -125,6 +131,10 @@ static void pxa27x_keyboard_event (PXA2xxKeyPadState *kp, int keycode) rel = (keycode & 0x80) ? 1 : 0; /* key release from qemu */ keycode &= ~(0x80); /* strip qemu key release bit */ + if (kp->alt_code) { + keycode |= 0x80; + kp->alt_code = 0; + } row = kp->map[keycode].row; col = kp->map[keycode].column; |