aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/usbhid
diff options
context:
space:
mode:
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>2013-02-27 10:38:17 -0500
committerJiri Kosina <jkosina@suse.cz>2013-03-07 09:58:17 -0500
commit9684819b5a29e62acd8265a92d8f3454de9bb71e (patch)
tree8b2da81d84a83ffe794f404cc547e6e8f5c7beef /drivers/hid/usbhid
parent777d4bb39a585ff54817815544941c2da70a0bb9 (diff)
HID: ll_driver: Extend the interface with idle requests
Some drivers send the idle command directly to underlying device, creating an unwanted dependency on the underlying transport layer. This patch adds hid_hw_idle() to the interface, thereby removing usbhid from the lion share of the drivers. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Reviewed-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid/usbhid')
-rw-r--r--drivers/hid/usbhid/hid-core.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 420466bc481a..effcd3d6f5cf 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -1253,6 +1253,20 @@ static void usbhid_request(struct hid_device *hid, struct hid_report *rep, int r
1253 } 1253 }
1254} 1254}
1255 1255
1256static int usbhid_idle(struct hid_device *hid, int report, int idle,
1257 int reqtype)
1258{
1259 struct usb_device *dev = hid_to_usb_dev(hid);
1260 struct usb_interface *intf = to_usb_interface(hid->dev.parent);
1261 struct usb_host_interface *interface = intf->cur_altsetting;
1262 int ifnum = interface->desc.bInterfaceNumber;
1263
1264 if (reqtype != HID_REQ_SET_IDLE)
1265 return -EINVAL;
1266
1267 return hid_set_idle(dev, ifnum, report, idle);
1268}
1269
1256static struct hid_ll_driver usb_hid_driver = { 1270static struct hid_ll_driver usb_hid_driver = {
1257 .parse = usbhid_parse, 1271 .parse = usbhid_parse,
1258 .start = usbhid_start, 1272 .start = usbhid_start,
@@ -1263,6 +1277,7 @@ static struct hid_ll_driver usb_hid_driver = {
1263 .hidinput_input_event = usb_hidinput_input_event, 1277 .hidinput_input_event = usb_hidinput_input_event,
1264 .request = usbhid_request, 1278 .request = usbhid_request,
1265 .wait = usbhid_wait_io, 1279 .wait = usbhid_wait_io,
1280 .idle = usbhid_idle,
1266}; 1281};
1267 1282
1268static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id) 1283static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id)