linux-input.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 1/7] HID: Extend the interface with report requests
Date: Fri,  8 Feb 2013 15:37:30 +0100	[thread overview]
Message-ID: <1360334256-22127-2-git-send-email-benjamin.tissoires@gmail.com> (raw)
In-Reply-To: <1360334256-22127-1-git-send-email-benjamin.tissoires@gmail.com>

Some drivers send reports directly to underlying device, creating an
unwanted dependency on the underlying transport layer. This patch adds
hid_hw_request() 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 | 13 +++++++++++++
 include/linux/hid.h           | 20 ++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 8e0c4bf94..366fd09 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -1243,6 +1243,18 @@ static int usbhid_power(struct hid_device *hid, int lvl)
 	return r;
 }
 
+static void usbhid_request(struct hid_device *hid, struct hid_report *rep, int reqtype)
+{
+	switch (reqtype) {
+	case HID_REQ_GET_REPORT:
+		usbhid_submit_report(hid, rep, USB_DIR_IN);
+		break;
+	case HID_REQ_SET_REPORT:
+		usbhid_submit_report(hid, rep, USB_DIR_OUT);
+		break;
+	}
+}
+
 static struct hid_ll_driver usb_hid_driver = {
 	.parse = usbhid_parse,
 	.start = usbhid_start,
@@ -1251,6 +1263,7 @@ static struct hid_ll_driver usb_hid_driver = {
 	.close = usbhid_close,
 	.power = usbhid_power,
 	.hidinput_input_event = usb_hidinput_input_event,
+	.request = usbhid_request,
 };
 
 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 e14b465..261c713 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -662,6 +662,7 @@ struct hid_driver {
  * @hidinput_input_event: event input event (e.g. ff or leds)
  * @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)
  */
 struct hid_ll_driver {
 	int (*start)(struct hid_device *hdev);
@@ -676,6 +677,10 @@ struct hid_ll_driver {
 			unsigned int code, int value);
 
 	int (*parse)(struct hid_device *hdev);
+
+	void (*request)(struct hid_device *hdev,
+			struct hid_report *report, int reqtype);
+
 };
 
 #define	PM_HINT_FULLON	1<<5
@@ -883,6 +888,21 @@ static inline int hid_hw_power(struct hid_device *hdev, int level)
 	return hdev->ll_driver->power ? hdev->ll_driver->power(hdev, level) : 0;
 }
 
+
+/**
+ * hid_hw_request - send report request to device
+ *
+ * @hdev: hid device
+ * @report: report to send
+ * @reqtype: hid request type
+ */
+static inline void hid_hw_request(struct hid_device *hdev,
+				  struct hid_report *report, int reqtype)
+{
+	if (hdev->ll_driver->request)
+		hdev->ll_driver->request(hdev, report, reqtype);
+}
+
 int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
 		int interrupt);
 
-- 
1.8.1


  reply	other threads:[~2013-02-08 14:45 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 ` Benjamin Tissoires [this message]
2013-02-15 19:46   ` [PATCH 1/7] HID: Extend the interface with report requests Henrik Rydberg
2013-02-08 14:37 ` [PATCH 2/7] HID: Extend the interface with wait io request Benjamin Tissoires
2013-02-15 20:47   ` 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-2-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).