HID: make .raw_request mandatory
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>
This commit is contained in:
parent
2ebaebcf31
commit
3c86726cfe
@ -283,7 +283,8 @@ The available HID callbacks are:
|
||||
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
|
||||
|
@ -1330,9 +1330,6 @@ void __hid_request(struct hid_device *hid, struct hid_report *report,
|
||||
int ret;
|
||||
int len;
|
||||
|
||||
if (!hid->ll_driver->raw_request)
|
||||
return;
|
||||
|
||||
buf = hid_alloc_report_buf(report, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return;
|
||||
@ -2471,6 +2468,14 @@ int hid_add_device(struct hid_device *hdev)
|
||||
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.
|
||||
|
@ -1266,9 +1266,7 @@ static struct hid_input *hidinput_allocate(struct hid_device *hid)
|
||||
}
|
||||
|
||||
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;
|
||||
|
@ -992,11 +992,8 @@ static inline int hid_hw_raw_request(struct hid_device *hdev,
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user