You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
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: Oliver Neukum <oneukum@suse.de> Tested-by: Laurent Riffard <laurent.riffard@free.fr> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
committed by
Jiri Kosina
parent
0f6f1407e3
commit
378a0ede12
@@ -1330,6 +1330,15 @@ static int hid_post_reset(struct usb_interface *intf)
|
|||||||
return 0;
|
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)
|
int usbhid_get_power(struct hid_device *hid)
|
||||||
{
|
{
|
||||||
struct usbhid_device *usbhid = hid->driver_data;
|
struct usbhid_device *usbhid = hid->driver_data;
|
||||||
@@ -1359,7 +1368,7 @@ static struct usb_driver hid_driver = {
|
|||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
.suspend = hid_suspend,
|
.suspend = hid_suspend,
|
||||||
.resume = hid_resume,
|
.resume = hid_resume,
|
||||||
.reset_resume = hid_post_reset,
|
.reset_resume = hid_reset_resume,
|
||||||
#endif
|
#endif
|
||||||
.pre_reset = hid_pre_reset,
|
.pre_reset = hid_pre_reset,
|
||||||
.post_reset = hid_post_reset,
|
.post_reset = hid_post_reset,
|
||||||
|
|||||||
Reference in New Issue
Block a user