forked from Minki/linux
HID: Send Report ID when numbered reports are sent over the control endpoint.
The Report ID wasn't sent as part of the payload for reports which were sent over the control endpoint. This is required by section 8.1 of the HID spec. Signed-off-by: Alan Ott <alan@signal11.us> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
1f45e3249c
commit
29129a98e6
@ -827,14 +827,21 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co
|
|||||||
ret++;
|
ret++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
int skipped_report_id = 0;
|
||||||
|
if (buf[0] == 0x0) {
|
||||||
|
/* Don't send the Report ID */
|
||||||
|
buf++;
|
||||||
|
count--;
|
||||||
|
skipped_report_id = 1;
|
||||||
|
}
|
||||||
ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
|
||||||
HID_REQ_SET_REPORT,
|
HID_REQ_SET_REPORT,
|
||||||
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
|
||||||
((report_type + 1) << 8) | *buf,
|
((report_type + 1) << 8) | *buf,
|
||||||
interface->desc.bInterfaceNumber, buf + 1, count - 1,
|
interface->desc.bInterfaceNumber, buf, count,
|
||||||
USB_CTRL_SET_TIMEOUT);
|
USB_CTRL_SET_TIMEOUT);
|
||||||
/* count also the report id */
|
/* count also the report id, if this was a numbered report. */
|
||||||
if (ret > 0)
|
if (ret > 0 && skipped_report_id)
|
||||||
ret++;
|
ret++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user