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
next prev parent 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).