Skip to content

Commit

Permalink
net: bcmgenet: refactor phy mode configuration
Browse files Browse the repository at this point in the history
The DT phy mode is similar to what we want for ACPI
lets factor it out of the of path, and change the
of_ call to device_.

Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jeremy Linton authored and David S. Miller committed Feb 24, 2020
1 parent ce69e21 commit 480ded2
Showing 1 changed file with 26 additions and 16 deletions.
42 changes: 26 additions & 16 deletions drivers/net/ethernet/broadcom/genet/bcmmii.c
Original file line number Diff line number Diff line change
Expand Up @@ -477,12 +477,33 @@ static int bcmgenet_mii_register(struct bcmgenet_priv *priv)
return ret;
}

static int bcmgenet_phy_interface_init(struct bcmgenet_priv *priv)
{
struct device *kdev = &priv->pdev->dev;
int phy_mode = device_get_phy_mode(kdev);

if (phy_mode < 0) {
dev_err(kdev, "invalid PHY mode property\n");
return phy_mode;
}

priv->phy_interface = phy_mode;

/* We need to specifically look up whether this PHY interface is
* internal or not *before* we even try to probe the PHY driver
* over MDIO as we may have shut down the internal PHY for power
* saving purposes.
*/
if (priv->phy_interface == PHY_INTERFACE_MODE_INTERNAL)
priv->internal_phy = true;

return 0;
}

static int bcmgenet_mii_of_init(struct bcmgenet_priv *priv)
{
struct device_node *dn = priv->pdev->dev.of_node;
struct device *kdev = &priv->pdev->dev;
struct phy_device *phydev;
phy_interface_t phy_mode;
int ret;

/* Fetch the PHY phandle */
Expand All @@ -500,23 +521,12 @@ static int bcmgenet_mii_of_init(struct bcmgenet_priv *priv)
}

/* Get the link mode */
ret = of_get_phy_mode(dn, &phy_mode);
if (ret) {
dev_err(kdev, "invalid PHY mode property\n");
ret = bcmgenet_phy_interface_init(priv);
if (ret)
return ret;
}

priv->phy_interface = phy_mode;

/* We need to specifically look up whether this PHY interface is internal
* or not *before* we even try to probe the PHY driver over MDIO as we
* may have shut down the internal PHY for power saving purposes.
*/
if (priv->phy_interface == PHY_INTERFACE_MODE_INTERNAL)
priv->internal_phy = true;

/* Make sure we initialize MoCA PHYs with a link down */
if (phy_mode == PHY_INTERFACE_MODE_MOCA) {
if (priv->phy_interface == PHY_INTERFACE_MODE_MOCA) {
phydev = of_phy_find_device(dn);
if (phydev) {
phydev->link = 0;
Expand Down

0 comments on commit 480ded2

Please sign in to comment.