diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c index b95c4f0..f6065aa 100644 --- a/drivers/net/fec_imx.c +++ b/drivers/net/fec_imx.c @@ -370,6 +370,26 @@ } } +static int fec_phy_connect(struct eth_device *edev) +{ + struct fec_priv *fec = (struct fec_priv *)edev->priv; + int ret; + + if (fec->xcv_type == SEVENWIRE) + return 0; + + ret = phy_device_connect(edev, &fec->miibus, fec->phy_addr, + fec_update_linkspeed, fec->phy_flags, + fec->interface); + if (ret) + return ret; + + if (fec->phy_init) + fec->phy_init(edev->phydev); + + return 0; +} + /** * Start the FEC engine * @param[in] edev Our device to handle @@ -377,20 +397,8 @@ static int fec_open(struct eth_device *edev) { struct fec_priv *fec = (struct fec_priv *)edev->priv; - int ret; u32 ecr; - if (fec->xcv_type != SEVENWIRE) { - ret = phy_device_connect(edev, &fec->miibus, fec->phy_addr, - fec_update_linkspeed, fec->phy_flags, - fec->interface); - if (ret) - return ret; - - if (fec->phy_init) - fec->phy_init(edev->phydev); - } - /* * Initialize RxBD/TxBD rings */ @@ -704,9 +712,18 @@ mdiobus_register(&fec->miibus); } - eth_register(edev); + ret = eth_register(edev); + if (ret) + goto err_free; + + ret = fec_phy_connect(edev); + if (ret) + goto err_unregister; + return 0; +err_unregister: + eth_unregister(edev); err_free: free(fec); return ret;