Re: [PATCH v5 06/12] usb: chipidea: udc: configure iso endpoints

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.grzeschik@xxxxxxxxxxxxxx>
> Signed-off-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx>
> ---
> 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 <balbi@xxxxxx>

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux