HID: uhid: implement SET_REPORT
authorDavid Herrmann <dh.herrmann@gmail.com>
Tue, 29 Jul 2014 15:14:24 +0000 (17:14 +0200)
committerJiri Kosina <jkosina@suse.cz>
Mon, 25 Aug 2014 08:28:08 +0000 (03:28 -0500)
commit11c221553080408b203a00b91ad5f647dfb218d1
treeba4aa924ec09d7775ba887fbdaeaee45cff191b0
parent7c4003bc367d5ff1cbce579a883f17698a9a6da2
HID: uhid: implement SET_REPORT

We so far lacked support for hid_hw_raw_request(..., HID_REQ_SET_REPORT);
Add support for it and simply forward the request to user-space. Note that
SET_REPORT is synchronous, just like GET_REPORT, even though it does not
provide any data back besides an error code.

If a transport layer does SET_REPORT asynchronously, they can just ACK it
immediately by writing an uhid_set_report_reply to uhid.

This patch re-uses the synchronous uhid-report infrastructure to query
user-space. Note that this means you cannot run SET_REPORT and GET_REPORT
in parallel. However, that has always been a restriction of HID and due to
its blocking nature, this is just fine. Maybe some future transport layer
supports parallel requests (very unlikely), however, until then lets not
over-complicate things and avoid request-lookup-tables.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/uhid.c
include/uapi/linux/uhid.h