linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Tissoires <benjamin.tissoires@gmail.com>
To: Benjamin Tissoires <benjamin.tissoires@gmail.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Henrik Rydberg <rydberg@euromail.se>,
	Jiri Kosina <jkosina@suse.cz>, Stephane Chatty <chatty@enac.fr>,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 2/7] HID: Extend the interface with wait io request
Date: Fri,  8 Feb 2013 15:37:31 +0100	[thread overview]
Message-ID: <1360334256-22127-3-git-send-email-benjamin.tissoires@gmail.com> (raw)
In-Reply-To: <1360334256-22127-1-git-send-email-benjamin.tissoires@gmail.com>

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: Benjamin Tissoires <benjamin.tissoires@gmail.com>
---
 drivers/hid/usbhid/hid-core.c |  1 +
 include/linux/hid.h           | 14 ++++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 366fd09..99d95d3 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 = {
 	.power = usbhid_power,
 	.hidinput_input_event = usb_hidinput_input_event,
 	.request = usbhid_request,
+	.wait = usbhid_wait_io,
 };
 
 static 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 261c713..7071eb3 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -663,6 +663,7 @@ struct hid_driver {
  * @parse: this method is called only once to parse the device data,
  *	   shouldn't allocate anything to not leak memory
  * @request: send report request to device (e.g. feature report)
+ * @wait: wait for buffered io to complete (send/recv reports)
  */
 struct hid_ll_driver {
 	int (*start)(struct hid_device *hdev);
@@ -681,6 +682,8 @@ struct hid_ll_driver {
 	void (*request)(struct hid_device *hdev,
 			struct hid_report *report, int reqtype);
 
+	int (*wait)(struct hid_device *hdev);
+
 };
 
 #define	PM_HINT_FULLON	1<<5
@@ -903,6 +906,17 @@ static inline void hid_hw_request(struct hid_device *hdev,
 		hdev->ll_driver->request(hdev, report, reqtype);
 }
 
+/**
+ * hid_hw_wait - wait for buffered io to complete
+ *
+ * @hdev: hid device
+ */
+static inline void hid_hw_wait(struct hid_device *hdev)
+{
+	if (hdev->ll_driver->wait)
+		hdev->ll_driver->wait(hdev);
+}
+
 int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
 		int interrupt);
 
-- 
1.8.1


  parent reply	other threads:[~2013-02-08 14:38 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-08 14:37 [PATCH 0/7] hid driver transport cleanup Benjamin Tissoires
2013-02-08 14:37 ` [PATCH 1/7] HID: Extend the interface with report requests Benjamin Tissoires
2013-02-15 19:46   ` Henrik Rydberg
2013-02-08 14:37 ` Benjamin Tissoires [this message]
2013-02-15 20:47   ` [PATCH 2/7] HID: Extend the interface with wait io request Henrik Rydberg
2013-02-08 14:37 ` [PATCH 3/7] HID: Kconfig: Remove explicit transport layer dependencies Benjamin Tissoires
2013-02-20 20:06   ` Henrik Rydberg
2013-02-25 10:15     ` Benjamin Tissoires
2013-02-08 14:37 ` [PATCH 4/7] hid: use hid_hw_request() instead of direct call to usbhid Benjamin Tissoires
2013-02-20 20:16   ` Henrik Rydberg
2013-02-08 14:37 ` [PATCH 5/7] HID: use hid_hw_wait() " Benjamin Tissoires
2013-02-20 20:18   ` Henrik Rydberg
2013-02-08 14:37 ` [PATCH 6/7] HID: multitouch: remove usbhid dependency Benjamin Tissoires
2013-02-20 20:25   ` Henrik Rydberg
2013-02-25 10:18     ` Benjamin Tissoires
2013-02-08 14:37 ` [PATCH 7/7] HID: multitouch: Copyright and note on regression tests Benjamin Tissoires
2013-02-20 20:26   ` Henrik Rydberg
2013-02-11 10:13 ` [PATCH 0/7] hid driver transport cleanup Mika Westerberg
2013-02-11 11:19   ` Benjamin Tissoires
2013-02-11 11:29     ` Mika Westerberg
2013-02-18  9:13 ` Jiri Kosina
2013-02-18 20:49   ` Henrik Rydberg
2013-02-20 20:31 ` Henrik Rydberg
2013-02-25 10:20   ` Benjamin Tissoires

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1360334256-22127-3-git-send-email-benjamin.tissoires@gmail.com \
    --to=benjamin.tissoires@gmail.com \
    --cc=chatty@enac.fr \
    --cc=dmitry.torokhov@gmail.com \
    --cc=jkosina@suse.cz \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rydberg@euromail.se \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).