static int sunxi_musb_init(struct musb *musb) { int err; pr_debug("%s():\n", __func__); err = sunxi_usbc_request_resources(0); if (err) return err; musb->isr = sunxi_musb_interrupt; sunxi_usbc_enable(0); USBC_ConfigFIFO_Base(); USBC_EnableDpDmPullUp(musb->mregs); USBC_EnableIdPullUp(musb->mregs); if (is_host_enabled(musb)) { /* Host mode */ USBC_ForceIdToLow(musb->mregs); USBC_ForceVbusValidToHigh(musb->mregs); } else { /* Peripheral mode */ USBC_ForceIdToHigh(musb->mregs); USBC_ForceVbusValidDisable(musb->mregs); } return 0; }
static int sunxi_musb_init(struct musb *musb) { struct sunxi_ccm_reg *ccm = (struct sunxi_ccm_reg *)SUNXI_CCM_BASE; pr_debug("%s():\n", __func__); musb->isr = sunxi_musb_interrupt; setbits_le32(&ccm->ahb_gate0, 1 << AHB_GATE_OFFSET_USB0); #ifdef CONFIG_SUNXI_GEN_SUN6I setbits_le32(&ccm->ahb_reset0_cfg, 1 << AHB_GATE_OFFSET_USB0); #endif sunxi_usb_phy_init(0); USBC_ConfigFIFO_Base(); USBC_EnableDpDmPullUp(musb->mregs); USBC_EnableIdPullUp(musb->mregs); if (is_host_enabled(musb)) { /* Host mode */ USBC_ForceIdToLow(musb->mregs); } else { /* Peripheral mode */ USBC_ForceIdToHigh(musb->mregs); } USBC_ForceVbusValidToHigh(musb->mregs); return 0; }