Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+22 −11
Original line number Diff line number Diff line
@@ -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;
}