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; }
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_enable(struct musb *musb) { int ret; pr_debug("%s():\n", __func__); musb_ep_select(musb->mregs, 0); musb_writeb(musb->mregs, MUSB_FADDR, 0); if (enabled) return 0; /* select PIO mode */ musb_writeb(musb->mregs, USBC_REG_o_VEND0, 0); if (is_host_enabled(musb)) { ret = sunxi_usb_phy_vbus_detect(0); if (ret == 1) { printf("A charger is plugged into the OTG: "); return -ENODEV; } ret = sunxi_usb_phy_id_detect(0); if (ret == 1) { printf("No host cable detected: "); return -ENODEV; } sunxi_usb_phy_power_on(0); /* port power on */ } USBC_ForceVbusValidToHigh(musb->mregs); enabled = true; return 0; }
static void sunxi_musb_enable(struct musb *musb) { pr_debug("%s():\n", __func__); if (enabled) return; /* select PIO mode */ musb_writeb(musb->mregs, USBC_REG_o_VEND0, 0); if (is_host_enabled(musb)) sunxi_usb_phy_power_on(0); /* port power on */ USBC_ForceVbusValidToHigh(musb->mregs); enabled = true; }