aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/hid.h
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 /include/linux/hid.h
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 'include/linux/hid.h')
-rw-r--r--include/linux/hid.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 7071eb3d36c7..863744c38ddc 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -664,6 +664,7 @@ struct hid_driver {
664 * shouldn't allocate anything to not leak memory 664 * shouldn't allocate anything to not leak memory
665 * @request: send report request to device (e.g. feature report) 665 * @request: send report request to device (e.g. feature report)
666 * @wait: wait for buffered io to complete (send/recv reports) 666 * @wait: wait for buffered io to complete (send/recv reports)
667 * @idle: send idle request to device
667 */ 668 */
668struct hid_ll_driver { 669struct hid_ll_driver {
669 int (*start)(struct hid_device *hdev); 670 int (*start)(struct hid_device *hdev);
@@ -683,6 +684,7 @@ struct hid_ll_driver {
683 struct hid_report *report, int reqtype); 684 struct hid_report *report, int reqtype);
684 685
685 int (*wait)(struct hid_device *hdev); 686 int (*wait)(struct hid_device *hdev);
687 int (*idle)(struct hid_device *hdev, int report, int idle, int reqtype);
686 688
687}; 689};
688 690
@@ -907,6 +909,23 @@ static inline void hid_hw_request(struct hid_device *hdev,
907} 909}
908 910
909/** 911/**
912 * hid_hw_idle - send idle request to device
913 *
914 * @hdev: hid device
915 * @report: report to control
916 * @idle: idle state
917 * @reqtype: hid request type
918 */
919static inline int hid_hw_idle(struct hid_device *hdev, int report, int idle,
920 int reqtype)
921{
922 if (hdev->ll_driver->idle)
923 return hdev->ll_driver->idle(hdev, report, idle, reqtype);
924
925 return 0;
926}
927
928/**
910 * hid_hw_wait - wait for buffered io to complete 929 * hid_hw_wait - wait for buffered io to complete
911 * 930 *
912 * @hdev: hid device 931 * @hdev: hid device