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);
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);
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);
}
/**
}
}
+
+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);
+}