Loading drivers/hid/usbhid/hid-core.c +11 −53 Original line number Diff line number Diff line Loading @@ -915,19 +915,14 @@ static int usbhid_set_raw_report(struct hid_device *hid, unsigned int reportnum, return ret; } static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t count, unsigned char report_type) static int usbhid_output_report(struct hid_device *hid, __u8 *buf, size_t count) { struct usbhid_device *usbhid = hid->driver_data; struct usb_device *dev = hid_to_usb_dev(hid); struct usb_interface *intf = usbhid->intf; struct usb_host_interface *interface = intf->cur_altsetting; int ret; int actual_length, skipped_report_id = 0, ret; if (usbhid->urbout && report_type != HID_FEATURE_REPORT) { int actual_length; int skipped_report_id = 0; if (!usbhid->urbout) return -EIO; if (buf[0] == 0x0) { /* Don't send the Report ID */ Loading @@ -935,6 +930,7 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co count--; skipped_report_id = 1; } ret = usb_interrupt_msg(dev, usbhid->urbout->pipe, buf, count, &actual_length, USB_CTRL_SET_TIMEOUT); Loading @@ -945,57 +941,19 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co if (skipped_report_id) ret++; } } else { int skipped_report_id = 0; int report_id = buf[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), HID_REQ_SET_REPORT, USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, ((report_type + 1) << 8) | report_id, interface->desc.bInterfaceNumber, buf, count, USB_CTRL_SET_TIMEOUT); /* count also the report id, if this was a numbered report. */ if (ret > 0 && skipped_report_id) ret++; } return ret; } static int usbhid_output_report(struct hid_device *hid, __u8 *buf, size_t count) static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t count, unsigned char report_type) { struct usbhid_device *usbhid = hid->driver_data; struct usb_device *dev = hid_to_usb_dev(hid); int actual_length, skipped_report_id = 0, ret; if (!usbhid->urbout) return -EIO; if (buf[0] == 0x0) { /* Don't send the Report ID */ buf++; count--; skipped_report_id = 1; } ret = usb_interrupt_msg(dev, usbhid->urbout->pipe, buf, count, &actual_length, USB_CTRL_SET_TIMEOUT); /* return the number of bytes transferred */ if (ret == 0) { ret = actual_length; /* count also the report id */ if (skipped_report_id) ret++; } if (usbhid->urbout && report_type != HID_FEATURE_REPORT) return usbhid_output_report(hid, buf, count); return ret; return usbhid_set_raw_report(hid, buf[0], buf, count, report_type); } static void usbhid_restart_queues(struct usbhid_device *usbhid) Loading Loading
drivers/hid/usbhid/hid-core.c +11 −53 Original line number Diff line number Diff line Loading @@ -915,19 +915,14 @@ static int usbhid_set_raw_report(struct hid_device *hid, unsigned int reportnum, return ret; } static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t count, unsigned char report_type) static int usbhid_output_report(struct hid_device *hid, __u8 *buf, size_t count) { struct usbhid_device *usbhid = hid->driver_data; struct usb_device *dev = hid_to_usb_dev(hid); struct usb_interface *intf = usbhid->intf; struct usb_host_interface *interface = intf->cur_altsetting; int ret; int actual_length, skipped_report_id = 0, ret; if (usbhid->urbout && report_type != HID_FEATURE_REPORT) { int actual_length; int skipped_report_id = 0; if (!usbhid->urbout) return -EIO; if (buf[0] == 0x0) { /* Don't send the Report ID */ Loading @@ -935,6 +930,7 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co count--; skipped_report_id = 1; } ret = usb_interrupt_msg(dev, usbhid->urbout->pipe, buf, count, &actual_length, USB_CTRL_SET_TIMEOUT); Loading @@ -945,57 +941,19 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co if (skipped_report_id) ret++; } } else { int skipped_report_id = 0; int report_id = buf[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), HID_REQ_SET_REPORT, USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, ((report_type + 1) << 8) | report_id, interface->desc.bInterfaceNumber, buf, count, USB_CTRL_SET_TIMEOUT); /* count also the report id, if this was a numbered report. */ if (ret > 0 && skipped_report_id) ret++; } return ret; } static int usbhid_output_report(struct hid_device *hid, __u8 *buf, size_t count) static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t count, unsigned char report_type) { struct usbhid_device *usbhid = hid->driver_data; struct usb_device *dev = hid_to_usb_dev(hid); int actual_length, skipped_report_id = 0, ret; if (!usbhid->urbout) return -EIO; if (buf[0] == 0x0) { /* Don't send the Report ID */ buf++; count--; skipped_report_id = 1; } ret = usb_interrupt_msg(dev, usbhid->urbout->pipe, buf, count, &actual_length, USB_CTRL_SET_TIMEOUT); /* return the number of bytes transferred */ if (ret == 0) { ret = actual_length; /* count also the report id */ if (skipped_report_id) ret++; } if (usbhid->urbout && report_type != HID_FEATURE_REPORT) return usbhid_output_report(hid, buf, count); return ret; return usbhid_set_raw_report(hid, buf[0], buf, count, report_type); } static void usbhid_restart_queues(struct usbhid_device *usbhid) Loading