Skip to content

Commit

Permalink
HID: minimal autosuspend support for USB HID devices
Browse files Browse the repository at this point in the history
Autosuspend for USB HID devices remains problematic as far as mice
and keyboards are concerned. While I am working on a grand solution,
here's a minimalist patch that works for those devices not continously
in use.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Oliver Neukum authored and Jiri Kosina committed Oct 14, 2007
1 parent 1fe8736 commit 933e318
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions drivers/hid/usbhid/hid-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -512,7 +512,16 @@ static int hid_get_class_descriptor(struct usb_device *dev, int ifnum,

int usbhid_open(struct hid_device *hid)
{
++hid->open;
struct usbhid_device *usbhid = hid->driver_data;
int res;

if (!hid->open++) {
res = usb_autopm_get_interface(usbhid->intf);
if (res < 0) {
hid->open--;
return -EIO;
}
}
if (hid_start_in(hid))
hid_io_error(hid);
return 0;
Expand All @@ -522,8 +531,10 @@ void usbhid_close(struct hid_device *hid)
{
struct usbhid_device *usbhid = hid->driver_data;

if (!--hid->open)
if (!--hid->open) {
usb_kill_urb(usbhid->urbin);
usb_autopm_put_interface(usbhid->intf);
}
}

/*
Expand Down Expand Up @@ -1048,6 +1059,7 @@ static struct usb_driver hid_driver = {
.pre_reset = hid_pre_reset,
.post_reset = hid_post_reset,
.id_table = hid_usb_ids,
.supports_autosuspend = 1,
};

static int __init hid_init(void)
Expand Down

0 comments on commit 933e318

Please sign in to comment.