usb: dwc2: Fix Control Write issue in DMA mode
authorRazmik Karapetyan <razmik@synopsys.com>
Wed, 16 Nov 2016 23:33:57 +0000 (15:33 -0800)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Fri, 18 Nov 2016 11:54:53 +0000 (13:54 +0200)
While sending zlp for DWC2_EP0_STATUS_IN EP direction was changed to IN.
Change it back to complete OUT transfer request.

This affects only on DMA mode, because DMA buffer map/unmap function is
direction sensitive.

Signed-off-by: Razmik Karapetyan <razmik@synopsys.com>
Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc2/gadget.c

index 4dd5f1e2d2819eae9dbb7d24c383f5bd6b03b32f..39eccbb008b74ce6075ffbf8be2b495e1c790dca 100644 (file)
@@ -2527,6 +2527,13 @@ static void dwc2_hsotg_complete_in(struct dwc2_hsotg *hsotg,
        /* Finish ZLP handling for IN EP0 transactions */
        if (hs_ep->index == 0 && hsotg->ep0_state == DWC2_EP0_STATUS_IN) {
                dev_dbg(hsotg->dev, "zlp packet sent\n");
+
+               /*
+                * While send zlp for DWC2_EP0_STATUS_IN EP direction was
+                * changed to IN. Change back to complete OUT transfer request
+                */
+               hs_ep->dir_in = 0;
+
                dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, 0);
                if (hsotg->test_mode) {
                        int ret;