Input: wacom - properly enable runtime PM
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Sun, 10 Oct 2010 21:24:16 +0000 (14:24 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 18 Oct 2010 04:20:46 +0000 (21:20 -0700)
We need to always call usb_autopm_put_interface() in wacom_open(),
not only when initialization fails, otherwise the device will be
marked as PM-busy and will never be put in suspended state.

Based on patch by Oliver Neukum.

Acked-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/tablet/wacom_sys.c

index 02de653..fc38149 100644 (file)
@@ -120,14 +120,16 @@ static int wacom_open(struct input_dev *dev)
 
 out:
        mutex_unlock(&wacom->lock);
-       if (retval)
-               usb_autopm_put_interface(wacom->intf);
+       usb_autopm_put_interface(wacom->intf);
        return retval;
 }
 
 static void wacom_close(struct input_dev *dev)
 {
        struct wacom *wacom = input_get_drvdata(dev);
+       int autopm_error;
+
+       autopm_error = usb_autopm_get_interface(wacom->intf);
 
        mutex_lock(&wacom->lock);
        usb_kill_urb(wacom->irq);
@@ -135,7 +137,8 @@ static void wacom_close(struct input_dev *dev)
        wacom->intf->needs_remote_wakeup = 0;
        mutex_unlock(&wacom->lock);
 
-       usb_autopm_put_interface(wacom->intf);
+       if (!autopm_error)
+               usb_autopm_put_interface(wacom->intf);
 }
 
 static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc,