ret = clk_prepare_enable(p_phy->clk); if (ret < 0) {
dev_err(p_phy->dev, "Failed to enable PHY clock: %d\n", ret); return ret;
}
regmap_read(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, &val); if (val & PHY0SUSPEND) { /* * USB PHY0 is in operation mode already * make sure USB PHY 60 MHz UTMI Interface Clock ready
*/
ret = regmap_read_poll_timeout(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, val,
val & PHY0DEVCKSTB, 10, 1000); if (ret == 0) return0;
}
/* * reset USB PHY0. * wait until USB PHY0 60 MHz UTMI Interface Clock ready
*/
regmap_update_bits(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, 0x7, (PHY0POR | PHY0SUSPEND));
udelay(20);
/* make USB PHY0 enter operation mode */
regmap_update_bits(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, 0x7, PHY0SUSPEND);
/* make sure USB PHY 60 MHz UTMI Interface Clock ready */
ret = regmap_read_poll_timeout(p_phy->sysreg, MA35_SYS_REG_USBPMISCR, val,
val & PHY0DEVCKSTB, 10, 1000); if (ret == -ETIMEDOUT) {
dev_err(p_phy->dev, "Check PHY clock, Timeout: %d\n", ret);
clk_disable_unprepare(p_phy->clk); return ret;
}
p_phy->sysreg = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, "nuvoton,sys"); if (IS_ERR(p_phy->sysreg)) return dev_err_probe(&pdev->dev, PTR_ERR(p_phy->sysreg), "Failed to get SYS registers\n");
p_phy->clk = of_clk_get(pdev->dev.of_node, 0); if (IS_ERR(p_phy->clk)) return dev_err_probe(&pdev->dev, PTR_ERR(p_phy->clk), "failed to find usb_phy clock\n");
phy = devm_phy_create(&pdev->dev, NULL, &ma35_usb_phy_ops); if (IS_ERR(phy)) return dev_err_probe(&pdev->dev, PTR_ERR(phy), "Failed to create PHY\n");
phy_set_drvdata(phy, p_phy);
provider = devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); if (IS_ERR(provider)) return dev_err_probe(&pdev->dev, PTR_ERR(provider), "Failed to register PHY provider\n"); return0;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.