diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-12-11 11:51:02 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-12-11 12:33:05 +0100 |
commit | 6cb2b2f29f362c7021a05b6f68a6e8d7a79f2972 (patch) | |
tree | 16ff3e703e2d8a9e66350e773ab91e3464d85212 /drivers/net/phy | |
parent | bfc9a6985c13f3159cf7a867fe7e695983e0c269 (diff) | |
download | barebox-6cb2b2f29f362c7021a05b6f68a6e8d7a79f2972.tar.gz barebox-6cb2b2f29f362c7021a05b6f68a6e8d7a79f2972.tar.xz |
net: phy: implement detect callback for miibus devices
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net/phy')
-rw-r--r-- | drivers/net/phy/mdio_bus.c | 31 | ||||
-rw-r--r-- | drivers/net/phy/phy.c | 2 |
2 files changed, 32 insertions, 1 deletions
diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c index 56cb9b2e97..b29a980e67 100644 --- a/drivers/net/phy/mdio_bus.c +++ b/drivers/net/phy/mdio_bus.c @@ -27,6 +27,36 @@ LIST_HEAD(mii_bus_list); +static int mdiobus_detect(struct device_d *dev) +{ + struct mii_bus *mii = to_mii_bus(dev); + int i, ret; + + for (i = 0; i < PHY_MAX_ADDR; i++) { + struct phy_device *phydev; + + phydev = mdiobus_scan(mii, i); + if (IS_ERR(phydev)) + continue; + if (phydev->registered) + continue; + ret = phy_register_device(phydev); + if (ret) + dev_err(dev, "failed to register phy: %s\n", strerror(-ret)); + dev_info(dev, "registered phy as /dev/%s\n", phydev->cdev.name); + } + + return 0; +} + +void mdiobus_detect_all(void) +{ + struct mii_bus *mii; + + for_each_mii_bus(mii) + mdiobus_detect(&mii->dev); +} + /** * mdiobus_register - bring up all the PHYs on a given bus and attach them to bus * @bus: target mii_bus @@ -49,6 +79,7 @@ int mdiobus_register(struct mii_bus *bus) bus->dev.id = DEVICE_ID_DYNAMIC; strcpy(bus->dev.name, "miibus"); bus->dev.parent = bus->parent; + bus->dev.detect = mdiobus_detect; err = register_device(&bus->dev); if (err) { diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index b05a31390b..681fb5157b 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -232,7 +232,7 @@ static void phy_config_aneg(struct phy_device *phydev) drv->config_aneg(phydev); } -static int phy_register_device(struct phy_device* dev) +int phy_register_device(struct phy_device* dev) { int ret; |