gunze
gunze = kzalloc_obj(*gunze);
if (!gunze || !input_dev) {
gunze->serio = serio;
gunze->dev = input_dev;
scnprintf(gunze->phys, sizeof(serio->phys), "%s/input0", serio->phys);
input_dev->phys = gunze->phys;
serio_set_drvdata(serio, gunze);
err = input_register_device(gunze->dev);
kfree(gunze);
static void gunze_process_packet(struct gunze *gunze)
struct input_dev *dev = gunze->dev;
if (gunze->idx != GUNZE_MAX_LENGTH || gunze->data[5] != ',' ||
(gunze->data[0] != 'T' && gunze->data[0] != 'R')) {
printk(KERN_WARNING "gunze.c: bad packet: >%.*s<\n", GUNZE_MAX_LENGTH, gunze->data);
input_report_abs(dev, ABS_X, simple_strtoul(gunze->data + 1, NULL, 10));
input_report_abs(dev, ABS_Y, 1024 - simple_strtoul(gunze->data + 6, NULL, 10));
input_report_key(dev, BTN_TOUCH, gunze->data[0] == 'T');
struct gunze *gunze = serio_get_drvdata(serio);
gunze_process_packet(gunze);
gunze->idx = 0;
if (gunze->idx < GUNZE_MAX_LENGTH)
gunze->data[gunze->idx++] = data;
struct gunze *gunze = serio_get_drvdata(serio);
input_get_device(gunze->dev);
input_unregister_device(gunze->dev);
input_put_device(gunze->dev);
kfree(gunze);
struct gunze *gunze;