Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: wacom - properly enable runtime PM

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>

+6 -3
+6 -3
drivers/input/tablet/wacom_sys.c
··· 120 120 121 121 out: 122 122 mutex_unlock(&wacom->lock); 123 - if (retval) 124 - usb_autopm_put_interface(wacom->intf); 123 + usb_autopm_put_interface(wacom->intf); 125 124 return retval; 126 125 } 127 126 128 127 static void wacom_close(struct input_dev *dev) 129 128 { 130 129 struct wacom *wacom = input_get_drvdata(dev); 130 + int autopm_error; 131 + 132 + autopm_error = usb_autopm_get_interface(wacom->intf); 131 133 132 134 mutex_lock(&wacom->lock); 133 135 usb_kill_urb(wacom->irq); ··· 137 135 wacom->intf->needs_remote_wakeup = 0; 138 136 mutex_unlock(&wacom->lock); 139 137 140 - usb_autopm_put_interface(wacom->intf); 138 + if (!autopm_error) 139 + usb_autopm_put_interface(wacom->intf); 141 140 } 142 141 143 142 static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc,