mdiobus: do not scan the bus at registration time
Scanning the bus can take some time. If we do not need the ethernet device, this is unnecessary, so delay the scan until the phy device iactually is needed. Andread Pretzsch: Fixup bug in scanning for all devices. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Andreas Pretzsch <apr@cn-eng.de>
This commit is contained in:
parent
745c16db7e
commit
89dfe2d2af
|
@ -36,7 +36,7 @@
|
|||
*/
|
||||
int mdiobus_register(struct mii_bus *bus)
|
||||
{
|
||||
int i, err;
|
||||
int err;
|
||||
|
||||
if (NULL == bus ||
|
||||
NULL == bus->read ||
|
||||
|
@ -59,29 +59,8 @@ int mdiobus_register(struct mii_bus *bus)
|
|||
if (bus->reset)
|
||||
bus->reset(bus);
|
||||
|
||||
for (i = 0; i < PHY_MAX_ADDR; i++) {
|
||||
if ((bus->phy_mask & (1 << i)) == 0) {
|
||||
struct phy_device *phydev;
|
||||
|
||||
phydev = mdiobus_scan(bus, i);
|
||||
if (IS_ERR(phydev)) {
|
||||
err = PTR_ERR(phydev);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pr_info("%s: probed\n", dev_name(&bus->dev));
|
||||
return 0;
|
||||
|
||||
error:
|
||||
while (--i >= 0) {
|
||||
if (bus->phy_map[i]) {
|
||||
kfree(bus->phy_map[i]);
|
||||
bus->phy_map[i] = NULL;
|
||||
}
|
||||
}
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(mdiobus_register);
|
||||
|
||||
|
|
|
@ -154,7 +154,7 @@ int phy_device_connect(struct eth_device *edev, struct mii_bus *bus, int addr,
|
|||
|
||||
if (!edev->phydev) {
|
||||
if (addr >= 0) {
|
||||
dev = bus->phy_map[addr];
|
||||
dev = mdiobus_scan(bus, addr);
|
||||
if (!dev) {
|
||||
ret = -EIO;
|
||||
goto fail;
|
||||
|
@ -169,7 +169,7 @@ int phy_device_connect(struct eth_device *edev, struct mii_bus *bus, int addr,
|
|||
goto fail;
|
||||
} else {
|
||||
for (i = 0; i < PHY_MAX_ADDR && !edev->phydev; i++) {
|
||||
dev = bus->phy_map[i];
|
||||
dev = mdiobus_scan(bus, i);
|
||||
if (!dev || dev->attached_dev)
|
||||
continue;
|
||||
|
||||
|
|
Loading…
Reference in New Issue