On Tue, Mar 26, 2013 at 07:49:07PM +0200, Felipe Balbi wrote:
> Hi,
> 
> On Tue, Mar 26, 2013 at 05:58:42PM +0100, Michael Grzeschik wrote:
> > The implementation is derived from the fsl_udc_core code in
> > fsl_ep_enable and makes basic iso handling possible.
> > 
> > Signed-off-by: Michael Grzeschik <m.grzesc...@pengutronix.de>
> > Signed-off-by: Marc Kleine-Budde <m...@pengutronix.de>
> > ---
> > Changes since v4:
> >  - rebased on the new alignment patch
> >  - changed indention to tabs
> >  - removed spare brakets
> >  - added special handling for iso in ep_queue and ep_halt
> >  - changed TODO list entry in core.c
> > Changes since v3:
> >  - added QH_ISO_TRANS macro
> >  - removed unused operations mentioned by Peter
> > Changes since v2:
> >  - fixed usage of variable max
> >  - reworked on writel/readl patches
> > Changes since v1:
> >  - fixed coding style issues mentioned by Sergei
> > 
> >  drivers/usb/chipidea/core.c |  2 +-
> >  drivers/usb/chipidea/udc.c  | 15 ++++++++++++---
> >  drivers/usb/chipidea/udc.h  |  1 +
> >  3 files changed, 14 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> > index 47b8da2..82de38b 100644
> > --- a/drivers/usb/chipidea/core.c
> > +++ b/drivers/usb/chipidea/core.c
> > @@ -43,7 +43,7 @@
> >   *
> >   * TODO List
> >   * - OTG
> > - * - Isochronous & Interrupt Traffic
> > + * - Interrupt Traffic
> >   * - Handle requests which spawns into several TDs
> >   * - GET_STATUS(device) - always reports 0
> >   * - Gadget API (majority of optional features)
> > diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> > index 567ce89..cab349b 100644
> > --- a/drivers/usb/chipidea/udc.c
> > +++ b/drivers/usb/chipidea/udc.c
> > @@ -1010,6 +1010,8 @@ static int ep_enable(struct usb_ep *ep,
> >     unsigned long flags;
> >     u32 val = 0;
> >  
> > +   unsigned short max;
> > +
> >     if (ep == NULL || desc == NULL)
> >             return -EINVAL;
> >  
> > @@ -1026,19 +1028,19 @@ static int ep_enable(struct usb_ep *ep,
> >     mEp->num  = usb_endpoint_num(desc);
> >     mEp->type = usb_endpoint_type(desc);
> >  
> > -   mEp->ep.maxpacket = usb_endpoint_maxp(desc);
> > +   max = mEp->ep.maxpacket = usb_endpoint_maxp(desc);
> >  
> >     trace_ci_ep_enable(mEp, 0);
> >  
> >     if (mEp->type == USB_ENDPOINT_XFER_CONTROL)
> >             val |= QH_IOS;
> >     else if (mEp->type == USB_ENDPOINT_XFER_ISOC)
> > -           val &= ~QH_MULT;
> > +           val |= QH_ISO_TRANS(max) << __ffs(QH_MULT);
> >  
> >     if (mEp->num)
> >             val |= QH_ZLT;
> >  
> > -   val |= (mEp->ep.maxpacket << __ffs(QH_MAX_PKT)) & QH_MAX_PKT;
> > +   val |= (max << __ffs(QH_MAX_PKT)) & QH_MAX_PKT;
> >     mEp->qh.ptr->cap = val;
> >  
> >     mEp->qh.ptr->td.next |= TD_TERMINATE;   /* needed? */
> > @@ -1182,6 +1184,10 @@ static int ep_queue(struct usb_ep *ep, struct 
> > usb_request *req,
> >             }
> >     }
> >  
> > +   if (usb_endpoint_xfer_isoc(mEp->ep.desc)
> > +       && mReq->req.length > mEp->ep.maxpacket)
> > +           return -EMSGSIZE;
> 
> this HW really can't handle requests greater max packet size for
> isochronous ?
> 
> please clarify what you're doing here and, possibly, add a comment.
> 
> Other than that:
> 
> Reviewed-by: Felipe Balbi <ba...@ti.com>
> 
> -- 
> balbi



-- 

Best Regards,
Peter Chen

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to