Revision 38a34e1d

b/hw/omap.c
2841 2841
    int i;
2842 2842
    uint8_t *row, rows = 0, cols = ~s->cols;
2843 2843

  
2844
    for (row = s->buttons + 4, i = 1 << 5; i; row --, i >>= 1)
2844
    for (row = s->buttons + 4, i = 1 << 4; i; row --, i >>= 1)
2845 2845
        if (*row & cols)
2846
            s->row_latch |= i;
2846
            rows |= i;
2847 2847

  
2848
    if (rows && ~s->kbd_mask && s->clk)
2849
        qemu_irq_raise(s->kbd_irq);
2848
    qemu_set_irq(s->kbd_irq, rows && ~s->kbd_mask && s->clk);
2850 2849
    s->row_latch = rows ^ 0x1f;
2851 2850
}
2852 2851

  
......
3002 3001
    s->latch = 0;
3003 3002
    s->ints = 0;
3004 3003
    s->row_latch = 0x1f;
3004
    s->clk = 1;
3005 3005
}
3006 3006

  
3007 3007
static void omap_mpuio_onoff(void *opaque, int line, int on)
......
3056 3056
                        __FUNCTION__, col, row);
3057 3057

  
3058 3058
    if (down)
3059
        s->buttons[row] = 1 << col;
3059
        s->buttons[row] |= 1 << col;
3060 3060
    else
3061
        s->buttons[row] = ~(1 << col);
3061
        s->buttons[row] &= ~(1 << col);
3062 3062

  
3063 3063
    omap_mpuio_kbd_update(s);
3064 3064
}
b/hw/palm.c
61 61
{
62 62
}
63 63

  
64
static struct {
65
    int row;
66
    int column;
67
} palmte_keymap[0x80] = {
68
    [0 ... 0x7f] = { -1, -1 },
69
    [0x3b] = { 0, 0 },	/* F1	-> Calendar */
70
    [0x3c] = { 1, 0 },	/* F2	-> Contacts */
71
    [0x3d] = { 2, 0 },	/* F3	-> Tasks List */
72
    [0x3e] = { 3, 0 },	/* F4	-> Note Pad */
73
    [0x01] = { 4, 0 },	/* Esc	-> Power */
74
    [0x4b] = { 0, 1 },	/* 	   Left */
75
    [0x50] = { 1, 1 },	/* 	   Down */
76
    [0x48] = { 2, 1 },	/*	   Up */
77
    [0x4d] = { 3, 1 },	/*	   Right */
78
    [0x4c] = { 4, 1 },	/* 	   Centre */
79
    [0x39] = { 4, 1 },	/* Spc	-> Centre */
80
};
81

  
82
static void palmte_button_event(void *opaque, int keycode)
83
{
84
    struct omap_mpu_state_s *cpu = (struct omap_mpu_state_s *) opaque;
85

  
86
    if (palmte_keymap[keycode & 0x7f].row != -1)
87
        omap_mpuio_key(cpu->mpuio,
88
                        palmte_keymap[keycode & 0x7f].row,
89
                        palmte_keymap[keycode & 0x7f].column,
90
                        !(keycode & 0x80));
91
}
92

  
64 93
static void palmte_init(int ram_size, int vga_ram_size, int boot_device,
65 94
                DisplayState *ds, const char **fd_filename, int snapshot,
66 95
                const char *kernel_filename, const char *kernel_cmdline,
......
101 130

  
102 131
    palmte_microwire_setup(cpu);
103 132

  
133
    qemu_add_kbd_event_handler(palmte_button_event, cpu);
134

  
104 135
    /* Setup initial (reset) machine state */
105 136
    if (nb_option_roms) {
106 137
        rom_size = get_image_size(option_rom[0]);

Also available in: Unified diff