These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / usb / gadget / udc / fotg210-udc.c
index e547ea7..6ba122c 100644 (file)
@@ -384,25 +384,15 @@ static void fotg210_ep0_queue(struct fotg210_ep *ep,
                return;
        }
        if (ep->dir_in) { /* if IN */
-               if (req->req.length) {
-                       fotg210_start_dma(ep, req);
-               } else {
-                       pr_err("%s : req->req.length = 0x%x\n",
-                              __func__, req->req.length);
-               }
+               fotg210_start_dma(ep, req);
                if ((req->req.length == req->req.actual) ||
                    (req->req.actual < ep->ep.maxpacket))
                        fotg210_done(ep, req, 0);
        } else { /* OUT */
-               if (!req->req.length) {
-                       fotg210_done(ep, req, 0);
-               } else {
-                       u32 value = ioread32(ep->fotg210->reg +
-                                               FOTG210_DMISGR0);
+               u32 value = ioread32(ep->fotg210->reg + FOTG210_DMISGR0);
 
-                       value &= ~DMISGR0_MCX_OUT_INT;
-                       iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR0);
-               }
+               value &= ~DMISGR0_MCX_OUT_INT;
+               iowrite32(value, ep->fotg210->reg + FOTG210_DMISGR0);
        }
 }
 
@@ -1153,6 +1143,17 @@ static int fotg210_udc_probe(struct platform_device *pdev)
                ep->ep.name = fotg210_ep_name[i];
                ep->ep.ops = &fotg210_ep_ops;
                usb_ep_set_maxpacket_limit(&ep->ep, (unsigned short) ~0);
+
+               if (i == 0) {
+                       ep->ep.caps.type_control = true;
+               } else {
+                       ep->ep.caps.type_iso = true;
+                       ep->ep.caps.type_bulk = true;
+                       ep->ep.caps.type_int = true;
+               }
+
+               ep->ep.caps.dir_in = true;
+               ep->ep.caps.dir_out = true;
        }
        usb_ep_set_maxpacket_limit(&fotg210->ep[0]->ep, 0x40);
        fotg210->gadget.ep0 = &fotg210->ep[0]->ep;
@@ -1171,7 +1172,7 @@ static int fotg210_udc_probe(struct platform_device *pdev)
                          udc_name, fotg210);
        if (ret < 0) {
                pr_err("request_irq error (%d)\n", ret);
-               goto err_irq;
+               goto err_req;
        }
 
        ret = usb_add_gadget_udc(&pdev->dev, &fotg210->gadget);
@@ -1183,7 +1184,6 @@ static int fotg210_udc_probe(struct platform_device *pdev)
        return 0;
 
 err_add_udc:
-err_irq:
        free_irq(ires->start, fotg210);
 
 err_req: