Commit cfaa202a authored by Oleksij Rempel's avatar Oleksij Rempel Committed by Jakub Kicinski

net: mdiobus: fwnode_mdiobus_register_phy() rework error handling

Rework error handling as preparation for PSE patch. This patch should
make it easier to extend this function.
Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 3114b075
...@@ -110,8 +110,8 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus, ...@@ -110,8 +110,8 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus,
else else
phy = phy_device_create(bus, addr, phy_id, 0, NULL); phy = phy_device_create(bus, addr, phy_id, 0, NULL);
if (IS_ERR(phy)) { if (IS_ERR(phy)) {
unregister_mii_timestamper(mii_ts); rc = PTR_ERR(phy);
return PTR_ERR(phy); goto clean_mii_ts;
} }
if (is_acpi_node(child)) { if (is_acpi_node(child)) {
...@@ -125,17 +125,13 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus, ...@@ -125,17 +125,13 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus,
/* All data is now stored in the phy struct, so register it */ /* All data is now stored in the phy struct, so register it */
rc = phy_device_register(phy); rc = phy_device_register(phy);
if (rc) { if (rc) {
phy_device_free(phy);
fwnode_handle_put(phy->mdio.dev.fwnode); fwnode_handle_put(phy->mdio.dev.fwnode);
return rc; goto clean_phy;
} }
} else if (is_of_node(child)) { } else if (is_of_node(child)) {
rc = fwnode_mdiobus_phy_device_register(bus, phy, child, addr); rc = fwnode_mdiobus_phy_device_register(bus, phy, child, addr);
if (rc) { if (rc)
unregister_mii_timestamper(mii_ts); goto clean_phy;
phy_device_free(phy);
return rc;
}
} }
/* phy->mii_ts may already be defined by the PHY driver. A /* phy->mii_ts may already be defined by the PHY driver. A
...@@ -145,5 +141,12 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus, ...@@ -145,5 +141,12 @@ int fwnode_mdiobus_register_phy(struct mii_bus *bus,
if (mii_ts) if (mii_ts)
phy->mii_ts = mii_ts; phy->mii_ts = mii_ts;
return 0; return 0;
clean_phy:
phy_device_free(phy);
clean_mii_ts:
unregister_mii_timestamper(mii_ts);
return rc;
} }
EXPORT_SYMBOL(fwnode_mdiobus_register_phy); EXPORT_SYMBOL(fwnode_mdiobus_register_phy);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment