aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/devicetree/bindings/net/phy.txt12
-rw-r--r--drivers/of/of_mdio.c16
2 files changed, 23 insertions, 5 deletions
diff --git a/Documentation/devicetree/bindings/net/phy.txt b/Documentation/devicetree/bindings/net/phy.txt
index bb8c742eb8c5..7cd18fbfcf71 100644
--- a/Documentation/devicetree/bindings/net/phy.txt
+++ b/Documentation/devicetree/bindings/net/phy.txt
@@ -14,10 +14,20 @@ Required properties:
14 - linux,phandle : phandle for this node; likely referenced by an 14 - linux,phandle : phandle for this node; likely referenced by an
15 ethernet controller node. 15 ethernet controller node.
16 16
17Optional Properties:
18
19- compatible: Compatible list, may contain
20 "ethernet-phy-ieee802.3-c22" or "ethernet-phy-ieee802.3-c45" for
21 PHYs that implement IEEE802.3 clause 22 or IEEE802.3 clause 45
22 specifications. If neither of these are specified, the default is to
23 assume clause 22. The compatible list may also contain other
24 elements.
25
17Example: 26Example:
18 27
19ethernet-phy@0 { 28ethernet-phy@0 {
20 linux,phandle = <2452000> 29 compatible = "ethernet-phy-ieee802.3-c22";
30 linux,phandle = <2452000>;
21 interrupt-parent = <40000>; 31 interrupt-parent = <40000>;
22 interrupts = <35 1>; 32 interrupts = <35 1>;
23 reg = <0>; 33 reg = <0>;
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index 6c24cad322df..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, false); 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