dn = of_find_compatible_node(NULL, NULL, "brcm,unimac-mdio");
        priv->master_mii_bus = of_mdio_find_bus(dn);
        if (!priv->master_mii_bus) {
-               of_node_put(dn);
-               return -EPROBE_DEFER;
+               err = -EPROBE_DEFER;
+               goto err_of_node_put;
        }
 
-       get_device(&priv->master_mii_bus->dev);
        priv->master_mii_dn = dn;
 
        priv->slave_mii_bus = mdiobus_alloc();
        if (!priv->slave_mii_bus) {
-               of_node_put(dn);
-               return -ENOMEM;
+               err = -ENOMEM;
+               goto err_put_master_mii_bus_dev;
        }
 
        priv->slave_mii_bus->priv = priv;
        }
 
        err = mdiobus_register(priv->slave_mii_bus);
-       if (err && dn) {
-               mdiobus_free(priv->slave_mii_bus);
-               of_node_put(dn);
-       }
+       if (err && dn)
+               goto err_free_slave_mii_bus;
 
+       return 0;
+
+err_free_slave_mii_bus:
+       mdiobus_free(priv->slave_mii_bus);
+err_put_master_mii_bus_dev:
+       put_device(&priv->master_mii_bus->dev);
+err_of_node_put:
+       of_node_put(dn);
        return err;
 }
 
 {
        mdiobus_unregister(priv->slave_mii_bus);
        mdiobus_free(priv->slave_mii_bus);
+       put_device(&priv->master_mii_bus->dev);
        of_node_put(priv->master_mii_dn);
 }