diff options
| -rw-r--r-- | drivers/hid/usbhid/hid-core.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 1ebd3244eb85..b729c0286679 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c | |||
| @@ -827,14 +827,21 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co | |||
| 827 | ret++; | 827 | ret++; |
| 828 | } | 828 | } |
| 829 | } else { | 829 | } else { |
| 830 | int skipped_report_id = 0; | ||
| 831 | if (buf[0] == 0x0) { | ||
| 832 | /* Don't send the Report ID */ | ||
| 833 | buf++; | ||
| 834 | count--; | ||
| 835 | skipped_report_id = 1; | ||
| 836 | } | ||
| 830 | ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), | 837 | ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), |
| 831 | HID_REQ_SET_REPORT, | 838 | HID_REQ_SET_REPORT, |
| 832 | USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, | 839 | USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, |
| 833 | ((report_type + 1) << 8) | *buf, | 840 | ((report_type + 1) << 8) | *buf, |
| 834 | interface->desc.bInterfaceNumber, buf + 1, count - 1, | 841 | interface->desc.bInterfaceNumber, buf, count, |
| 835 | USB_CTRL_SET_TIMEOUT); | 842 | USB_CTRL_SET_TIMEOUT); |
| 836 | /* count also the report id */ | 843 | /* count also the report id, if this was a numbered report. */ |
| 837 | if (ret > 0) | 844 | if (ret > 0 && skipped_report_id) |
| 838 | ret++; | 845 | ret++; |
| 839 | } | 846 | } |
| 840 | 847 | ||
