aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/hid.h
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2013-02-25 05:31:44 -0500
committerJiri Kosina <jkosina@suse.cz>2013-02-25 07:26:39 -0500
commit3373443befa73ee60e4275e7699b26058b01455a (patch)
tree15d45696ffb58d756266a6a6134b1cb25a38f457 /include/linux/hid.h
parente90a6df80dc45ab53d2f4f4db297434e48c0208e (diff)
HID: Extend the interface with wait io request
Some drivers need to wait for an io from the underlying device, creating an unwanted dependency on the underlying transport layer. This patch adds wait() to the interface, thereby removing usbhid from the lion share of the drivers. Signed-off-by: Henrik Rydberg <rydberg@euromail.se> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'include/linux/hid.h')
-rw-r--r--include/linux/hid.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 261c713d4842..7071eb3d36c7 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -663,6 +663,7 @@ struct hid_driver {
663 * @parse: this method is called only once to parse the device data, 663 * @parse: this method is called only once to parse the device data,
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 */ 667 */
667struct hid_ll_driver { 668struct hid_ll_driver {
668 int (*start)(struct hid_device *hdev); 669 int (*start)(struct hid_device *hdev);
@@ -681,6 +682,8 @@ struct hid_ll_driver {
681 void (*request)(struct hid_device *hdev, 682 void (*request)(struct hid_device *hdev,
682 struct hid_report *report, int reqtype); 683 struct hid_report *report, int reqtype);
683 684
685 int (*wait)(struct hid_device *hdev);
686
684}; 687};
685 688
686#define PM_HINT_FULLON 1<<5 689#define PM_HINT_FULLON 1<<5
@@ -903,6 +906,17 @@ static inline void hid_hw_request(struct hid_device *hdev,
903 hdev->ll_driver->request(hdev, report, reqtype); 906 hdev->ll_driver->request(hdev, report, reqtype);
904} 907}
905 908
909/**
910 * hid_hw_wait - wait for buffered io to complete
911 *
912 * @hdev: hid device
913 */
914static inline void hid_hw_wait(struct hid_device *hdev)
915{
916 if (hdev->ll_driver->wait)
917 hdev->ll_driver->wait(hdev);
918}
919
906int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size, 920int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
907 int interrupt); 921 int interrupt);
908 922