The current reset logic only has a delay during assert. This reuses the delay value as deassert delay to ensure PHYs are ready for commands. Delays are typically needed when external hardware slows down reset release with a RC network. This solution does not need any new device tree bindings. It also improves handling of long delays (>20ms) by using the generic fsleep() for selecting appropriate delay function.
Signed-off-by: Bruno Thomsen <bruno.thom...@gmail.com> --- drivers/net/phy/mdio_bus.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index 6ceee82b2839..84d5ab07fe16 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -627,8 +627,9 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner) bus->reset_gpiod = gpiod; gpiod_set_value_cansleep(gpiod, 1); - udelay(bus->reset_delay_us); + fsleep(bus->reset_delay_us); gpiod_set_value_cansleep(gpiod, 0); + fsleep(bus->reset_delay_us); } if (bus->reset) { base-commit: 92ed301919932f777713b9172e525674157e983d -- 2.26.2