Patchwork USB: fsl_udc_core: Use (&) instead of (==) to compare ISO XFER

login
register
mail settings
Submitter Peter Chen
Date Nov. 22, 2011, 1:15 a.m.
Message ID <1321924521-3218-1-git-send-email-peter.chen@freescale.com>
Download mbox | patch
Permalink /patch/126989/
State Superseded
Delegated to: Kumar Gala
Headers show

Comments

Peter Chen - Nov. 22, 2011, 1:15 a.m.
Some ISO gadgets, like audio, has SYNC attribute as well as
USB_ENDPOINT_XFER_ISOC for their bmAttributes at ISO endpoint
descriptor. So, it needs to use & instead of == to judge if
it is ISO XFER.

Signed-off-by: Peter Chen <peter.chen@freescale.com>
---
 drivers/usb/gadget/fsl_udc_core.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
Michal Nazarewicz - Nov. 22, 2011, 1:22 a.m.
On Tue, 22 Nov 2011 02:15:21 +0100, Peter Chen <peter.chen@freescale.com> wrote:

> Some ISO gadgets, like audio, has SYNC attribute as well as
> USB_ENDPOINT_XFER_ISOC for their bmAttributes at ISO endpoint
> descriptor. So, it needs to use & instead of == to judge if
> it is ISO XFER.
>
> Signed-off-by: Peter Chen <peter.chen@freescale.com>
> ---
>  drivers/usb/gadget/fsl_udc_core.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
> index d786ba3..bf40de3 100644
> --- a/drivers/usb/gadget/fsl_udc_core.c
> +++ b/drivers/usb/gadget/fsl_udc_core.c
> @@ -877,7 +877,7 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
>  		VDBG("%s, bad ep", __func__);
>  		return -EINVAL;
>  	}
> -	if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
> +	if (ep->desc->bmAttributes & USB_ENDPOINT_XFER_ISOC) {

What you really meant is:

(ep->desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_ISOC

It would probably be useful to create a function that performs that check rather
than having to type all of that every time.

>  		if (req->req.length > ep->ep.maxpacket)
>  			return -EMSGSIZE;
>  	}
> @@ -1032,7 +1032,7 @@ static int fsl_ep_set_halt(struct usb_ep *_ep, int value)
>  		goto out;
>  	}
>-	if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
> +	if (ep->desc->bmAttributes & USB_ENDPOINT_XFER_ISOC) {
>  		status = -EOPNOTSUPP;
>  		goto out;
>  	}
Michal Nazarewicz - Nov. 22, 2011, 1:26 a.m.
> On Tue, 22 Nov 2011 02:15:21 +0100, Peter Chen <peter.chen@freescale.com> wrote:
>> @@ -877,7 +877,7 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
>>  		VDBG("%s, bad ep", __func__);
>>  		return -EINVAL;
>>  	}
>> -	if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
>> +	if (ep->desc->bmAttributes & USB_ENDPOINT_XFER_ISOC) {

On Tue, 22 Nov 2011 02:22:10 +0100, Michal Nazarewicz <mina86@mina86.com> wrote:
> What you really meant is:
>
> (ep->desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_ISOC
>
> It would probably be useful to create a function that performs that check rather
> than having to type all of that every time.

Ah, there it is:

usb_endpoint_xfer_isoc(ep)

:)

>
>>  		if (req->req.length > ep->ep.maxpacket)
>>  			return -EMSGSIZE;
>>  	}
Felipe Balbi - Nov. 24, 2011, 9:37 a.m.
On Tue, Nov 22, 2011 at 02:26:24AM +0100, Michal Nazarewicz wrote:
> >On Tue, 22 Nov 2011 02:15:21 +0100, Peter Chen <peter.chen@freescale.com> wrote:
> >>@@ -877,7 +877,7 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
> >> 		VDBG("%s, bad ep", __func__);
> >> 		return -EINVAL;
> >> 	}
> >>-	if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
> >>+	if (ep->desc->bmAttributes & USB_ENDPOINT_XFER_ISOC) {
> 
> On Tue, 22 Nov 2011 02:22:10 +0100, Michal Nazarewicz <mina86@mina86.com> wrote:
> >What you really meant is:
> >
> >(ep->desc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_ISOC
> >
> >It would probably be useful to create a function that performs that check rather
> >than having to type all of that every time.
> 
> Ah, there it is:
> 
> usb_endpoint_xfer_isoc(ep)

yeah, please use the helpers.

Patch

diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
index d786ba3..bf40de3 100644
--- a/drivers/usb/gadget/fsl_udc_core.c
+++ b/drivers/usb/gadget/fsl_udc_core.c
@@ -877,7 +877,7 @@  fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
 		VDBG("%s, bad ep", __func__);
 		return -EINVAL;
 	}
-	if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
+	if (ep->desc->bmAttributes & USB_ENDPOINT_XFER_ISOC) {
 		if (req->req.length > ep->ep.maxpacket)
 			return -EMSGSIZE;
 	}
@@ -1032,7 +1032,7 @@  static int fsl_ep_set_halt(struct usb_ep *_ep, int value)
 		goto out;
 	}
 
-	if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
+	if (ep->desc->bmAttributes & USB_ENDPOINT_XFER_ISOC) {
 		status = -EOPNOTSUPP;
 		goto out;
 	}