SET_REPORT and GET_REPORT are mandatory in the HID specification.
Make the corresponding API in hid-core mandatory too, which removes the
need to test against it in some various places.
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Reviewed-by: David Herrmann <dh.herrmann@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
int reqtype)
Same as ->request() but provides the report as raw buffer. This request shall
be synchronous. A transport driver must not use ->wait() to complete such
- requests.
+ requests. This request is mandatory and hid core will reject the device if
+ it is missing.
- int (*output_report) (struct hid_device *hdev, __u8 *buf, size_t len)
Send raw output report via intr channel. Used by some HID device drivers
int ret;
int len;
- if (!hid->ll_driver->raw_request)
- return;
-
buf = hid_alloc_report_buf(report, GFP_KERNEL);
if (!buf)
return;
if (hid_ignore(hdev))
return -ENODEV;
+ /*
+ * Check for the mandatory transport channel.
+ */
+ if (!hdev->ll_driver->raw_request) {
+ hid_err(hdev, "transport driver missing .raw_request()\n");
+ return -EINVAL;
+ }
+
/*
* Read the device report descriptor once and use as template
* for the driver-specific modifications.
}
input_set_drvdata(input_dev, hid);
- if (hid->ll_driver->request || hid->ll_driver->output_report ||
- hid->ll_driver->raw_request)
- input_dev->event = hidinput_input_event;
+ input_dev->event = hidinput_input_event;
input_dev->open = hidinput_open;
input_dev->close = hidinput_close;
input_dev->setkeycode = hidinput_setkeycode;
if (len < 1 || len > HID_MAX_BUFFER_SIZE || !buf)
return -EINVAL;
- if (hdev->ll_driver->raw_request)
- return hdev->ll_driver->raw_request(hdev, reportnum, buf, len,
+ return hdev->ll_driver->raw_request(hdev, reportnum, buf, len,
rtype, reqtype);
-
- return -ENOSYS;
}
/**