Commit bd464c2eef04b322a34517cb9886b12bbc045cd1
1 parent
31b87f2e
Mainstone keypad support, by Armin Kuster.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3819 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
45 additions
and
2 deletions
hw/mainstone.c
| @@ -18,6 +18,45 @@ | @@ -18,6 +18,45 @@ | ||
| 18 | #include "sysemu.h" | 18 | #include "sysemu.h" |
| 19 | #include "flash.h" | 19 | #include "flash.h" |
| 20 | 20 | ||
| 21 | +static struct keymap map[0xE0] = { | ||
| 22 | + [0 ... 0xDF] = { -1, -1 }, | ||
| 23 | + [0x1e] = {0,0}, /* a */ | ||
| 24 | + [0x30] = {0,1}, /* b */ | ||
| 25 | + [0x2e] = {0,2}, /* c */ | ||
| 26 | + [0x20] = {0,3}, /* d */ | ||
| 27 | + [0x12] = {0,4}, /* e */ | ||
| 28 | + [0x21] = {0,5}, /* f */ | ||
| 29 | + [0x22] = {1,0}, /* g */ | ||
| 30 | + [0x23] = {1,1}, /* h */ | ||
| 31 | + [0x17] = {1,2}, /* i */ | ||
| 32 | + [0x24] = {1,3}, /* j */ | ||
| 33 | + [0x25] = {1,4}, /* k */ | ||
| 34 | + [0x26] = {1,5}, /* l */ | ||
| 35 | + [0x32] = {2,0}, /* m */ | ||
| 36 | + [0x31] = {2,1}, /* n */ | ||
| 37 | + [0x18] = {2,2}, /* o */ | ||
| 38 | + [0x19] = {2,3}, /* p */ | ||
| 39 | + [0x10] = {2,4}, /* q */ | ||
| 40 | + [0x13] = {2,5}, /* r */ | ||
| 41 | + [0x1f] = {3,0}, /* s */ | ||
| 42 | + [0x14] = {3,1}, /* t */ | ||
| 43 | + [0x16] = {3,2}, /* u */ | ||
| 44 | + [0x2f] = {3,3}, /* v */ | ||
| 45 | + [0x11] = {3,4}, /* w */ | ||
| 46 | + [0x2d] = {3,5}, /* x */ | ||
| 47 | + [0x15] = {4,2}, /* y */ | ||
| 48 | + [0x2c] = {4,3}, /* z */ | ||
| 49 | + [0xc7] = {5,0}, /* Home */ | ||
| 50 | + [0x2a] = {5,1}, /* shift */ | ||
| 51 | + [0x39] = {5,2}, /* space */ | ||
| 52 | + [0x39] = {5,3}, /* space */ | ||
| 53 | + [0x1c] = {5,5}, /* enter */ | ||
| 54 | + [0xc8] = {6,0}, /* up */ | ||
| 55 | + [0xd0] = {6,1}, /* down */ | ||
| 56 | + [0xcb] = {6,2}, /* left */ | ||
| 57 | + [0xcd] = {6,3}, /* right */ | ||
| 58 | +}; | ||
| 59 | + | ||
| 21 | enum mainstone_model_e { mainstone }; | 60 | enum mainstone_model_e { mainstone }; |
| 22 | 61 | ||
| 23 | static void mainstone_common_init(int ram_size, int vga_ram_size, | 62 | static void mainstone_common_init(int ram_size, int vga_ram_size, |
| @@ -79,6 +118,10 @@ static void mainstone_common_init(int ram_size, int vga_ram_size, | @@ -79,6 +118,10 @@ static void mainstone_common_init(int ram_size, int vga_ram_size, | ||
| 79 | 118 | ||
| 80 | mst_irq = mst_irq_init(cpu, MST_FPGA_PHYS, PXA2XX_PIC_GPIO_0); | 119 | mst_irq = mst_irq_init(cpu, MST_FPGA_PHYS, PXA2XX_PIC_GPIO_0); |
| 81 | 120 | ||
| 121 | + /* setup keypad */ | ||
| 122 | + printf("map addr %p\n", &map); | ||
| 123 | + pxa27x_register_keypad(cpu->kp, map, 0xe0); | ||
| 124 | + | ||
| 82 | /* MMC/SD host */ | 125 | /* MMC/SD host */ |
| 83 | pxa2xx_mmci_handlers(cpu->mmc, NULL, mst_irq[MMC_IRQ]); | 126 | pxa2xx_mmci_handlers(cpu->mmc, NULL, mst_irq[MMC_IRQ]); |
| 84 | 127 |
hw/pxa2xx_keypad.c
| @@ -321,7 +321,7 @@ struct pxa2xx_keypad_s *pxa27x_keypad_init(target_phys_addr_t base, | @@ -321,7 +321,7 @@ struct pxa2xx_keypad_s *pxa27x_keypad_init(target_phys_addr_t base, | ||
| 321 | 321 | ||
| 322 | iomemtype = cpu_register_io_memory(0, pxa2xx_keypad_readfn, | 322 | iomemtype = cpu_register_io_memory(0, pxa2xx_keypad_readfn, |
| 323 | pxa2xx_keypad_writefn, s); | 323 | pxa2xx_keypad_writefn, s); |
| 324 | - cpu_register_physical_memory(base, 0x00100000, iomemtype);////check size | 324 | + cpu_register_physical_memory(base, 0x00100000, iomemtype); |
| 325 | 325 | ||
| 326 | register_savevm("pxa2xx_keypad", 0, 0, | 326 | register_savevm("pxa2xx_keypad", 0, 0, |
| 327 | pxa2xx_keypad_save, pxa2xx_keypad_load, s); | 327 | pxa2xx_keypad_save, pxa2xx_keypad_load, s); |
| @@ -334,7 +334,7 @@ void pxa27x_register_keypad(struct pxa2xx_keypad_s *kp, struct keymap *map, | @@ -334,7 +334,7 @@ void pxa27x_register_keypad(struct pxa2xx_keypad_s *kp, struct keymap *map, | ||
| 334 | { | 334 | { |
| 335 | kp->map = (struct keymap *) qemu_mallocz(sizeof(struct keymap) * size); | 335 | kp->map = (struct keymap *) qemu_mallocz(sizeof(struct keymap) * size); |
| 336 | 336 | ||
| 337 | - if(!map || size < 80) { | 337 | + if(!map || size < 0x80) { |
| 338 | fprintf(stderr, "%s - No PXA keypad map defined\n", __FUNCTION__); | 338 | fprintf(stderr, "%s - No PXA keypad map defined\n", __FUNCTION__); |
| 339 | exit(-1); | 339 | exit(-1); |
| 340 | } | 340 | } |