Message ID | 1321924521-3218-1-git-send-email-peter.chen@freescale.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Kumar Gala |
Headers | show |
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; > }
> 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; >> }
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.
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; }
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(-)