I don't have one of these to test but anyways: Acked-by: Chris Bagwell <chris@xxxxxxxxxxxxxx> I've been trying to slowing document the protocols for ISDV4 and USB Wacom devices (http://sourceforge.net/apps/mediawiki/linuxwacom/index.php?title=ISDV4_Protocol for these ISDV4 ones if your interested). During this, I was comparing this version against the user land version of this driver inside xf86-input-wacom. xf86-input-wacom was doing a version of this patch so good to see here. The only other difference remaining is it also discards any data on the line during startup to flush old data from after initial STOP command and so that its sure of command/response sequence. I do not know the serio well enough to know if it discards old data. Even if it does not, the driver would handle old motion events OK and the tiniest possibility an old touch query response on line when it sends initial pen query. Chris On Sun, Aug 21, 2011 at 3:15 PM, Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> wrote: > Implement open() and close() methods for the input device so that we > do not start the device unless there are users listening to the events. > > Signed-off-by: Dmitry Torokhov <dtor@xxxxxxx> > --- > drivers/input/touchscreen/wacom_w8001.c | 21 ++++++++++++++++++++- > 1 files changed, 20 insertions(+), 1 deletions(-) > > diff --git a/drivers/input/touchscreen/wacom_w8001.c b/drivers/input/touchscreen/wacom_w8001.c > index c14412e..5ece6c1 100644 > --- a/drivers/input/touchscreen/wacom_w8001.c > +++ b/drivers/input/touchscreen/wacom_w8001.c > @@ -367,6 +367,20 @@ static int w8001_command(struct w8001 *w8001, unsigned char command, > return rc; > } > > +static int w8001_open(struct input_dev *dev) > +{ > + struct w8001 *w8001 = input_get_drvdata(dev); > + > + return w8001_command(w8001, W8001_CMD_START, false); > +} > + > +static void w8001_close(struct input_dev *dev) > +{ > + struct w8001 *w8001 = input_get_drvdata(dev); > + > + w8001_command(w8001, W8001_CMD_STOP, false); > +} > + > static int w8001_setup(struct w8001 *w8001) > { > struct input_dev *dev = w8001->dev; > @@ -474,7 +488,7 @@ static int w8001_setup(struct w8001 *w8001) > > strlcat(w8001->name, " Touchscreen", sizeof(w8001->name)); > > - return w8001_command(w8001, W8001_CMD_START, false); > + return 0; > } > > /* > @@ -534,6 +548,11 @@ static int w8001_connect(struct serio *serio, struct serio_driver *drv) > input_dev->id.version = 0x0100; > input_dev->dev.parent = &serio->dev; > > + input_dev->open = w8001_open; > + input_dev->close = w8001_close; > + > + input_set_drvdata(input_dev, w8001); > + > err = input_register_device(w8001->dev); > if (err) > goto fail3; > -- > 1.7.6 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-input" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html