summaryrefslogtreecommitdiffstats
path: root/drivers/net/cpsw.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2018-02-19 07:50:56 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2018-02-22 08:17:11 +0100
commitea096f2fa7ac14ddfacf9e82af7f073d77cbd06c (patch)
tree03c3e43e90c7d50f5a2a55260798d32a53db00a8 /drivers/net/cpsw.c
parent3ca8217df19114c553697ab0fdb0a72ba15cef8d (diff)
downloadbarebox-ea096f2fa7ac14ddfacf9e82af7f073d77cbd06c.tar.gz
barebox-ea096f2fa7ac14ddfacf9e82af7f073d77cbd06c.tar.xz
net: cpsw: Call phy_device_connect() earlier
We only want to register a slave when a valid phy is available. Instead of manually calling mdiobus_scan() and phy_register_device() we can let this do from phy_device_connect() which also works for fixed phys. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net/cpsw.c')
-rw-r--r--drivers/net/cpsw.c19
1 files changed, 4 insertions, 15 deletions
diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c
index d11ca33f70..928b97774b 100644
--- a/drivers/net/cpsw.c
+++ b/drivers/net/cpsw.c
@@ -761,11 +761,6 @@ static int cpsw_open(struct eth_device *edev)
dev_dbg(&slave->dev, "* %s\n", __func__);
- ret = phy_device_connect(edev, &priv->miibus, slave->phy_id,
- cpsw_adjust_link, 0, slave->phy_if);
- if (ret)
- return ret;
-
/* soft reset the controller and initialize priv */
soft_reset(priv, &priv->regs->soft_reset);
@@ -913,16 +908,11 @@ static int cpsw_slave_setup(struct cpsw_slave *slave, int slave_num,
struct eth_device *edev = &slave->edev;
struct device_d *dev = &slave->dev;
int ret;
- struct phy_device *phy;
- phy = mdiobus_scan(&priv->miibus, priv->slaves[slave_num].phy_id);
- if (IS_ERR(phy)) {
- ret = PTR_ERR(phy);
- goto err_out;
- }
+ edev->parent = dev;
- phy->dev.device_node = priv->slaves[slave_num].dev.device_node;
- ret = phy_register_device(phy);
+ ret = phy_device_connect(edev, &priv->miibus, slave->phy_id,
+ cpsw_adjust_link, 0, slave->phy_if);
if (ret)
goto err_out;
@@ -948,7 +938,6 @@ static int cpsw_slave_setup(struct cpsw_slave *slave, int slave_num,
edev->recv = cpsw_recv;
edev->get_ethaddr = cpsw_get_hwaddr;
edev->set_ethaddr = cpsw_set_hwaddr;
- edev->parent = dev;
ret = eth_register(edev);
if (ret)
@@ -957,7 +946,7 @@ static int cpsw_slave_setup(struct cpsw_slave *slave, int slave_num,
return 0;
err_register_dev:
- phy_unregister_device(phy);
+ phy_unregister_device(edev->phydev);
err_register_edev:
unregister_device(dev);
err_out: