linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/1] HID: Send Report ID when numbered reports are sent over the control endpoint.
       [not found] <alpine.LNX.2.00.1006301126130.13809@pobox.suse.cz>
@ 2010-06-30 13:50 ` Alan Ott
  2010-06-30 13:50 ` [PATCH 1/1] " Alan Ott
  1 sibling, 0 replies; 3+ messages in thread
From: Alan Ott @ 2010-06-30 13:50 UTC (permalink / raw)
  To: Jiri Kosina, Alan Stern, Greg Kroah-Hartman, Alan Ott,
	Marcel Holtmann, Antonio Ospite, Amit Nagal, linux-usb,
	linux-input, linux-kernel
  Cc: Alan Ott

This patch relies on:
  [PATCH 1/1] hidraw: Use Interrupt Endpoint for OUT Transfers if Available

Alan Ott (1):
  HID: Send Report ID when numbered reports are sent over the control
    endpoint.

 drivers/hid/usbhid/hid-core.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)



^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 1/1] HID: Send Report ID when numbered reports are sent over the control endpoint.
       [not found] <alpine.LNX.2.00.1006301126130.13809@pobox.suse.cz>
  2010-06-30 13:50 ` [PATCH 0/1] HID: Send Report ID when numbered reports are sent over the control endpoint Alan Ott
@ 2010-06-30 13:50 ` Alan Ott
  2010-07-11 21:14   ` Jiri Kosina
  1 sibling, 1 reply; 3+ messages in thread
From: Alan Ott @ 2010-06-30 13:50 UTC (permalink / raw)
  To: Jiri Kosina, Alan Stern, Greg Kroah-Hartman, Alan Ott,
	Marcel Holtmann, Antonio Ospite, Amit Nagal, linux-usb,
	linux-input, linux-kernel
  Cc: Alan Ott

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>
---
 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 deef816..1697687 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -854,14 +854,21 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co
 				ret++;
 		}
 	} 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),
 			HID_REQ_SET_REPORT,
 			USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
 			((report_type + 1) << 8) | *buf,
-			interface->desc.bInterfaceNumber, buf + 1, count - 1,
+			interface->desc.bInterfaceNumber, buf, count,
 			USB_CTRL_SET_TIMEOUT);
-		/* count also the report id */
-		if (ret > 0)
+		/* count also the report id, if this was a numbered report. */
+		if (ret > 0 && skipped_report_id)
 			ret++;
 	}
 
-- 
1.7.0.4



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/1] HID: Send Report ID when numbered reports are sent over the control endpoint.
  2010-06-30 13:50 ` [PATCH 1/1] " Alan Ott
@ 2010-07-11 21:14   ` Jiri Kosina
  0 siblings, 0 replies; 3+ messages in thread
From: Jiri Kosina @ 2010-07-11 21:14 UTC (permalink / raw)
  To: Alan Ott
  Cc: Alan Stern, Greg Kroah-Hartman, Marcel Holtmann, Antonio Ospite,
	Amit Nagal, linux-usb, linux-input, linux-kernel

On Wed, 30 Jun 2010, Alan Ott wrote:

> 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.

We already have a8ab5d58b0238b8199cc699b8dff7c5e1da24138 commit in Linus' 
tree, so I'll take this for .35 still, thanks a lot for fixing it Alan.

> 
> Signed-off-by: Alan Ott <alan@signal11.us>
> ---
>  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 deef816..1697687 100644
> --- a/drivers/hid/usbhid/hid-core.c
> +++ b/drivers/hid/usbhid/hid-core.c
> @@ -854,14 +854,21 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co
>  				ret++;
>  		}
>  	} 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),
>  			HID_REQ_SET_REPORT,
>  			USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
>  			((report_type + 1) << 8) | *buf,
> -			interface->desc.bInterfaceNumber, buf + 1, count - 1,
> +			interface->desc.bInterfaceNumber, buf, count,
>  			USB_CTRL_SET_TIMEOUT);
> -		/* count also the report id */
> -		if (ret > 0)
> +		/* count also the report id, if this was a numbered report. */
> +		if (ret > 0 && skipped_report_id)
>  			ret++;
>  	}

-- 
Jiri Kosina
SUSE Labs, Novell Inc.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-07-11 21:14 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <alpine.LNX.2.00.1006301126130.13809@pobox.suse.cz>
2010-06-30 13:50 ` [PATCH 0/1] HID: Send Report ID when numbered reports are sent over the control endpoint Alan Ott
2010-06-30 13:50 ` [PATCH 1/1] " Alan Ott
2010-07-11 21:14   ` Jiri Kosina

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).