Commit 2b76bdc965ba7b4f27133cb345101d9535ddaa79
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 */ | ... | ... |