aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/of_mdio.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index 2574abde8d99..8e6c25f35040 100644
--- a/drivers/of/of_mdio.c
+++ b/drivers/of/of_mdio.c
@@ -57,6 +57,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
57 const __be32 *paddr; 57 const __be32 *paddr;
58 u32 addr; 58 u32 addr;
59 int len; 59 int len;
60 bool is_c45;
60 61
61 /* A PHY must have a reg property in the range [0-31] */ 62 /* A PHY must have a reg property in the range [0-31] */
62 paddr = of_get_property(child, "reg", &len); 63 paddr = of_get_property(child, "reg", &len);
@@ -79,11 +80,18 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
79 mdio->irq[addr] = PHY_POLL; 80 mdio->irq[addr] = PHY_POLL;
80 } 81 }
81 82
82 phy = get_phy_device(mdio, addr); 83 is_c45 = of_device_is_compatible(child,
84 "ethernet-phy-ieee802.3-c45");
85 phy = get_phy_device(mdio, addr, is_c45);
86
83 if (!phy || IS_ERR(phy)) { 87 if (!phy || IS_ERR(phy)) {
84 dev_err(&mdio->dev, "error probing PHY at address %i\n", 88 phy = phy_device_create(mdio, addr, 0, false, NULL);
85 addr); 89 if (!phy || IS_ERR(phy)) {
86 continue; 90 dev_err(&mdio->dev,
91 "error creating PHY at address %i\n",
92 addr);
93 continue;
94 }
87 } 95 }
88 96
89 /* Associate the OF node with the device structure so it 97 /* Associate the OF node with the device structure so it