usb: dwc_otg_310: pcd: fix isoc in ep transfer issue
[firefly-linux-kernel-4.4.55.git] / drivers / usb / dwc_otg_310 / dwc_otg_pcd_intr.c
index ab0de79be9b7fabaeca238454c95ede876c13fbb..5d7d1178ca191406ed8d5cca18c95925c1cd0f61 100755 (executable)
@@ -4182,7 +4182,7 @@ do { \
                                        depctl_data_t depctl;
                                        if (ep->dwc_ep.frame_num == 0xFFFFFFFF) {
                                                ep->dwc_ep.frame_num =
-                                                   core_if->frame_num;
+                                                       dwc_otg_get_frame_number(core_if);
                                                if (ep->dwc_ep.bInterval > 1) {
                                                        depctl.d32 = 0;
                                                        depctl.d32 =
@@ -4213,13 +4213,20 @@ do { \
                                                }
                                                start_next_request(ep);
                                        }
-                                       ep->dwc_ep.frame_num +=
-                                           ep->dwc_ep.bInterval;
-                                       if (dwc_ep->frame_num > 0x3FFF) {
-                                               dwc_ep->frm_overrun = 1;
-                                               dwc_ep->frame_num &= 0x3FFF;
-                                       } else
-                                               dwc_ep->frm_overrun = 0;
+
+                                       if (ep->dwc_ep.frame_num !=
+                                           0xFFFFFFFF) {
+                                               ep->dwc_ep.frame_num +=
+                                                       ep->dwc_ep.bInterval;
+                                               if (dwc_ep->frame_num >
+                                                   0x3FFF) {
+                                                       dwc_ep->frm_overrun = 1;
+                                                       dwc_ep->frame_num &=
+                                                               0x3FFF;
+                                               } else {
+                                                       dwc_ep->frm_overrun = 0;
+                                               }
+                                       }
                                }
 
                                CLEAR_IN_EP_INTR(core_if, epnum, nak);