#define ATKBD_CMD_ENABLE 0x00f4
#define ATKBD_CMD_RESET_DIS 0x00f5
#define ATKBD_CMD_SETALL_MB 0x00f8
+#define ATKBD_CMD_RESEND 0x00fe
#define ATKBD_CMD_EX_ENABLE 0x10ea
#define ATKBD_CMD_EX_SETLEDS 0x20eb
int code = data;
#ifdef ATKBD_DEBUG
- printk(KERN_DEBUG "atkbd.c: Received %02x\n", data);
+ printk(KERN_DEBUG "atkbd.c: Received %02x flags %02x\n", data, flags);
#endif
+ /* Interface error. Request that the keyboard resend. */
+ if (flags & (SERIO_FRAME | SERIO_PARITY)) {
+ printk("atkbd.c: frame/parity error: %02x\n", flags);
+ serio_write(serio, ATKBD_CMD_RESEND);
+ return;
+ }
+
switch (code) {
case ATKBD_RET_ACK:
atkbd->ack = 1;
MODULE_DESCRIPTION("Serio abstraction core");
MODULE_LICENSE("GPL");
+EXPORT_SYMBOL(serio_interrupt);
EXPORT_SYMBOL(serio_register_port);
EXPORT_SYMBOL(serio_unregister_port);
EXPORT_SYMBOL(serio_register_device);
serio->dev->write_wakeup(serio);
}
+/*
+ * bit masks for use in "interrupt" flags (3rd argument)
+ */
#define SERIO_TIMEOUT 1
#define SERIO_PARITY 2
+#define SERIO_FRAME 4
#define SERIO_TYPE 0xff000000UL
#define SERIO_XT 0x00000000UL