usb: gadget: langwell: use generic map/unmap functions
authorFelipe Balbi <balbi@ti.com>
Mon, 19 Dec 2011 09:48:24 +0000 (11:48 +0200)
committerFelipe Balbi <balbi@ti.com>
Tue, 28 Feb 2012 12:49:05 +0000 (14:49 +0200)
those routines have everything we need to map/unmap
USB requests and it's better to use them.

Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/langwell_udc.c

index a2bb5e476f54f2a4c04325217deb5545c0aff30e..e91f11a8e2b181d866d14050765470a99d064788 100644 (file)
@@ -406,16 +406,7 @@ static void done(struct langwell_ep *ep, struct langwell_request *req,
                dma_pool_free(dev->dtd_pool, curr_dtd, curr_dtd->dtd_dma);
        }
 
-       if (req->mapped) {
-               dma_unmap_single(&dev->pdev->dev,
-                       req->req.dma, req->req.length,
-                       is_in(ep) ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
-               req->req.dma = DMA_ADDR_INVALID;
-               req->mapped = 0;
-       } else
-               dma_sync_single_for_cpu(&dev->pdev->dev, req->req.dma,
-                               req->req.length,
-                               is_in(ep) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
+       usb_gadget_unmap_request(&dev->gadget, &req->req, is_in(ep));
 
        if (status != -ESHUTDOWN)
                dev_dbg(&dev->pdev->dev,
@@ -755,7 +746,8 @@ static int langwell_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
        struct langwell_ep      *ep;
        struct langwell_udc     *dev;
        unsigned long           flags;
-       int                     is_iso = 0, zlflag = 0;
+       int                     is_iso = 0;
+       int                     ret;
 
        /* always require a cpu-view buffer */
        req = container_of(_req, struct langwell_request, req);
@@ -782,33 +774,10 @@ static int langwell_ep_queue(struct usb_ep *_ep, struct usb_request *_req,
        if (unlikely(!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN))
                return -ESHUTDOWN;
 
-       /* set up dma mapping in case the caller didn't */
-       if (_req->dma == DMA_ADDR_INVALID) {
-               /* WORKAROUND: WARN_ON(size == 0) */
-               if (_req->length == 0) {
-                       dev_vdbg(&dev->pdev->dev, "req->length: 0->1\n");
-                       zlflag = 1;
-                       _req->length++;
-               }
-
-               _req->dma = dma_map_single(&dev->pdev->dev,
-                               _req->buf, _req->length,
-                               is_in(ep) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
-               if (zlflag && (_req->length == 1)) {
-                       dev_vdbg(&dev->pdev->dev, "req->length: 1->0\n");
-                       zlflag = 0;
-                       _req->length = 0;
-               }
-
-               req->mapped = 1;
-               dev_vdbg(&dev->pdev->dev, "req->mapped = 1\n");
-       } else {
-               dma_sync_single_for_device(&dev->pdev->dev,
-                               _req->dma, _req->length,
-                               is_in(ep) ?  DMA_TO_DEVICE : DMA_FROM_DEVICE);
-               req->mapped = 0;
-               dev_vdbg(&dev->pdev->dev, "req->mapped = 0\n");
-       }
+       /* set up dma mapping */
+       ret = usb_gadget_map_request(&dev->gadget, &req->req, is_in(ep));
+       if (ret)
+               return ret;
 
        dev_dbg(&dev->pdev->dev,
                        "%s queue req %p, len %u, buf %p, dma 0x%08x\n",