| From 2a8d2fcce0073f9e2b945c9b22b6cdb2282dec56 Mon Sep 17 00:00:00 2001 |
| From: David Bauer <mail@david-bauer.net> |
| Date: Fri, 22 Nov 2019 22:44:51 +0100 |
| Subject: [PATCH] mdio_bus: don't use managed reset-controller |
| |
| commit 32085f25d7b68404055f3525c780142fc72e543f upstream. |
| |
| 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 <geert@linux-m68k.org> |
| CC: Andrew Lunn <andrew@lunn.ch> |
| Signed-off-by: David Bauer <mail@david-bauer.net> |
| Reviewed-by: Andrew Lunn <andrew@lunn.ch> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c |
| index bd04fe762056..909b6add61a4 100644 |
| --- a/drivers/net/phy/mdio_bus.c |
| +++ b/drivers/net/phy/mdio_bus.c |
| @@ -66,8 +66,8 @@ static int mdiobus_register_reset(struct mdio_device *mdiodev) |
| 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; |
| @@ -110,6 +110,8 @@ int mdiobus_unregister_device(struct mdio_device *mdiodev) |
| 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; |
| -- |
| 2.7.4 |
| |