Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c86726c authored by Benjamin Tissoires's avatar Benjamin Tissoires Committed by Jiri Kosina
Browse files

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: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Reviewed-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 2ebaebcf
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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
+8 −3
Original line number Diff line number Diff line
@@ -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.
+1 −3
Original line number Diff line number Diff line
@@ -1266,8 +1266,6 @@ 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->open = hidinput_open;
	input_dev->close = hidinput_close;
+1 −4
Original line number Diff line number Diff line
@@ -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,
						    rtype, reqtype);

	return -ENOSYS;
}

/**