]> git.proxmox.com Git - qemu.git/commitdiff
Several corrections in the spitzkbd keymap (patch by Juergen Lock).
authorbalrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 4 Oct 2007 19:41:17 +0000 (19:41 +0000)
committerbalrog <balrog@c046a42c-6fe2-441c-8c8c-71466251a162>
Thu, 4 Oct 2007 19:41:17 +0000 (19:41 +0000)
Don't abort on illegal GPSR reads, instead only warn.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3324 c046a42c-6fe2-441c-8c8c-71466251a162

hw/pxa2xx_gpio.c
hw/spitz.c

index 85aeb50cc340fe2dffd06ac96fb15c62970178e9..723b1c1d0353e1679d963ef78d070825f3d580ed 100644 (file)
@@ -24,6 +24,7 @@ struct pxa2xx_gpio_info_s {
     uint32_t rising[PXA2XX_GPIO_BANKS];
     uint32_t falling[PXA2XX_GPIO_BANKS];
     uint32_t status[PXA2XX_GPIO_BANKS];
+    uint32_t gpsr[PXA2XX_GPIO_BANKS];
     uint32_t gafr[PXA2XX_GPIO_BANKS * 2];
 
     uint32_t prev_level[PXA2XX_GPIO_BANKS];
@@ -152,6 +153,11 @@ static uint32_t pxa2xx_gpio_read(void *opaque, target_phys_addr_t offset)
     case GPDR:         /* GPIO Pin-Direction registers */
         return s->dir[bank];
 
+    case GPSR:         /* GPIO Pin-Output Set registers */
+        printf("%s: Read from a write-only register " REG_FMT "\n",
+                        __FUNCTION__, offset);
+        return s->gpsr[bank];  /* Return last written value.  */
+
     case GRER:         /* GPIO Rising-Edge Detect Enable registers */
         return s->rising[bank];
 
@@ -201,6 +207,7 @@ static void pxa2xx_gpio_write(void *opaque,
     case GPSR:         /* GPIO Pin-Output Set registers */
         s->olevel[bank] |= value;
         pxa2xx_gpio_handler_update(s);
+        s->gpsr[bank] = value;
         break;
 
     case GPCR:         /* GPIO Pin-Output Clear registers */
index 540e1b2065c333f5ea7d314e7baadd7207b6a37e..aca244ee2f87381cb6e2f4f82d7574846d62ffd3 100644 (file)
@@ -194,8 +194,8 @@ static int spitz_keymap[SPITZ_KEY_SENSE_NUM + 1][SPITZ_KEY_STROBE_NUM] = {
     { 0x0f, 0x10, 0x12, 0x14, 0x22, 0x16, 0x24, 0x25,  -1 ,  -1 ,  -1  },
     { 0x3c, 0x11, 0x1f, 0x21, 0x2f, 0x23, 0x32, 0x26,  -1 , 0x36,  -1  },
     { 0x3b, 0x1e, 0x20, 0x2e, 0x30, 0x31, 0x34,  -1 , 0x1c, 0x2a,  -1  },
-    { 0x44, 0x2c, 0x2d, 0x0c, 0x39, 0x33,  -1 , 0x48,  -1 ,  -1 , 0x3d },
-    { 0x37, 0x38,  -1 , 0x45, 0x57, 0x58, 0x4b, 0x50, 0x4d,  -1 ,  -1  },
+    { 0x44, 0x2c, 0x2d, 0x0c, 0x39, 0x33,  -1 , 0x48,  -1 ,  -1 , 0x38 },
+    { 0x37, 0x3d,  -1 , 0x45, 0x57, 0x58, 0x4b, 0x50, 0x4d,  -1 ,  -1  },
     { 0x52, 0x43, 0x01, 0x47, 0x49,  -1 ,  -1 ,  -1 ,  -1 ,  -1 ,  -1  },
 };
 
@@ -415,13 +415,17 @@ static void spitz_keyboard_pre_map(struct spitz_keyboard_s *s)
     s->pre_map[0x0d | SHIFT    ] = 0x13 | FN;          /* plus */
     s->pre_map[0x1a            ] = 0x14 | FN;          /* bracketleft */
     s->pre_map[0x1b            ] = 0x15 | FN;          /* bracketright */
+    s->pre_map[0x1a | SHIFT    ] = 0x16 | FN;          /* braceleft */
+    s->pre_map[0x1b | SHIFT    ] = 0x17 | FN;          /* braceright */
     s->pre_map[0x27            ] = 0x22 | FN;          /* semicolon */
     s->pre_map[0x27 | SHIFT    ] = 0x23 | FN;          /* colon */
     s->pre_map[0x09 | SHIFT    ] = 0x24 | FN;          /* asterisk */
     s->pre_map[0x2b            ] = 0x25 | FN;          /* backslash */
     s->pre_map[0x2b | SHIFT    ] = 0x26 | FN;          /* bar */
     s->pre_map[0x0c | SHIFT    ] = 0x30 | FN;          /* underscore */
+    s->pre_map[0x33 | SHIFT    ] = 0x33 | FN;          /* less */
     s->pre_map[0x35            ] = 0x33 | SHIFT;       /* slash */
+    s->pre_map[0x34 | SHIFT    ] = 0x34 | FN;          /* greater */
     s->pre_map[0x35 | SHIFT    ] = 0x34 | SHIFT;       /* question */
     s->pre_map[0x49            ] = 0x48 | FN;          /* Page_Up */
     s->pre_map[0x51            ] = 0x50 | FN;          /* Page_Down */