spaceball
if (spaceball->idx != 3) return;
spaceball->data[spaceball->idx - 1] = 0;
printk(KERN_ERR "spaceball: Device error. [%s]\n", spaceball->data + 1);
spaceball->data[spaceball->idx - 1] = 0;
printk(KERN_ERR "spaceball: Bad command. [%s]\n", spaceball->data + 1);
struct spaceball *spaceball = serio_get_drvdata(serio);
spaceball_process_packet(spaceball);
spaceball->idx = 0;
spaceball->escape = 0;
if (!spaceball->escape) {
spaceball->escape = 1;
spaceball->escape = 0;
if (spaceball->escape) {
spaceball->escape = 0;
if (spaceball->escape)
spaceball->escape = 0;
if (spaceball->idx < SPACEBALL_MAX_LENGTH)
spaceball->data[spaceball->idx++] = data;
struct spaceball* spaceball = serio_get_drvdata(serio);
input_unregister_device(spaceball->dev);
kfree(spaceball);
struct spaceball *spaceball;
spaceball = kmalloc_obj(*spaceball);
if (!spaceball || !input_dev)
spaceball->dev = input_dev;
snprintf(spaceball->phys, sizeof(spaceball->phys), "%s/input0", serio->phys);
input_dev->phys = spaceball->phys;
serio_set_drvdata(serio, spaceball);
err = input_register_device(spaceball->dev);
kfree(spaceball);
static void spaceball_process_packet(struct spaceball* spaceball)
struct input_dev *dev = spaceball->dev;
unsigned char *data = spaceball->data;
if (spaceball->idx < 2) return;
switch (spaceball->data[0]) {
if (spaceball->idx != 15) return;
if (spaceball->idx != 3) return;