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, ...@@ -273,25 +273,38 @@ int dsa_port_vlan_del(struct dsa_port *dp,
return 0; 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 device_node *phy_dn;
struct dsa_switch *ds = dp->ds;
struct phy_device *phydev; 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) if (!phy_dn)
return 0; return NULL;
phydev = of_phy_find_device(phy_dn); phydev = of_phy_find_device(phy_dn);
if (!phydev) { if (!phydev) {
err = -EPROBE_DEFER; of_node_put(phy_dn);
goto err_put_of; 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) { if (enable) {
err = genphy_config_init(phydev); err = genphy_config_init(phydev);
if (err < 0) if (err < 0)
...@@ -317,8 +330,6 @@ static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable) ...@@ -317,8 +330,6 @@ static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
err_put_dev: err_put_dev:
put_device(&phydev->mdio.dev); put_device(&phydev->mdio.dev);
err_put_of:
of_node_put(phy_dn);
return err; 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