29 #include <linux/errno.h>
30 #include <linux/kernel.h>
31 #include <linux/module.h>
32 #include <linux/slab.h>
33 #include <linux/input.h>
34 #include <linux/serio.h>
37 #define DRIVER_DESC "Gunze AHL-51S touchscreen driver"
47 #define GUNZE_MAX_LENGTH 10
54 struct input_dev *
dev;
61 static void gunze_process_packet(
struct gunze*
gunze)
63 struct input_dev *
dev = gunze->
dev;
66 (gunze->
data[0] !=
'T' && gunze->
data[0] !=
'R')) {
80 struct gunze* gunze = serio_get_drvdata(serio);
83 gunze_process_packet(gunze);
96 static void gunze_disconnect(
struct serio *serio)
98 struct gunze *gunze = serio_get_drvdata(serio);
100 input_get_device(gunze->
dev);
101 input_unregister_device(gunze->
dev);
103 serio_set_drvdata(serio,
NULL);
104 input_put_device(gunze->
dev);
114 static int gunze_connect(
struct serio *serio,
struct serio_driver *drv)
117 struct input_dev *input_dev;
120 gunze = kzalloc(
sizeof(
struct gunze),
GFP_KERNEL);
121 input_dev = input_allocate_device();
122 if (!gunze || !input_dev) {
127 gunze->
serio = serio;
128 gunze->
dev = input_dev;
131 input_dev->name =
"Gunze AHL-51S TouchScreen";
132 input_dev->phys = gunze->
phys;
135 input_dev->id.product = 0x0051;
136 input_dev->id.version = 0x0100;
137 input_dev->dev.parent = &serio->
dev;
140 input_set_abs_params(input_dev,
ABS_X, 24, 1000, 0, 0);
141 input_set_abs_params(input_dev,
ABS_Y, 24, 1000, 0, 0);
143 serio_set_drvdata(serio, gunze);
149 err = input_register_device(gunze->
dev);
156 fail2: serio_set_drvdata(serio,
NULL);
157 fail1: input_free_device(input_dev);
183 .id_table = gunze_serio_ids,
184 .interrupt = gunze_interrupt,
185 .connect = gunze_connect,
186 .disconnect = gunze_disconnect,