input_regs(&logibm_dev, regs); input_report_rel(&logibm_dev, REL_X, dx); input_report_rel(&logibm_dev, REL_Y, dy); input_report_key(&logibm_dev, BTN_RIGHT,  buttons & 1); input_report_key(&logibm_dev, BTN_MIDDLE, buttons & 2); input_report_key(&logibm_dev, BTN_LEFT,   buttons & 4); input_sync(&logibm_dev); 
input_regs(logibm_dev, regs); input_report_rel(logibm_dev, REL_X, dx); input_report_rel(logibm_dev, REL_Y, dy); input_report_key(logibm_dev, BTN_RIGHT,  buttons & 1); input_report_key(logibm_dev, BTN_MIDDLE, buttons & 2); input_report_key(logibm_dev, BTN_LEFT,   buttons & 4); input_sync(logibm_dev); 
static irqreturn_t logibm_interrupt(int irq, void *dev_id, struct pt_regs *regs){	char dx, dy;	unsigned char buttons;	outb(LOGIBM_READ_X_LOW, LOGIBM_CONTROL_PORT);	dx = (inb(LOGIBM_DATA_PORT) & 0xf);	outb(LOGIBM_READ_X_HIGH, LOGIBM_CONTROL_PORT);	dx |= (inb(LOGIBM_DATA_PORT) & 0xf) << 4;	outb(LOGIBM_READ_Y_LOW, LOGIBM_CONTROL_PORT);	dy = (inb(LOGIBM_DATA_PORT) & 0xf);	outb(LOGIBM_READ_Y_HIGH, LOGIBM_CONTROL_PORT);	buttons = inb(LOGIBM_DATA_PORT);	dy |= (buttons & 0xf) << 4;	buttons = ~buttons >> 5;	input_regs(&logibm_dev, regs);	input_report_rel(&logibm_dev, REL_X, dx);	input_report_rel(&logibm_dev, REL_Y, dy);	input_report_key(&logibm_dev, BTN_RIGHT,  buttons & 1);	input_report_key(&logibm_dev, BTN_MIDDLE, buttons & 2);	input_report_key(&logibm_dev, BTN_LEFT,   buttons & 4);	input_sync(&logibm_dev);	outb(LOGIBM_ENABLE_IRQ, LOGIBM_CONTROL_PORT);	return IRQ_HANDLED;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/2e5b636bb5f8dacbb91d08544e2c41ebcad5dace/logibm.c/buggy/drivers/input/mouse/logibm.c