static int msm_hsphy_init(struct usb_phy *uphy) { struct msm_hsphy *phy = container_of(uphy, struct msm_hsphy, phy); u32 val; msm_hsphy_reset(uphy); /* different sequences based on core version */ phy->core_ver = readl_relaxed(phy->base); /* * HSPHY Initialization: Enable UTMI clock and clamp enable HVINTs, * and disable RETENTION (power-on default is ENABLED) */ val = readl_relaxed(phy->base + HS_PHY_CTRL_REG(0)); val |= (USB2_UTMI_CLK_EN | CLAMP_MPM_DPSE_DMSE_EN_N | RETENABLEN); if (uphy->flags & ENABLE_SECONDARY_PHY) { val &= ~(USB2_UTMI_CLK_EN | FREECLOCK_SEL); val |= FREECLK_DIS_WHEN_SUSP; } writel_relaxed(val, phy->base + HS_PHY_CTRL_REG(0)); usleep_range(2000, 2200); if (uphy->flags & ENABLE_SECONDARY_PHY) msm_usb_write_readback(phy->base, GENERAL_CFG_REG, SEC_UTMI_FREE_CLK_GFM_SEL1, SEC_UTMI_FREE_CLK_GFM_SEL1); if (phy->core_ver >= MSM_CORE_VER_120) { val = readl_relaxed(phy->base + HS_PHY_CTRL_COMMON_REG); val |= COMMON_OTGDISABLE0 | COMMON_OTGTUNE0_DEFAULT | COMMON_COMMONONN | FSEL_DEFAULT | COMMON_RETENABLEN; if (phy->set_pllbtune) { val |= COMMON_PLLBTUNE | COMMON_CLKCORE; val &= ~COMMON_FSEL; } writel_relaxed(val, phy->base + HS_PHY_CTRL_COMMON_REG); } /* * write HSPHY init value to QSCRATCH reg to set HSPHY parameters like * VBUS valid threshold, disconnect valid threshold, DC voltage level, * preempasis and rise/fall time. */ if (override_phy_init) phy->hsphy_init_seq = override_phy_init; if (phy->hsphy_init_seq) msm_usb_write_readback(phy->base, PARAMETER_OVERRIDE_X_REG(0), 0x03FFFFFF, phy->hsphy_init_seq & 0x03FFFFFF); return 0; }
static int msm_hsphy_init(struct usb_phy *uphy) { struct msm_hsphy *phy = container_of(uphy, struct msm_hsphy, phy); u32 val; msm_hsphy_reset(uphy); /* different sequences based on core version */ phy->core_ver = readl_relaxed(phy->base); /* * HSPHY Initialization: Enable UTMI clock and clamp enable HVINTs, * and disable RETENTION (power-on default is ENABLED) */ val = readl_relaxed(phy->base + HS_PHY_CTRL_REG(0)); val |= (USB2_UTMI_CLK_EN | CLAMP_MPM_DPSE_DMSE_EN_N | RETENABLEN); if (uphy->flags & ENABLE_SECONDARY_PHY) { val &= ~(USB2_UTMI_CLK_EN | FREECLOCK_SEL); val |= FREECLK_DIS_WHEN_SUSP; } writel_relaxed(val, phy->base + HS_PHY_CTRL_REG(0)); usleep_range(2000, 2200); if (uphy->flags & ENABLE_SECONDARY_PHY) msm_usb_write_readback(phy->base, GENERAL_CFG_REG, SEC_UTMI_FREE_CLK_GFM_SEL1, SEC_UTMI_FREE_CLK_GFM_SEL1); if (phy->core_ver >= MSM_CORE_VER_120) { val = readl_relaxed(phy->base + HS_PHY_CTRL_COMMON_REG); val |= COMMON_OTGDISABLE0 | COMMON_OTGTUNE0_DEFAULT | COMMON_COMMONONN | FSEL_DEFAULT | COMMON_RETENABLEN; if (phy->set_pllbtune) { val |= COMMON_PLLBTUNE | COMMON_CLKCORE; val &= ~COMMON_FSEL; } writel_relaxed(val, phy->base + HS_PHY_CTRL_COMMON_REG); } msm_hsphy_set_params(uphy); return 0; }