Changeset c47e1a8 in mainline for uspace/srv/hw/char/i8042/i8042.c


Ignore:
Timestamp:
2010-05-21T07:50:04Z (15 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d51ee2b
Parents:
cf8cc36 (diff), 15b592b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes (rev. 451)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/hw/char/i8042/i8042.c

    rcf8cc36 rc47e1a8  
    6868#define i8042_KBD_TRANSLATE     0x40
    6969
    70 /* Mouse constants */
    71 #define MOUSE_OUT_INIT  0xf4
    72 #define MOUSE_ACK       0xfa
    7370
    7471enum {
     
    167164static int i8042_init(void)
    168165{
     166        if (sysinfo_get_value("i8042.address.physical", &i8042_physical) != EOK)
     167                return -1;
     168       
     169        if (sysinfo_get_value("i8042.address.kernel", &i8042_kernel) != EOK)
     170                return -1;
     171       
    169172        void *vaddr;
    170 
    171         i8042_physical = sysinfo_value("i8042.address.physical");
    172         i8042_kernel = sysinfo_value("i8042.address.kernel");
    173173        if (pio_enable((void *) i8042_physical, sizeof(i8042_t), &vaddr) != 0)
    174174                return -1;
     175       
    175176        i8042 = vaddr;
    176 
     177       
     178        sysarg_t inr_a;
     179        sysarg_t inr_b;
     180       
     181        if (sysinfo_get_value("i8042.inr_a", &inr_a) != EOK)
     182                return -1;
     183       
     184        if (sysinfo_get_value("i8042.inr_b", &inr_b) != EOK)
     185                return -1;
     186       
    177187        async_set_interrupt_received(i8042_irq_handler);
    178 
    179         /* Disable kbd, enable mouse */
     188       
     189        /* Disable kbd and aux */
     190        wait_ready();
    180191        pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB);
    181192        wait_ready();
    182         pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB);
    183         wait_ready();
    184         pio_write_8(&i8042->data, i8042_KBD_DISABLE);
    185         wait_ready();
     193        pio_write_8(&i8042->data, i8042_KBD_DISABLE | i8042_AUX_DISABLE);
    186194
    187195        /* Flush all current IO */
     
    189197                (void) pio_read_8(&i8042->data);
    190198
    191         i8042_port_write(DEVID_AUX, MOUSE_OUT_INIT);
    192 
    193199        i8042_kbd.cmds[0].addr = (void *) &((i8042_t *) i8042_kernel)->status;
    194200        i8042_kbd.cmds[3].addr = (void *) &((i8042_t *) i8042_kernel)->data;
    195         ipc_register_irq(sysinfo_value("i8042.inr_a"), device_assign_devno(), 0, &i8042_kbd);
    196         ipc_register_irq(sysinfo_value("i8042.inr_b"), device_assign_devno(), 0, &i8042_kbd);
    197 
     201        ipc_register_irq(inr_a, device_assign_devno(), 0, &i8042_kbd);
     202        ipc_register_irq(inr_b, device_assign_devno(), 0, &i8042_kbd);
     203        printf("%s: registered for interrupts %d and %d\n", NAME, inr_a, inr_b);
     204
     205        wait_ready();
    198206        pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB);
    199207        wait_ready();
    200208        pio_write_8(&i8042->data, i8042_KBD_IE | i8042_KBD_TRANSLATE |
    201209            i8042_AUX_IE);
    202         wait_ready();
    203210
    204211        return 0;
     
    271278{
    272279        if (devid == DEVID_AUX) {
     280                wait_ready();
    273281                pio_write_8(&i8042->status, i8042_CMD_WRITE_AUX);
    274                 wait_ready();
    275         }
     282        }
     283        wait_ready();
    276284        pio_write_8(&i8042->data, data);
    277         wait_ready();
    278285}
    279286
Note: See TracChangeset for help on using the changeset viewer.