1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- From 32085f25d7b68404055f3525c780142fc72e543f Mon Sep 17 00:00:00 2001
- From: David Bauer <[email protected]>
- Date: Fri, 22 Nov 2019 22:44:51 +0100
- Subject: [PATCH] mdio_bus: don't use managed reset-controller
- Geert Uytterhoeven reported that using devm_reset_controller_get leads
- to a WARNING when probing a reset-controlled PHY. This is because the
- device devm_reset_controller_get gets supplied is not actually the
- one being probed.
- Acquire an unmanaged reset-control as well as free the reset_control on
- unregister to fix this.
- Reported-by: Geert Uytterhoeven <[email protected]>
- CC: Andrew Lunn <[email protected]>
- Signed-off-by: David Bauer <[email protected]>
- Reviewed-by: Andrew Lunn <[email protected]>
- Signed-off-by: David S. Miller <[email protected]>
- ---
- drivers/net/phy/mdio_bus.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
- --- a/drivers/net/phy/mdio_bus.c
- +++ b/drivers/net/phy/mdio_bus.c
- @@ -74,8 +74,8 @@ static int mdiobus_register_reset(struct
- struct reset_control *reset = NULL;
-
- if (mdiodev->dev.of_node)
- - reset = devm_reset_control_get_exclusive(&mdiodev->dev,
- - "phy");
- + reset = of_reset_control_get_exclusive(mdiodev->dev.of_node,
- + "phy");
- if (PTR_ERR(reset) == -ENOENT ||
- PTR_ERR(reset) == -ENOTSUPP)
- reset = NULL;
- @@ -118,6 +118,8 @@ int mdiobus_unregister_device(struct mdi
- if (mdiodev->bus->mdio_map[mdiodev->addr] != mdiodev)
- return -EINVAL;
-
- + reset_control_put(mdiodev->reset_ctrl);
- +
- mdiodev->bus->mdio_map[mdiodev->addr] = NULL;
-
- return 0;
|