Commit 2b76bdc965ba7b4f27133cb345101d9535ddaa79

Authored by balrog
1 parent 1cc8e6f0

Several corrections in the spitzkbd keymap (patch by Juergen Lock).

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
Showing 2 changed files with 13 additions and 2 deletions
hw/pxa2xx_gpio.c
... ... @@ -24,6 +24,7 @@ struct pxa2xx_gpio_info_s {
24 24 uint32_t rising[PXA2XX_GPIO_BANKS];
25 25 uint32_t falling[PXA2XX_GPIO_BANKS];
26 26 uint32_t status[PXA2XX_GPIO_BANKS];
  27 + uint32_t gpsr[PXA2XX_GPIO_BANKS];
27 28 uint32_t gafr[PXA2XX_GPIO_BANKS * 2];
28 29  
29 30 uint32_t prev_level[PXA2XX_GPIO_BANKS];
... ... @@ -152,6 +153,11 @@ static uint32_t pxa2xx_gpio_read(void *opaque, target_phys_addr_t offset)
152 153 case GPDR: /* GPIO Pin-Direction registers */
153 154 return s->dir[bank];
154 155  
  156 + case GPSR: /* GPIO Pin-Output Set registers */
  157 + printf("%s: Read from a write-only register " REG_FMT "\n",
  158 + __FUNCTION__, offset);
  159 + return s->gpsr[bank]; /* Return last written value. */
  160 +
155 161 case GRER: /* GPIO Rising-Edge Detect Enable registers */
156 162 return s->rising[bank];
157 163  
... ... @@ -201,6 +207,7 @@ static void pxa2xx_gpio_write(void *opaque,
201 207 case GPSR: /* GPIO Pin-Output Set registers */
202 208 s->olevel[bank] |= value;
203 209 pxa2xx_gpio_handler_update(s);
  210 + s->gpsr[bank] = value;
204 211 break;
205 212  
206 213 case GPCR: /* GPIO Pin-Output Clear registers */
... ...
hw/spitz.c
... ... @@ -194,8 +194,8 @@ static int spitz_keymap[SPITZ_KEY_SENSE_NUM + 1][SPITZ_KEY_STROBE_NUM] = {
194 194 { 0x0f, 0x10, 0x12, 0x14, 0x22, 0x16, 0x24, 0x25, -1 , -1 , -1 },
195 195 { 0x3c, 0x11, 0x1f, 0x21, 0x2f, 0x23, 0x32, 0x26, -1 , 0x36, -1 },
196 196 { 0x3b, 0x1e, 0x20, 0x2e, 0x30, 0x31, 0x34, -1 , 0x1c, 0x2a, -1 },
197   - { 0x44, 0x2c, 0x2d, 0x0c, 0x39, 0x33, -1 , 0x48, -1 , -1 , 0x3d },
198   - { 0x37, 0x38, -1 , 0x45, 0x57, 0x58, 0x4b, 0x50, 0x4d, -1 , -1 },
  197 + { 0x44, 0x2c, 0x2d, 0x0c, 0x39, 0x33, -1 , 0x48, -1 , -1 , 0x38 },
  198 + { 0x37, 0x3d, -1 , 0x45, 0x57, 0x58, 0x4b, 0x50, 0x4d, -1 , -1 },
199 199 { 0x52, 0x43, 0x01, 0x47, 0x49, -1 , -1 , -1 , -1 , -1 , -1 },
200 200 };
201 201  
... ... @@ -415,13 +415,17 @@ static void spitz_keyboard_pre_map(struct spitz_keyboard_s *s)
415 415 s->pre_map[0x0d | SHIFT ] = 0x13 | FN; /* plus */
416 416 s->pre_map[0x1a ] = 0x14 | FN; /* bracketleft */
417 417 s->pre_map[0x1b ] = 0x15 | FN; /* bracketright */
  418 + s->pre_map[0x1a | SHIFT ] = 0x16 | FN; /* braceleft */
  419 + s->pre_map[0x1b | SHIFT ] = 0x17 | FN; /* braceright */
418 420 s->pre_map[0x27 ] = 0x22 | FN; /* semicolon */
419 421 s->pre_map[0x27 | SHIFT ] = 0x23 | FN; /* colon */
420 422 s->pre_map[0x09 | SHIFT ] = 0x24 | FN; /* asterisk */
421 423 s->pre_map[0x2b ] = 0x25 | FN; /* backslash */
422 424 s->pre_map[0x2b | SHIFT ] = 0x26 | FN; /* bar */
423 425 s->pre_map[0x0c | SHIFT ] = 0x30 | FN; /* underscore */
  426 + s->pre_map[0x33 | SHIFT ] = 0x33 | FN; /* less */
424 427 s->pre_map[0x35 ] = 0x33 | SHIFT; /* slash */
  428 + s->pre_map[0x34 | SHIFT ] = 0x34 | FN; /* greater */
425 429 s->pre_map[0x35 | SHIFT ] = 0x34 | SHIFT; /* question */
426 430 s->pre_map[0x49 ] = 0x48 | FN; /* Page_Up */
427 431 s->pre_map[0x51 ] = 0x50 | FN; /* Page_Down */
... ...