On Thu, May 03, 2012 at 07:05:05PM +0530, Pratyush Anand wrote: > If transfer not ready is received before ep_queue is called for control > out transfer then pending flag is set. Handling of this case was not > correct. > TRB size must be multiple of maxpacket for all control out transfer. > dma sync function should also be called before start transfer. > > A routine to delegate transfer for control data has been extracted out > from dwc3_ep0_do_control_data. Same routine has been called from > ep_queue too in case of pending flag is set. > > Signed-off-by: Pratyush Anand <pratyush.anand@xxxxxx> > Signed-off-by: Felipe Balbi <balbi@xxxxxx> > --- > drivers/usb/dwc3/ep0.c | 90 +++++++++++++++++++++++++---------------------- > 1 files changed, 48 insertions(+), 42 deletions(-) > > diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c > index 1f917d9..f0c5f85 100644 > --- a/drivers/usb/dwc3/ep0.c > +++ b/drivers/usb/dwc3/ep0.c > @@ -119,6 +119,49 @@ static int dwc3_ep0_start_trans(struct dwc3 *dwc, u8 epnum, dma_addr_t buf_dma, > return 0; > } > > +static int dwc3_ep0_start_data_trans(struct dwc3 *dwc, > + struct dwc3_request *req) > +{ > + u32 transfer_size = req->request.length; > + struct dwc3_ep *dep = dwc->eps[0]; you can't hardcode this to ep0. Physical endpoint 0 is *ONLY* for OUT direction. physical endpoint 1 is *ONLY* for in direction. I have a patch ready moving the code around, will test it and send it myself. -- balbi
Attachment:
signature.asc
Description: Digital signature