diff options
Diffstat (limited to 'drivers/usb/musb/musb_gadget.c')
| -rw-r--r-- | drivers/usb/musb/musb_gadget.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index be18537c5f1..83eddedcd9b 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c @@ -141,7 +141,9 @@ static inline void map_dma_buffer(struct musb_request *request,  static inline void unmap_dma_buffer(struct musb_request *request,  				struct musb *musb)  { -	if (!is_buffer_mapped(request)) +	struct musb_ep *musb_ep = request->ep; + +	if (!is_buffer_mapped(request) || !musb_ep->dma)  		return;  	if (request->request.dma == DMA_ADDR_INVALID) { @@ -195,7 +197,10 @@ __acquires(ep->musb->lock)  	ep->busy = 1;  	spin_unlock(&musb->lock); -	unmap_dma_buffer(req, musb); + +	if (!dma_mapping_error(&musb->g.dev, request->dma)) +		unmap_dma_buffer(req, musb); +  	if (request->status == 0)  		dev_dbg(musb->controller, "%s done request %p,  %d/%d\n",  				ep->end_point.name, request, |