9
0
Fork 0

net: phy: add of_phy_device_connect

This implements a of_phy_device_connect to allow DT enabled drivers
to connect to a PHY device by using the PHY's DT node only. It
currently assumes that each PHY node is a child of the corresponding
mdio bus.

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sebastian Hesselbarth 2014-02-05 23:40:05 +01:00 committed by Sascha Hauer
parent 7ccd47fd5c
commit 29af281cb1
2 changed files with 45 additions and 0 deletions

View File

@ -331,6 +331,37 @@ fail:
return ret;
}
#if defined(CONFIG_OFTREE)
int of_phy_device_connect(struct eth_device *edev, struct device_node *phy_np,
void (*adjust_link) (struct eth_device *edev),
u32 flags, phy_interface_t interface)
{
struct device_node *bus_np;
struct mii_bus *miibus;
int phy_addr = -ENODEV;
if (!phy_np)
return -EINVAL;
of_property_read_u32(phy_np, "reg", &phy_addr);
bus_np = of_get_parent(phy_np);
if (!bus_np)
return -ENODEV;
for_each_mii_bus(miibus) {
if (miibus->parent && miibus->parent->device_node == bus_np)
return phy_device_connect(edev, miibus, phy_addr,
adjust_link, flags, interface);
}
dev_err(&edev->dev, "unable to mdio bus for phy %s\n",
phy_np->full_name);
return -ENODEV;
}
#endif
/* Generic PHY support and helper functions */
/**

View File

@ -280,6 +280,20 @@ int phy_device_connect(struct eth_device *dev, struct mii_bus *bus, int addr,
void (*adjust_link) (struct eth_device *edev),
u32 flags, phy_interface_t interface);
#if defined(CONFIG_OFTREE)
int of_phy_device_connect(struct eth_device *edev, struct device_node *phy_np,
void (*adjust_link) (struct eth_device *edev),
u32 flags, phy_interface_t interface);
#else
static inline int of_phy_device_connect(struct eth_device *edev,
struct device_node *phy_np,
void (*adjust_link) (struct eth_device *edev),
u32 flags, phy_interface_t interface)
{
return -ENOSYS;
}
#endif
int phy_update_status(struct phy_device *phydev);
int phy_wait_aneg_done(struct phy_device *phydev);