Add PalmT|E matrix keypad connected to OMAP GPIOs.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3470 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
fe71e81aba
commit
38a34e1d7a
12
hw/omap.c
12
hw/omap.c
@ -2841,12 +2841,11 @@ static void omap_mpuio_kbd_update(struct omap_mpuio_s *s)
|
|||||||
int i;
|
int i;
|
||||||
uint8_t *row, rows = 0, cols = ~s->cols;
|
uint8_t *row, rows = 0, cols = ~s->cols;
|
||||||
|
|
||||||
for (row = s->buttons + 4, i = 1 << 5; i; row --, i >>= 1)
|
for (row = s->buttons + 4, i = 1 << 4; i; row --, i >>= 1)
|
||||||
if (*row & cols)
|
if (*row & cols)
|
||||||
s->row_latch |= i;
|
rows |= i;
|
||||||
|
|
||||||
if (rows && ~s->kbd_mask && s->clk)
|
qemu_set_irq(s->kbd_irq, rows && ~s->kbd_mask && s->clk);
|
||||||
qemu_irq_raise(s->kbd_irq);
|
|
||||||
s->row_latch = rows ^ 0x1f;
|
s->row_latch = rows ^ 0x1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3002,6 +3001,7 @@ void omap_mpuio_reset(struct omap_mpuio_s *s)
|
|||||||
s->latch = 0;
|
s->latch = 0;
|
||||||
s->ints = 0;
|
s->ints = 0;
|
||||||
s->row_latch = 0x1f;
|
s->row_latch = 0x1f;
|
||||||
|
s->clk = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void omap_mpuio_onoff(void *opaque, int line, int on)
|
static void omap_mpuio_onoff(void *opaque, int line, int on)
|
||||||
@ -3056,9 +3056,9 @@ void omap_mpuio_key(struct omap_mpuio_s *s, int row, int col, int down)
|
|||||||
__FUNCTION__, col, row);
|
__FUNCTION__, col, row);
|
||||||
|
|
||||||
if (down)
|
if (down)
|
||||||
s->buttons[row] = 1 << col;
|
s->buttons[row] |= 1 << col;
|
||||||
else
|
else
|
||||||
s->buttons[row] = ~(1 << col);
|
s->buttons[row] &= ~(1 << col);
|
||||||
|
|
||||||
omap_mpuio_kbd_update(s);
|
omap_mpuio_kbd_update(s);
|
||||||
}
|
}
|
||||||
|
31
hw/palm.c
31
hw/palm.c
@ -61,6 +61,35 @@ static void palmte_microwire_setup(struct omap_mpu_state_s *cpu)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct {
|
||||||
|
int row;
|
||||||
|
int column;
|
||||||
|
} palmte_keymap[0x80] = {
|
||||||
|
[0 ... 0x7f] = { -1, -1 },
|
||||||
|
[0x3b] = { 0, 0 }, /* F1 -> Calendar */
|
||||||
|
[0x3c] = { 1, 0 }, /* F2 -> Contacts */
|
||||||
|
[0x3d] = { 2, 0 }, /* F3 -> Tasks List */
|
||||||
|
[0x3e] = { 3, 0 }, /* F4 -> Note Pad */
|
||||||
|
[0x01] = { 4, 0 }, /* Esc -> Power */
|
||||||
|
[0x4b] = { 0, 1 }, /* Left */
|
||||||
|
[0x50] = { 1, 1 }, /* Down */
|
||||||
|
[0x48] = { 2, 1 }, /* Up */
|
||||||
|
[0x4d] = { 3, 1 }, /* Right */
|
||||||
|
[0x4c] = { 4, 1 }, /* Centre */
|
||||||
|
[0x39] = { 4, 1 }, /* Spc -> Centre */
|
||||||
|
};
|
||||||
|
|
||||||
|
static void palmte_button_event(void *opaque, int keycode)
|
||||||
|
{
|
||||||
|
struct omap_mpu_state_s *cpu = (struct omap_mpu_state_s *) opaque;
|
||||||
|
|
||||||
|
if (palmte_keymap[keycode & 0x7f].row != -1)
|
||||||
|
omap_mpuio_key(cpu->mpuio,
|
||||||
|
palmte_keymap[keycode & 0x7f].row,
|
||||||
|
palmte_keymap[keycode & 0x7f].column,
|
||||||
|
!(keycode & 0x80));
|
||||||
|
}
|
||||||
|
|
||||||
static void palmte_init(int ram_size, int vga_ram_size, int boot_device,
|
static void palmte_init(int ram_size, int vga_ram_size, int boot_device,
|
||||||
DisplayState *ds, const char **fd_filename, int snapshot,
|
DisplayState *ds, const char **fd_filename, int snapshot,
|
||||||
const char *kernel_filename, const char *kernel_cmdline,
|
const char *kernel_filename, const char *kernel_cmdline,
|
||||||
@ -101,6 +130,8 @@ static void palmte_init(int ram_size, int vga_ram_size, int boot_device,
|
|||||||
|
|
||||||
palmte_microwire_setup(cpu);
|
palmte_microwire_setup(cpu);
|
||||||
|
|
||||||
|
qemu_add_kbd_event_handler(palmte_button_event, cpu);
|
||||||
|
|
||||||
/* Setup initial (reset) machine state */
|
/* Setup initial (reset) machine state */
|
||||||
if (nb_option_roms) {
|
if (nb_option_roms) {
|
||||||
rom_size = get_image_size(option_rom[0]);
|
rom_size = get_image_size(option_rom[0]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user