]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: ti: davinci_emac: stop using bus type mdio_bus_type
authorHeiner Kallweit <hkallweit1@gmail.com>
Fri, 27 Feb 2026 20:52:16 +0000 (21:52 +0100)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 3 Mar 2026 12:12:08 +0000 (13:12 +0100)
This driver is the only user of mdio_bus_type outside phylib.
Using mdio_bus_type isn't strictly needed here, so use an alternative
approach. This will allow to make mdio_bus_type private to phylib
in a follow-up series.

Compile-tested only.

Note: Devices supported by this driver are OF-only, therefore the string
      comparison in match_first_device() isn't needed any longer.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Link: https://patch.msgid.link/cc8e83aa-48c3-4497-b6ad-760a7f9e25dc@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/ti/davinci_emac.c

index ed8116fb05e9bcd8c884c7485e5940fcca4f8ff7..3802122d0f1b2a85cb54b91d8975447d6ece4080 100644 (file)
@@ -1389,15 +1389,6 @@ static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
                return -EOPNOTSUPP;
 }
 
-static int match_first_device(struct device *dev, const void *data)
-{
-       if (dev->parent && dev->parent->of_node)
-               return of_device_is_compatible(dev->parent->of_node,
-                                              "ti,davinci_mdio");
-
-       return !strncmp(dev_name(dev), "davinci_mdio", 12);
-}
-
 /**
  * emac_dev_open - EMAC device open
  * @ndev: The DaVinci EMAC network adapter
@@ -1417,7 +1408,6 @@ static int emac_dev_open(struct net_device *ndev)
        int i = 0;
        struct emac_priv *priv = netdev_priv(ndev);
        struct phy_device *phydev = NULL;
-       struct device *phy = NULL;
 
        ret = pm_runtime_resume_and_get(&priv->pdev->dev);
        if (ret < 0) {
@@ -1502,20 +1492,22 @@ static int emac_dev_open(struct net_device *ndev)
                }
        }
 
-       /* use the first phy on the bus if pdata did not give us a phy id */
+       /* if no phy-handle and no fixed link, use the first phy on the bus */
        if (!phydev && !priv->phy_id) {
-               /* NOTE: we can't use bus_find_device_by_name() here because
-                * the device name is not guaranteed to be 'davinci_mdio'. On
-                * some systems it can be 'davinci_mdio.0' so we need to use
-                * strncmp() against the first part of the string to correctly
-                * match it.
-                */
-               phy = bus_find_device(&mdio_bus_type, NULL, NULL,
-                                     match_first_device);
-               if (phy) {
-                       priv->phy_id = dev_name(phy);
-                       if (!priv->phy_id || !*priv->phy_id)
-                               put_device(phy);
+               struct device_node *np;
+
+               np = of_find_compatible_node(NULL, NULL, "ti,davinci_mdio");
+               if (np) {
+                       struct mii_bus *bus = of_mdio_find_bus(np);
+
+                       if (bus) {
+                               struct phy_device *phy = phy_find_first(bus);
+
+                               if (phy)
+                                       priv->phy_id = phydev_name(phy);
+                               put_device(&bus->dev); /* of_mdio_find_bus */
+                       }
+                       of_node_put(np); /* of_find_compatible_node */
                }
        }
 
@@ -1523,7 +1515,6 @@ static int emac_dev_open(struct net_device *ndev)
                phydev = phy_connect(ndev, priv->phy_id,
                                     &emac_adjust_link,
                                     PHY_INTERFACE_MODE_MII);
-               put_device(phy);        /* reference taken by bus_find_device */
                if (IS_ERR(phydev)) {
                        dev_err(emac_dev, "could not connect to phy %s\n",
                                priv->phy_id);