Commit 6207a78c authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

net: dsa: Add helper function to obtain PHY device of a given port

In preparation for having more call sites attempting to obtain a
reference against a PHY device corresponding to a particular port,
introduce a helper function for that purpose.
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 89f09048
......@@ -273,25 +273,38 @@ int dsa_port_vlan_del(struct dsa_port *dp,
return 0;
}
static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
static struct phy_device *dsa_port_get_phy_device(struct dsa_port *dp)
{
struct device_node *port_dn = dp->dn;
struct device_node *phy_dn;
struct dsa_switch *ds = dp->ds;
struct phy_device *phydev;
int port = dp->index;
int err = 0;
phy_dn = of_parse_phandle(port_dn, "phy-handle", 0);
phy_dn = of_parse_phandle(dp->dn, "phy-handle", 0);
if (!phy_dn)
return 0;
return NULL;
phydev = of_phy_find_device(phy_dn);
if (!phydev) {
err = -EPROBE_DEFER;
goto err_put_of;
of_node_put(phy_dn);
return ERR_PTR(-EPROBE_DEFER);
}
return phydev;
}
static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
{
struct dsa_switch *ds = dp->ds;
struct phy_device *phydev;
int port = dp->index;
int err = 0;
phydev = dsa_port_get_phy_device(dp);
if (!phydev)
return 0;
if (IS_ERR(phydev))
return PTR_ERR(phydev);
if (enable) {
err = genphy_config_init(phydev);
if (err < 0)
......@@ -317,8 +330,6 @@ static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
err_put_dev:
put_device(&phydev->mdio.dev);
err_put_of:
of_node_put(phy_dn);
return err;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment