Patchwork [2/2] pxa2xx_keypad: Handle 0xe0xx keycodes

login
register
mail settings
Submitter Vasily Khoruzhick
Date Feb. 15, 2011, 1:27 p.m.
Message ID <1297776449-26609-2-git-send-email-anarsoul@gmail.com>
Download mbox | patch
Permalink /patch/83246/
State New
Headers show

Comments

Vasily Khoruzhick - Feb. 15, 2011, 1:27 p.m.
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>
---
 hw/pxa2xx_keypad.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

Patch

diff --git a/hw/pxa2xx_keypad.c b/hw/pxa2xx_keypad.c
index 5b8890b..d77dbf1 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;