of: mdio: Add a "broken-turn-around" property
authorFlorian Fainelli <f.fainelli@gmail.com>
Tue, 12 May 2015 17:33:25 +0000 (10:33 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 14 May 2015 17:40:55 +0000 (13:40 -0400)
Some Ethernet PHY devices/switches may not properly release the MDIO bus
during turn-around time, and fail to drive it low, which can be seen by
some controllers as a read failure, while the data clocked in is still
correct.

Add a boolean property "broken-turn-around" which is parsed by the
generic MDIO bus probing code and will set the corresponding bit in the
MDIO bus phy_ignore_ta_mask bitmask for MDIO bus drivers to utilize that
information.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/devicetree/bindings/net/phy.txt
drivers/of/of_mdio.c

index 40831fbaff72102d6ff608ae06c1ddf4bedcdbae..525e1658f2da5ca9ed22594fda97a25646ac2e20 100644 (file)
@@ -30,6 +30,9 @@ Optional Properties:
 
 - max-speed: Maximum PHY supported speed (10, 100, 1000...)
 
+- broken-turn-around: If set, indicates the PHY device does not correctly
+  release the turn around line low at the end of a MDIO transaction.
+
 Example:
 
 ethernet-phy@0 {
index 0c064485d1c2c47e3c84b2ab25fd524bf200ea33..fdc60db608291b7e1fd81c6a3d774ba9c9c77467 100644 (file)
@@ -68,6 +68,9 @@ static int of_mdiobus_register_phy(struct mii_bus *mdio, struct device_node *chi
                        phy->irq = mdio->irq[addr];
        }
 
+       if (of_property_read_bool(child, "broken-turn-around"))
+               mdio->phy_ignore_ta_mask |= 1 << addr;
+
        /* Associate the OF node with the device structure so it
         * can be looked up later */
        of_node_get(child);