Input: wacom_w8001 - implement open and close
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 24 Aug 2011 05:57:00 +0000 (22:57 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 24 Aug 2011 06:07:47 +0000 (23:07 -0700)
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.

Acked-by: Chris Bagwell <chris@cnpbagwell.com>
Tested-by: Ping Cheng <pingc@wacom.com>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/touchscreen/wacom_w8001.c

index c14412ef4648ba45bd78d81a7367ca670fc444f2..5ece6c1f329699290b27b0521850659e6b127655 100644 (file)
@@ -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;