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

Commit 004fa118 authored by Walter Lozano's avatar Walter Lozano Committed by David S. Miller
Browse files

Altera TSE: Move PHY get addr and MDIO create



Move PHY get addr and MDIO create to a new function to improve readability
and make it easier to avoid its usage. This will be useful for example in
the case where there is no PHY chip.

Signed-off-by: default avatarWalter Lozano <walter@vanguardiasur.com.ar>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a4b4a2b7
Loading
Loading
Loading
Loading
+36 −21
Original line number Diff line number Diff line
@@ -728,6 +728,40 @@ static struct phy_device *connect_local_phy(struct net_device *dev)
	return phydev;
}

static int altera_tse_phy_get_addr_mdio_create(struct net_device *dev)
{
	struct altera_tse_private *priv = netdev_priv(dev);
	struct device_node *np = priv->device->of_node;
	int ret = 0;

	priv->phy_iface = of_get_phy_mode(np);

	/* try to get PHY address from device tree, use PHY autodetection if
	 * no valid address is given
	 */

	if (of_property_read_u32(priv->device->of_node, "phy-addr",
			 &priv->phy_addr)) {
		priv->phy_addr = POLL_PHY;
	}

	if (!((priv->phy_addr == POLL_PHY) ||
		  ((priv->phy_addr >= 0) && (priv->phy_addr < PHY_MAX_ADDR)))) {
		netdev_err(dev, "invalid phy-addr specified %d\n",
			priv->phy_addr);
		return -ENODEV;
	}

	/* Create/attach to MDIO bus */
	ret = altera_tse_mdio_create(dev,
					 atomic_add_return(1, &instance_count));

	if (ret)
		return -ENODEV;

	return 0;
}

/* Initialize driver's PHY state, and attach to the PHY
 */
static int init_phy(struct net_device *dev)
@@ -1231,7 +1265,6 @@ static int altera_tse_probe(struct platform_device *pdev)
	struct resource *dma_res;
	struct altera_tse_private *priv;
	const unsigned char *macaddr;
	struct device_node *np = pdev->dev.of_node;
	void __iomem *descmap;
	const struct of_device_id *of_id = NULL;

@@ -1408,26 +1441,8 @@ static int altera_tse_probe(struct platform_device *pdev)
	else
		eth_hw_addr_random(ndev);

	priv->phy_iface = of_get_phy_mode(np);

	/* try to get PHY address from device tree, use PHY autodetection if
	 * no valid address is given
	 */
	if (of_property_read_u32(pdev->dev.of_node, "phy-addr",
				 &priv->phy_addr)) {
		priv->phy_addr = POLL_PHY;
	}

	if (!((priv->phy_addr == POLL_PHY) ||
	      ((priv->phy_addr >= 0) && (priv->phy_addr < PHY_MAX_ADDR)))) {
		dev_err(&pdev->dev, "invalid phy-addr specified %d\n",
			priv->phy_addr);
		goto err_free_netdev;
	}

	/* Create/attach to MDIO bus */
	ret = altera_tse_mdio_create(ndev,
				     atomic_add_return(1, &instance_count));
	/* get phy addr and create mdio */
	ret = altera_tse_phy_get_addr_mdio_create(ndev);

	if (ret)
		goto err_free_netdev;