input_event(&atkbd->dev, EV_MSC, MSC_RAW, code); 
input_event(atkbd->dev, EV_MSC, MSC_RAW, code); 
static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,			unsigned int flags, struct pt_regs *regs){	struct atkbd *atkbd = serio_get_drvdata(serio);	unsigned int code = data;	int scroll = 0, hscroll = 0, click = -1;	int value;#ifdef ATKBD_DEBUG	printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags);#endif#if !defined(__i386__) && !defined (__x86_64__)	if ((flags & (SERIO_FRAME | SERIO_PARITY)) && (~flags & SERIO_TIMEOUT) && !atkbd->resend && atkbd->write) {		printk(KERN_WARNING "atkbd.c: frame/parity error: %02x\n", flags);		serio_write(serio, ATKBD_CMD_RESEND);		atkbd->resend = 1;		goto out;	}	if (!flags && data == ATKBD_RET_ACK)		atkbd->resend = 0;#endif	if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_ACK))		if  (ps2_handle_ack(&atkbd->ps2dev, data))			goto out;	if (unlikely(atkbd->ps2dev.flags & PS2_FLAG_CMD))		if  (ps2_handle_response(&atkbd->ps2dev, data))			goto out;	if (!atkbd->enabled)		goto out;	input_event(&atkbd->dev, EV_MSC, MSC_RAW, code);	if (atkbd->translated) {		if (atkbd->emul ||		    !(code == ATKBD_RET_EMUL0 || code == ATKBD_RET_EMUL1 ||		      code == ATKBD_RET_HANGUEL || code == ATKBD_RET_HANJA ||		     (code == ATKBD_RET_ERR && !atkbd->err_xl) ||	             (code == ATKBD_RET_BAT && !atkbd->bat_xl))) {			atkbd->release = code >> 7;			code &= 0x7f;		}		if (!atkbd->emul) {		     if ((code & 0x7f) == (ATKBD_RET_BAT & 0x7f))			atkbd->bat_xl = !atkbd->release;		     if ((code & 0x7f) == (ATKBD_RET_ERR & 0x7f))			atkbd->err_xl = !atkbd->release;		}	}	switch (code) {		case ATKBD_RET_BAT:			atkbd->enabled = 0;			serio_rescan(atkbd->ps2dev.serio);			goto out;		case ATKBD_RET_EMUL0:			atkbd->emul = 1;			goto out;		case ATKBD_RET_EMUL1:			atkbd->emul = 2;			goto out;		case ATKBD_RET_RELEASE:			atkbd->release = 1;			goto out;		case ATKBD_RET_HANGUEL:			atkbd_report_key(&atkbd->dev, regs, KEY_HANGUEL, 3);			goto out;		case ATKBD_RET_HANJA:			atkbd_report_key(&atkbd->dev, regs, KEY_HANJA, 3);			goto out;		case ATKBD_RET_ERR:			printk(KERN_DEBUG "atkbd.c: Keyboard on %s reports too many keys pressed.\n", serio->phys);			goto out;	}	if (atkbd->set != 3)		code = (code & 0x7f) | ((code & 0x80) << 1);	if (atkbd->emul) {		if (--atkbd->emul)			goto out;		code |= (atkbd->set != 3) ? 0x80 : 0x100;	}	if (atkbd->keycode[code] != ATKBD_KEY_NULL)		input_event(&atkbd->dev, EV_MSC, MSC_SCAN, code);	switch (atkbd->keycode[code]) {		case ATKBD_KEY_NULL:			break;		case ATKBD_KEY_UNKNOWN:			if (data == ATKBD_RET_ACK || data == ATKBD_RET_NAK) {				printk(KERN_WARNING "atkbd.c: Spurious %s on %s. Some program, "				       "like XFree86, might be trying access hardware directly.\n",				       data == ATKBD_RET_ACK ? "ACK" : "NAK", serio->phys);			} else {				printk(KERN_WARNING "atkbd.c: Unknown key %s "				       "(%s set %d, code %#x on %s).\n",				       atkbd->release ? "released" : "pressed",				       atkbd->translated ? "translated" : "raw",				       atkbd->set, code, serio->phys);				printk(KERN_WARNING "atkbd.c: Use 'setkeycodes %s%02x <keycode>' "				       "to make it known.\n",				       code & 0x80 ? "e0" : "", code & 0x7f);			}			input_sync(&atkbd->dev);			break;		case ATKBD_SCR_1:			scroll = 1 - atkbd->release * 2;			break;		case ATKBD_SCR_2:			scroll = 2 - atkbd->release * 4;			break;		case ATKBD_SCR_4:			scroll = 4 - atkbd->release * 8;			break;		case ATKBD_SCR_8:			scroll = 8 - atkbd->release * 16;			break;		case ATKBD_SCR_CLICK:			click = !atkbd->release;			break;		case ATKBD_SCR_LEFT:			hscroll = -1;			break;		case ATKBD_SCR_RIGHT:			hscroll = 1;			break;		default:			value = atkbd->release ? 0 :				(1 + (!atkbd->softrepeat && test_bit(atkbd->keycode[code], atkbd->dev.key)));			switch (value) {	/* Workaround Toshiba laptop multiple keypress */				case 0:					atkbd->last = 0;					break;				case 1:					atkbd->last = code;					atkbd->time = jiffies + msecs_to_jiffies(atkbd->dev.rep[REP_DELAY]) / 2;					break;				case 2:					if (!time_after(jiffies, atkbd->time) && atkbd->last == code)						value = 1;					break;			}			atkbd_report_key(&atkbd->dev, regs, atkbd->keycode[code], value);	}	if (atkbd->scroll) {		input_regs(&atkbd->dev, regs);		if (click != -1)			input_report_key(&atkbd->dev, BTN_MIDDLE, click);		input_report_rel(&atkbd->dev, REL_WHEEL, scroll);		input_report_rel(&atkbd->dev, REL_HWHEEL, hscroll);		input_sync(&atkbd->dev);	}	atkbd->release = 0;out:	return IRQ_HANDLED;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/3c42f0c3dde8feb59fc87df45cadb847d5511c0a/atkbd.c/clean/drivers/input/keyboard/atkbd.c