aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hid/usbhid/hid-core.c1
-rw-r--r--include/linux/hid.h14
2 files changed, 15 insertions, 0 deletions
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 366fd09d257d..99d95d3368b5 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -1264,6 +1264,7 @@ static struct hid_ll_driver usb_hid_driver = {
1264 .power = usbhid_power, 1264 .power = usbhid_power,
1265 .hidinput_input_event = usb_hidinput_input_event, 1265 .hidinput_input_event = usb_hidinput_input_event,
1266 .request = usbhid_request, 1266 .request = usbhid_request,
1267 .wait = usbhid_wait_io,
1267}; 1268};
1268 1269
1269static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id) 1270static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id)
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