Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 378a0ede authored by Oliver Neukum's avatar Oliver Neukum Committed by Jiri Kosina
Browse files

HID: fix USB HID devices after STD with autosuspend



This patch fixes a bug caused by reset_resume not changing the internal
status flags for a device that is resumed via reset_resume. To do so the
reset handlers, which correctly assume that a device is awake, can no longer
do all the work of reset_resume handling.

Signed-off-by: default avatarOliver Neukum <oneukum@suse.de>
Tested-by: default avatarLaurent Riffard <laurent.riffard@free.fr>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 0f6f1407
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -1330,6 +1330,15 @@ static int hid_post_reset(struct usb_interface *intf)
	return 0;
}

static int hid_reset_resume(struct usb_interface *intf)
{
	struct hid_device *hid = usb_get_intfdata(intf);
	struct usbhid_device *usbhid = hid->driver_data;

	clear_bit(HID_REPORTED_IDLE, &usbhid->iofl);
	return hid_post_reset(intf);
}

int usbhid_get_power(struct hid_device *hid)
{
	struct usbhid_device *usbhid = hid->driver_data;
@@ -1359,7 +1368,7 @@ static struct usb_driver hid_driver = {
#ifdef CONFIG_PM
	.suspend =	hid_suspend,
	.resume =	hid_resume,
	.reset_resume =	hid_post_reset,
	.reset_resume =	hid_reset_resume,
#endif
	.pre_reset =	hid_pre_reset,
	.post_reset =	hid_post_reset,