12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- --- a/drivers/net/phy/mdio-boardinfo.c
- +++ b/drivers/net/phy/mdio-boardinfo.c
- @@ -15,8 +15,11 @@
-
- #include "mdio-boardinfo.h"
-
- -static LIST_HEAD(mdio_board_list);
- -static DEFINE_MUTEX(mdio_board_lock);
- +LIST_HEAD(mdio_board_list);
- +EXPORT_SYMBOL_GPL(mdio_board_list);
- +
- +DEFINE_MUTEX(mdio_board_lock);
- +EXPORT_SYMBOL_GPL(mdio_board_lock);
-
- /**
- * mdiobus_setup_mdiodev_from_board_info - create and setup MDIO devices
- --- a/drivers/net/phy/mdio-boardinfo.h
- +++ b/drivers/net/phy/mdio-boardinfo.h
- @@ -20,4 +20,7 @@ void mdiobus_setup_mdiodev_from_board_in
- (struct mii_bus *bus,
- struct mdio_board_info *bi));
-
- +extern struct mutex mdio_board_lock;
- +extern struct list_head mdio_board_list;
- +
- #endif /* __MDIO_BOARD_INFO_H */
- --- a/drivers/net/phy/mdio_bus.c
- +++ b/drivers/net/phy/mdio_bus.c
- @@ -455,6 +455,17 @@ void mdiobus_free(struct mii_bus *bus)
- }
- EXPORT_SYMBOL(mdiobus_free);
-
- +static void mdiobus_setup_phydev_from_boardinfo(struct mii_bus *bus,
- + struct phy_device *phydev,
- + struct mdio_board_info *bi)
- +{
- + if (strcmp(bus->id, bi->bus_id) ||
- + bi->mdio_addr != phydev->mdio.addr)
- + return;
- +
- + phydev->mdio.dev.platform_data = (void *) bi->platform_data;
- +}
- +
- /**
- * mdiobus_scan - scan a bus for MDIO devices.
- * @bus: mii_bus to scan
- @@ -470,6 +481,7 @@ EXPORT_SYMBOL(mdiobus_free);
- struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr)
- {
- struct phy_device *phydev;
- + struct mdio_board_entry *be;
- int err;
-
- phydev = get_phy_device(bus, addr, false);
- @@ -482,6 +494,12 @@ struct phy_device *mdiobus_scan(struct m
- */
- of_mdiobus_link_mdiodev(bus, &phydev->mdio);
-
- + mutex_lock(&mdio_board_lock);
- + list_for_each_entry(be, &mdio_board_list, list)
- + mdiobus_setup_phydev_from_boardinfo(bus, phydev,
- + &be->board_info);
- + mutex_unlock(&mdio_board_lock);
- +
- err = phy_device_register(phydev);
- if (err) {
- phy_device_free(phydev);
|