spaceorb
struct spaceorb* spaceorb = serio_get_drvdata(serio);
if (spaceorb->idx) spaceorb_process_packet(spaceorb);
spaceorb->idx = 0;
if (spaceorb->idx < SPACEORB_MAX_LENGTH)
spaceorb->data[spaceorb->idx++] = data & 0x7f;
struct spaceorb* spaceorb = serio_get_drvdata(serio);
input_unregister_device(spaceorb->dev);
kfree(spaceorb);
struct spaceorb *spaceorb;
spaceorb = kzalloc_obj(*spaceorb);
if (!spaceorb || !input_dev)
spaceorb->dev = input_dev;
snprintf(spaceorb->phys, sizeof(spaceorb->phys), "%s/input0", serio->phys);
input_dev->phys = spaceorb->phys;
serio_set_drvdata(serio, spaceorb);
err = input_register_device(spaceorb->dev);
kfree(spaceorb);
static void spaceorb_process_packet(struct spaceorb *spaceorb)
struct input_dev *dev = spaceorb->dev;
unsigned char *data = spaceorb->data;
if (spaceorb->idx < 2) return;
for (i = 0; i < spaceorb->idx; i++) c ^= data[i];
spaceorb->data[spaceorb->idx - 1] = 0;
for (i = 1; i < spaceorb->idx && spaceorb->data[i] == ' '; i++);
dev->name, spaceorb->data + i, spaceorb->phys);
if (spaceorb->idx != 12) return;
for (i = 0; i < 9; i++) spaceorb->data[i+2] ^= spaceorb_xor[i];
if (spaceorb->idx != 5) return;
if (spaceorb->idx != 4) return;