|
@@ -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,
|