usb: dwc3: gadget: do not map/unmap ZLP transfers
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 31 Aug 2011 15:12:02 +0000 (17:12 +0200)
committerFelipe Balbi <balbi@ti.com>
Fri, 9 Sep 2011 10:03:46 +0000 (13:03 +0300)
If the gadget drivers sends a ZLP we are trying to map this this request
which does not work on all implementations. So we simply skip mapping
it.

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/gadget.c

index 0c934a195deb86ec1915a92bfddd25c8fea5436d..1de4d3f8756987220b5407c3689d3902c49fc6f0 100644 (file)
@@ -61,6 +61,11 @@ void dwc3_map_buffer_to_dma(struct dwc3_request *req)
 {
        struct dwc3                     *dwc = req->dep->dwc;
 
+       if (req->request.length == 0) {
+               /* req->request.dma = dwc->setup_buf_addr; */
+               return;
+       }
+
        if (req->request.dma == DMA_ADDR_INVALID) {
                req->request.dma = dma_map_single(dwc->dev, req->request.buf,
                                req->request.length, req->direction
@@ -78,6 +83,11 @@ void dwc3_unmap_buffer_from_dma(struct dwc3_request *req)
 {
        struct dwc3                     *dwc = req->dep->dwc;
 
+       if (req->request.length == 0) {
+               req->request.dma = DMA_ADDR_INVALID;
+               return;
+       }
+
        if (req->mapped) {
                dma_unmap_single(dwc->dev, req->request.dma,
                                req->request.length, req->direction