stinger
struct stinger *stinger = serio_get_drvdata(serio);
input_unregister_device(stinger->dev);
kfree(stinger);
struct stinger *stinger;
stinger = kmalloc_obj(*stinger);
if (!stinger || !input_dev)
stinger->dev = input_dev;
snprintf(stinger->phys, sizeof(stinger->phys), "%s/serio0", serio->phys);
input_dev->phys = stinger->phys;
serio_set_drvdata(serio, stinger);
err = input_register_device(stinger->dev);
kfree(stinger);
static void stinger_process_packet(struct stinger *stinger)
struct input_dev *dev = stinger->dev;
unsigned char *data = stinger->data;
if (!stinger->idx) return;
struct stinger *stinger = serio_get_drvdata(serio);
if (stinger->idx < STINGER_MAX_LENGTH)
stinger->data[stinger->idx++] = data;
if (stinger->idx == 4) {
stinger_process_packet(stinger);
stinger->idx = 0;