|
@@ -203,6 +203,21 @@ unlock:
|
|
|
return ret ? ret : len;
|
|
|
}
|
|
|
|
|
|
+static int uhid_hid_raw_request(struct hid_device *hid, unsigned char reportnum,
|
|
|
+ __u8 *buf, size_t len, unsigned char rtype,
|
|
|
+ int reqtype)
|
|
|
+{
|
|
|
+ switch (reqtype) {
|
|
|
+ case HID_REQ_GET_REPORT:
|
|
|
+ return uhid_hid_get_report(hid, reportnum, buf, len, rtype);
|
|
|
+ case HID_REQ_SET_REPORT:
|
|
|
+ /* TODO: implement proper SET_REPORT functionality */
|
|
|
+ return -ENOSYS;
|
|
|
+ default:
|
|
|
+ return -EIO;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int uhid_hid_output_raw(struct hid_device *hid, __u8 *buf, size_t count,
|
|
|
unsigned char report_type)
|
|
|
{
|
|
@@ -247,29 +262,14 @@ static int uhid_hid_output_report(struct hid_device *hid, __u8 *buf,
|
|
|
return uhid_hid_output_raw(hid, buf, count, HID_OUTPUT_REPORT);
|
|
|
}
|
|
|
|
|
|
-static int uhid_raw_request(struct hid_device *hid, unsigned char reportnum,
|
|
|
- __u8 *buf, size_t len, unsigned char rtype,
|
|
|
- int reqtype)
|
|
|
-{
|
|
|
- switch (reqtype) {
|
|
|
- case HID_REQ_GET_REPORT:
|
|
|
- return uhid_hid_get_report(hid, reportnum, buf, len, rtype);
|
|
|
- case HID_REQ_SET_REPORT:
|
|
|
- /* TODO: implement proper SET_REPORT functionality */
|
|
|
- return -ENOSYS;
|
|
|
- default:
|
|
|
- return -EIO;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
static struct hid_ll_driver uhid_hid_driver = {
|
|
|
.start = uhid_hid_start,
|
|
|
.stop = uhid_hid_stop,
|
|
|
.open = uhid_hid_open,
|
|
|
.close = uhid_hid_close,
|
|
|
.parse = uhid_hid_parse,
|
|
|
+ .raw_request = uhid_hid_raw_request,
|
|
|
.output_report = uhid_hid_output_report,
|
|
|
- .raw_request = uhid_raw_request,
|
|
|
};
|
|
|
|
|
|
#ifdef CONFIG_COMPAT
|