rk: restore file mode
[firefly-linux-kernel-4.4.55.git] / drivers / usb / dwc_otg_310 / dwc_otg_cil.c
index 653b2b600f91fe44936fa728cbd8381809dd09e4..411064697d37779d5e04584bd90594e7915c6d65 100755 (executable)
@@ -1974,7 +1974,7 @@ void dwc_otg_core_dev_init(dwc_otg_core_if_t *core_if)
        dwc_udelay(10);
 
        gahbcfg.b.hburstlen = DWC_GAHBCFG_INT_DMA_BURST_INCR8;
-       DWC_MODIFY_REG32(&global_regs->gahbcfg, 0, gahbcfg.b.hburstlen);
+       DWC_MODIFY_REG32(&global_regs->gahbcfg, 0, gahbcfg.d32);
 
        /* Device configuration register */
        init_devspd(core_if);
@@ -2262,9 +2262,9 @@ void dwc_otg_core_dev_init(dwc_otg_core_if_t *core_if)
                                    DWC_READ_REG32(&core_if->
                                                   dev_if->out_ep_regs[i]->
                                                   doepint);
-                               if (j == 100000) {
+                               if (j++ >= 10000) {
                                        DWC_ERROR
-                                           ("EPDIS was not set during 10s\n");
+                                           ("EPDIS was not set during 1s\n");
                                        break;
                                }
                        } while (!doepint.b.epdisabled);
@@ -2395,6 +2395,8 @@ void dwc_otg_disable_host_interrupts(dwc_otg_core_if_t *core_if)
        intr_mask.b.nptxfempty = 1;
 
        DWC_MODIFY_REG32(&global_regs->gintmsk, intr_mask.d32, 0);
+       /* Clear pending interrupts */
+       DWC_WRITE_REG32(&global_regs->gintsts, intr_mask.d32);
 }
 
 /**
@@ -7736,3 +7738,25 @@ int dwc_otg_check_haps_status(dwc_otg_core_if_t *core_if)
        }
 
 }
+
+void dwc_otg_set_force_mode(dwc_otg_core_if_t *core_if, int mode)
+{
+       gusbcfg_data_t usbcfg = {.d32 = 0 };
+
+       usbcfg.d32 = DWC_READ_REG32(&core_if->core_global_regs->gusbcfg);
+       switch (mode) {
+       case USB_MODE_FORCE_HOST:
+               usbcfg.b.force_host_mode = 1;
+               usbcfg.b.force_dev_mode = 0;
+               break;
+       case USB_MODE_FORCE_DEVICE:
+               usbcfg.b.force_host_mode = 0;
+               usbcfg.b.force_dev_mode = 1;
+               break;
+       case USB_MODE_NORMAL:
+               usbcfg.b.force_host_mode = 0;
+               usbcfg.b.force_dev_mode = 0;
+               break;
+       }
+       DWC_WRITE_REG32(&core_if->core_global_regs->gusbcfg, usbcfg.d32);
+}