kbd = (struct hil_kbd *)serio->private;
kbd = serio_get_drvdata(serio);
static irqreturn_t hil_kbd_interrupt(struct serio *serio, 	      unsigned char data, unsigned int flags, struct pt_regs *regs){	struct hil_kbd *kbd;	hil_packet packet;	int idx;	kbd = (struct hil_kbd *)serio->private;	if (kbd == NULL) {		BUG();		return IRQ_HANDLED;	}	if (kbd->idx4 >= (HIL_KBD_MAX_LENGTH * sizeof(hil_packet))) {		hil_kbd_process_err(kbd);		return IRQ_HANDLED;	}	idx = kbd->idx4/4;	if (!(kbd->idx4 % 4)) kbd->data[idx] = 0;	packet = kbd->data[idx];	packet |= ((hil_packet)data) << ((3 - (kbd->idx4 % 4)) * 8);	kbd->data[idx] = packet;	/* Records of N 4-byte hil_packets must terminate with a command. */	if ((++(kbd->idx4)) % 4) return IRQ_HANDLED;	if ((packet & 0xffff0000) != HIL_ERR_INT) {		hil_kbd_process_err(kbd);		return IRQ_HANDLED;	}	if (packet & HIL_PKT_CMD) hil_kbd_process_record(kbd);	return IRQ_HANDLED;}