diff options
author | David Daney <david.daney@cavium.com> | 2012-06-27 03:33:36 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-06-28 00:23:24 -0400 |
commit | 6bd47ac2e434611e52027155438d7b4ad3c76bdb (patch) | |
tree | dde981a0e2592d9cbe13f56dd2a6db69744fbb9b | |
parent | ac28b9f8cd66d6bc54f8063df59e99abd62173a4 (diff) |
netdev/phy/of: Handle IEEE802.3 clause 45 Ethernet PHYs in of_mdiobus_register()
Define two new "compatible" values for Ethernet
PHYs. "ethernet-phy-ieee802.3-c22" and "ethernet-phy-ieee802.3-c45"
are used to indicate a PHY uses the corresponding protocol.
If a PHY is "compatible" with "ethernet-phy-ieee802.3-c45", we
indicate this so that get_phy_device() can properly probe the device.
If get_phy_device() fails, it was probably due to failing the probe of
the PHY identifier registers. Since we have the device tree telling
us the PHY exists, go ahead and add it anyhow with a phy_id of zero.
There may be a driver match based on the "compatible" property.
Signed-off-by: David Daney <david.daney@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | Documentation/devicetree/bindings/net/phy.txt | 12 | ||||
-rw-r--r-- | drivers/of/of_mdio.c | 16 |
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 | ||
17 | Optional 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 | |||
17 | Example: | 26 | Example: |
18 | 27 | ||
19 | ethernet-phy@0 { | 28 | ethernet-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 |