diff options
author | Marek Vasut <marex@denx.de> | 2021-11-13 05:23:11 +0300 |
---|---|---|
committer | Ramon Fried <rfried.dev@gmail.com> | 2021-12-02 09:35:37 +0300 |
commit | 8777033722719a37eac8d07efa3e4b3a665612e1 (patch) | |
tree | d8a6754950a9dffe875484e66324c1ac0d6ebe4a /drivers/net | |
parent | 4a14bfffd42f968ed9d72a780a8d44a9053c5b95 (diff) | |
download | u-boot-8777033722719a37eac8d07efa3e4b3a665612e1.tar.xz |
net: eth-phy: Handle gpio_request_by_name() return value
The gpio_request_by_name() returns zero in case of success, however the
conditional return value check in gpio_request_by_name() checks only for
(ret != -ENOENT) and if the condition is true, returns ret outright.
This leads to a situation where successful gpio_request_by_name() return
leads to immediate successful eth_phy_of_to_plat() return as well, and
to skipped parsing of "reset-assert-us" and "reset-deassert-us", so the
PHY driver operates with valid reset GPIO, but with assert/deassert times
set to default, which is 0, instead of the values from DT. This breaks
PHY reset.
Fix this by checking if return value is non-zero and then for this one
single allowed non-zero return value, -ENOENT.
Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Ramon Fried <rfried.dev@gmail.com>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/eth-phy-uclass.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/eth-phy-uclass.c b/drivers/net/eth-phy-uclass.c index c04bab944d..a9b358ee23 100644 --- a/drivers/net/eth-phy-uclass.c +++ b/drivers/net/eth-phy-uclass.c @@ -138,7 +138,7 @@ static int eth_phy_of_to_plat(struct udevice *dev) ret = gpio_request_by_name(dev, "reset-gpios", 0, &uc_priv->reset_gpio, GPIOD_IS_OUT); - if (ret != -ENOENT) + if (ret && ret != -ENOENT) return ret; uc_priv->reset_assert_delay = dev_read_u32_default(dev, "reset-assert-us", 0); |