diff options
author | Patrick Delaunay <patrick.delaunay@st.com> | 2020-07-03 17:36:40 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2020-09-08 08:46:32 -0400 |
commit | 2041ae5a5a84a2461b4754250d4301d8d0533fdd (patch) | |
tree | ce358d07ef6a47abf05880312f5f0c6cedca5133 | |
parent | 314b9b4a38befd120ce1c566d9eea8e0ec9d8336 (diff) | |
download | u-boot-2041ae5a5a84a2461b4754250d4301d8d0533fdd.zip u-boot-2041ae5a5a84a2461b4754250d4301d8d0533fdd.tar.gz u-boot-2041ae5a5a84a2461b4754250d4301d8d0533fdd.tar.bz2 |
phy: generic: add error trace to detect PHY issue in uclass
Add an error trace for PHY errors directly in generic phy
functions provided by PHY uclass.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
-rw-r--r-- | drivers/phy/phy-uclass.c | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/drivers/phy/phy-uclass.c b/drivers/phy/phy-uclass.c index db7f39c..8f456f3 100644 --- a/drivers/phy/phy-uclass.c +++ b/drivers/phy/phy-uclass.c @@ -117,56 +117,91 @@ int generic_phy_get_by_name(struct udevice *dev, const char *phy_name, int generic_phy_init(struct phy *phy) { struct phy_ops const *ops; + int ret; if (!generic_phy_valid(phy)) return 0; ops = phy_dev_ops(phy->dev); + if (!ops->init) + return 0; + ret = ops->init(phy); + if (ret) + dev_err(phy->dev, "PHY: Failed to init %s: %d.\n", + phy->dev->name, ret); - return ops->init ? ops->init(phy) : 0; + return ret; } int generic_phy_reset(struct phy *phy) { struct phy_ops const *ops; + int ret; if (!generic_phy_valid(phy)) return 0; ops = phy_dev_ops(phy->dev); + if (!ops->reset) + return 0; + ret = ops->reset(phy); + if (ret) + dev_err(phy->dev, "PHY: Failed to reset %s: %d.\n", + phy->dev->name, ret); - return ops->reset ? ops->reset(phy) : 0; + return ret; } int generic_phy_exit(struct phy *phy) { struct phy_ops const *ops; + int ret; if (!generic_phy_valid(phy)) return 0; ops = phy_dev_ops(phy->dev); + if (!ops->exit) + return 0; + ret = ops->exit(phy); + if (ret) + dev_err(phy->dev, "PHY: Failed to exit %s: %d.\n", + phy->dev->name, ret); - return ops->exit ? ops->exit(phy) : 0; + return ret; } int generic_phy_power_on(struct phy *phy) { struct phy_ops const *ops; + int ret; if (!generic_phy_valid(phy)) return 0; ops = phy_dev_ops(phy->dev); + if (!ops->power_on) + return 0; + ret = ops->power_on(phy); + if (ret) + dev_err(phy->dev, "PHY: Failed to power on %s: %d.\n", + phy->dev->name, ret); - return ops->power_on ? ops->power_on(phy) : 0; + return ret; } int generic_phy_power_off(struct phy *phy) { struct phy_ops const *ops; + int ret; if (!generic_phy_valid(phy)) return 0; ops = phy_dev_ops(phy->dev); + if (!ops->power_off) + return 0; + ret = ops->power_off(phy); + if (ret) + dev_err(phy->dev, "PHY: Failed to power off %s: %d.\n", + phy->dev->name, ret); - return ops->power_off ? ops->power_off(phy) : 0; + return ret; } int generic_phy_get_bulk(struct udevice *dev, struct phy_bulk *bulk) |