HID: autosuspend support for USB HID
authorOliver Neukum <oliver@neukum.org>
Wed, 17 Dec 2008 14:38:03 +0000 (15:38 +0100)
committerJiri Kosina <jkosina@suse.cz>
Wed, 25 Mar 2009 16:57:57 +0000 (17:57 +0100)
commit0361a28d3f9a4315a100c7b37ba0b55cfe15fe07
tree2aa33c5325118e68ce8691a009c5fb30ffdea68c
parent8e0ee43bc2c3e19db56a4adaa9a9b04ce885cd84
HID: autosuspend support for USB HID

This uses the USB busy mechanism for aggessive autosuspend of USB
HID devices. It autosuspends all opened devices supporting remote wakeup
after a timeout unless

- output is being done to the device
- a key is being held down (remote wakeup isn't triggered upon key release)
- LED(s) are lit
- hiddev is opened

As in the current driver closed devices will be autosuspended even if they
don't support remote wakeup.

The patch is quite large because output to devices is done in hard interrupt
context meaning a lot a queuing and locking had to be touched. The LED stuff
has been solved by means of a simple counter. Additions to the generic HID code
could be avoided. In addition it now covers hidraw. It contains an embryonic
version of an API to let the generic HID code tell the lower levels which
capabilities with respect to power management are needed.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c
drivers/hid/hidraw.c
drivers/hid/usbhid/hid-core.c
drivers/hid/usbhid/hiddev.c
drivers/hid/usbhid/usbhid.h
include/linux/hid.h