summaryrefslogtreecommitdiff
path: root/hw/pxa2xx_keypad.c
diff options
context:
space:
mode:
authorVasily Khoruzhick <anarsoul@gmail.com>2011-02-15 15:27:29 +0200
committerAurelien Jarno <aurelien@aurel32.net>2011-02-20 19:53:23 +0100
commit582798b5c6c3ae0e53f099dc516a025b9d8589fd (patch)
tree83a20c1850929239dc737032f90871db35f7ec07 /hw/pxa2xx_keypad.c
parentb976b4c0e7b77082b8dc43bf408dc92efedc53a0 (diff)
downloadqemu-582798b5c6c3ae0e53f099dc516a025b9d8589fd.tar.gz
qemu-582798b5c6c3ae0e53f099dc516a025b9d8589fd.tar.bz2
qemu-582798b5c6c3ae0e53f099dc516a025b9d8589fd.zip
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.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/hw/pxa2xx_keypad.c b/hw/pxa2xx_keypad.c
index 5b8890b0f6..d77dbf1793 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;