static int ti_pipe3_init(struct phy *x) { struct ti_pipe3 *phy = phy_get_drvdata(x); u32 val; int ret = 0; ti_pipe3_enable_clocks(phy); /* * Set pcie_pcs register to 0x96 for proper functioning of phy * as recommended in AM572x TRM SPRUHZ6, section 18.5.2.2, table * 18-1804. */ if (of_device_is_compatible(phy->dev->of_node, "ti,phy-pipe3-pcie")) { omap_control_pcie_pcs(phy->control_dev, 0x96); return 0; } /* Bring it out of IDLE if it is IDLE */ val = ti_pipe3_readl(phy->pll_ctrl_base, PLL_CONFIGURATION2); if (val & PLL_IDLE) { val &= ~PLL_IDLE; ti_pipe3_writel(phy->pll_ctrl_base, PLL_CONFIGURATION2, val); ret = ti_pipe3_dpll_wait_lock(phy); } /* Program the DPLL only if not locked */ val = ti_pipe3_readl(phy->pll_ctrl_base, PLL_STATUS); if (!(val & PLL_LOCK)) if (ti_pipe3_dpll_program(phy)) return -EINVAL; return ret; }
static int ti_pipe3_runtime_resume(struct device *dev) { struct ti_pipe3 *phy = dev_get_drvdata(dev); int ret = 0; ret = ti_pipe3_enable_clocks(phy); return ret; }
static int ti_pipe3_resume(struct device *dev) { struct ti_pipe3 *phy = dev_get_drvdata(dev); int ret; ret = ti_pipe3_enable_clocks(phy); if (ret) return ret; pm_runtime_disable(dev); pm_runtime_set_active(dev); pm_runtime_enable(dev); return 0; }