20 #include <linux/errno.h>
21 #include <linux/kernel.h>
22 #include <linux/module.h>
23 #include <linux/slab.h>
24 #include <linux/input.h>
25 #include <linux/serio.h>
28 #define DRIVER_DESC "iNexio serial touchscreen driver"
38 #define INEXIO_FORMAT_TOUCH_BIT 0x01
39 #define INEXIO_FORMAT_LENGTH 5
40 #define INEXIO_RESPONSE_BEGIN_BYTE 0x80
43 #define INEXIO_MAX_LENGTH 16
45 #define INEXIO_MIN_XC 0
46 #define INEXIO_MAX_XC 0x3fff
47 #define INEXIO_MIN_YC 0
48 #define INEXIO_MAX_YC 0x3fff
50 #define INEXIO_GET_XC(data) (((data[1])<<7) | data[2])
51 #define INEXIO_GET_YC(data) (((data[3])<<7) | data[4])
52 #define INEXIO_GET_TOUCHED(data) (INEXIO_FORMAT_TOUCH_BIT & data[0])
59 struct input_dev *
dev;
66 static void inexio_process_data(
struct inexio *pinexio)
68 struct input_dev *
dev = pinexio->
dev;
83 struct inexio* pinexio = serio_get_drvdata(serio);
88 inexio_process_data(pinexio);
90 printk(
KERN_DEBUG "inexio.c: unknown/unsynchronized data from device, byte %x\n",pinexio->
data[0]);
99 static void inexio_disconnect(
struct serio *serio)
101 struct inexio* pinexio = serio_get_drvdata(serio);
103 input_get_device(pinexio->
dev);
104 input_unregister_device(pinexio->
dev);
106 serio_set_drvdata(serio,
NULL);
107 input_put_device(pinexio->
dev);
117 static int inexio_connect(
struct serio *serio,
struct serio_driver *drv)
120 struct input_dev *input_dev;
124 input_dev = input_allocate_device();
125 if (!pinexio || !input_dev) {
130 pinexio->
serio = serio;
131 pinexio->
dev = input_dev;
134 input_dev->name =
"iNexio Serial TouchScreen";
135 input_dev->phys = pinexio->
phys;
138 input_dev->id.product = 0;
139 input_dev->id.version = 0x0001;
140 input_dev->dev.parent = &serio->
dev;
146 serio_set_drvdata(serio, pinexio);
152 err = input_register_device(pinexio->
dev);
159 fail2: serio_set_drvdata(serio,
NULL);
160 fail1: input_free_device(input_dev);
186 .id_table = inexio_serio_ids,
187 .interrupt = inexio_interrupt,
188 .connect = inexio_connect,
189 .disconnect = inexio_disconnect,