From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Jiri Kosina <jikos@kernel.org>
Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>,
Guenter Roeck <groeck@chromium.org>,
Benson Leung <bleung@chromium.org>,
linux-usb@vger.kernel.org, linux-input@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: [PATCH] HID: usbhid: get/put around clearing needs_remote_wakeup
Date: Fri, 8 Sep 2017 10:43:37 -0700 [thread overview]
Message-ID: <20170908174337.GA13616@dtor-ws> (raw)
From: Benson Leung <bleung@chromium.org>
usbhid->intf->needs_remote_wakeup is set when a device is opened, and is
cleared when a device is closed.
In usbhid_open, usb_autopm_get_interface is called before setting the
needs_remote_wakeup flag, and usb_autopm_put_interface is called after
hid_start_in. However, when the device is closed in usbhid_close, we
simply reset the flag and the device stays awake even though it could be
suspended.
This patch adds calls to usb_autopm_get_interface and
usb_autopm_put_interface when we reset usbhid->intf->needs_remote_wakeup
flag, giving the system chance to put the device to sleep.
Signed-off-by: Benson Leung <bleung@chromium.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/hid/usbhid/hid-core.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 089bad8a9a21..174d87f0e3e6 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -729,6 +729,7 @@ static int usbhid_open(struct hid_device *hid)
static void usbhid_close(struct hid_device *hid)
{
struct usbhid_device *usbhid = hid->driver_data;
+ int autopm_error;
/*
* Make sure we don't restart data acquisition due to
@@ -745,8 +746,14 @@ static void usbhid_close(struct hid_device *hid)
return;
hid_cancel_delayed_stuff(usbhid);
+
+ autopm_error = usb_autopm_get_interface(usbhid->intf);
+
usb_kill_urb(usbhid->urbin);
usbhid->intf->needs_remote_wakeup = 0;
+
+ if (!autopm_error)
+ usb_autopm_put_interface(usbhid->intf);
}
/*
@@ -1176,13 +1183,18 @@ static int usbhid_start(struct hid_device *hid)
static void usbhid_stop(struct hid_device *hid)
{
struct usbhid_device *usbhid = hid->driver_data;
+ int autopm_error;
if (WARN_ON(!usbhid))
return;
if (hid->quirks & HID_QUIRK_ALWAYS_POLL) {
clear_bit(HID_IN_POLLING, &usbhid->iofl);
+
+ autopm_error = usb_autopm_get_interface(usbhid->intf);
usbhid->intf->needs_remote_wakeup = 0;
+ if (!autopm_error)
+ usb_autopm_put_interface(usbhid->intf);
}
clear_bit(HID_STARTED, &usbhid->iofl);
--
2.14.1.581.gf28d330327-goog
--
Dmitry
next reply other threads:[~2017-09-08 17:43 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-08 17:43 Dmitry Torokhov [this message]
2017-09-09 7:35 ` [PATCH] HID: usbhid: get/put around clearing needs_remote_wakeup Oliver Neukum
[not found] ` <1504942552.10395.2.camel-IBi9RG/b67k@public.gmane.org>
2017-09-11 20:02 ` Benson Leung
2017-09-11 20:02 ` Benson Leung
2017-09-11 23:29 ` Benson Leung
2017-09-20 1:39 ` Dmitry Torokhov
-- strict thread matches above, loose matches on Subject: below --
2014-11-13 20:16 Benson Leung
2014-11-13 20:41 ` Alan Stern
2014-11-13 20:41 ` Alan Stern
2014-11-13 20:44 ` Benson Leung
[not found] ` <CANLzEksGg0KyWOS+WYv_U8GzSJ4C_H0LTpdXvz8Ae-8mH6K41w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-13 21:18 ` Alan Stern
2014-11-13 21:18 ` Alan Stern
2014-11-13 21:41 ` Benson Leung
2014-11-13 22:11 ` Alan Stern
2014-11-13 22:11 ` Alan Stern
2014-11-13 22:15 ` Benson Leung
[not found] ` <CANLzEksHgo_tQiwJoUtXd0iV7tDXq0ieNrAXgtXwPtxxPBWrgw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-14 15:17 ` Alan Stern
2014-11-14 15:17 ` Alan Stern
2014-11-22 0:44 ` Benson Leung
2014-11-22 15:55 ` Alan Stern
2014-11-22 15:55 ` Alan Stern
2014-11-22 16:02 ` Alan Stern
2014-11-22 16:02 ` Alan Stern
2014-11-25 1:29 ` Benson Leung
2014-11-25 15:24 ` Alan Stern
2014-11-25 15:24 ` Alan Stern
2014-11-25 15:29 ` Benson Leung
2014-11-14 9:08 ` Oliver Neukum
2014-11-22 1:00 ` Benson Leung
2014-11-24 9:13 ` Oliver Neukum
[not found] ` <1416820395.19925.4.camel-AfvqVibwNMkMNNZnWhT/Jw@public.gmane.org>
2014-11-25 0:56 ` Benson Leung
2014-11-25 0:56 ` Benson Leung
2014-11-25 9:53 ` Oliver Neukum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170908174337.GA13616@dtor-ws \
--to=dmitry.torokhov@gmail.com \
--cc=benjamin.tissoires@redhat.com \
--cc=bleung@chromium.org \
--cc=groeck@chromium.org \
--cc=jikos@kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.