static irqreturn_t top_half(int irq, void *dev_id)
{
    #ifdef DEBUG
    to_tty_string("[simple_keyboard.c] Entring top_half.\n\r");
    #endif

    tasklet_data.status = i8042_read_status();
    tasklet_data.scancode = i8042_read_data(); 

    #ifdef DEBUG
    to_tty_string("[simple_keyboard.c] Got scancode\n\r");
    #endif
    printk(KERN_INFO "Got scancode %02x in top_half.\n", tasklet_data.scancode);

    if ((tasklet_data.scancode & BIT_SCANCODE) == 0x01)
        exit_driver();

    tasklet_schedule(&simple_keyboard_tasklet);

    return IRQ_HANDLED;
}
Example #2
0
inline void i8042_wait_write()
{
	while (i8042_read_status() & I8042_STATUS_FLAG_OUT_FULL);
}
Example #3
0
		r = i8042_read_data();
		if (r == 0x55)
			return 0;
	}
	return -1;
}

void i8042_enable_aux()
{
	i8042_toggle_port(1, 1);
	i8042_write_ram(I8042_RAM_CCR, (i8042_read_ram(I8042_RAM_CCR) | I8042_CCR_AUX_IEN | I8042_CCR_KBD_IEN) & ~I8042_CCR_AUX_DISABLE );
}

int i8042_isr(__attribute__((__unused__)) irq_id_t irq_id, __attribute__((__unused__)) void *context)
{
	int status = i8042_read_status();
	int data = 0;
	//debugcon_aprintf("i8042isr status:%i\n",status);
	if (~status & I8042_STATUS_FLAG_IN_FULL)
		return 1;
	while (status & I8042_STATUS_FLAG_IN_FULL) {
		data = i8042_read_data();
		if (status & I8042_STATUS_FLAG_AUX_DATA) {
			ps2aux_handle_data(data);
			
		} else {
			ps2kbd_handle_data(data);
		}
		status = i8042_read_status();
	}
	return 1;