public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: phy: smsc: disable energy detect mode
@ 2015-10-13  5:13 Heiko Schocher
  2015-10-13 19:26 ` Florian Fainelli
  0 siblings, 1 reply; 6+ messages in thread
From: Heiko Schocher @ 2015-10-13  5:13 UTC (permalink / raw)
  To: linux-kernel
  Cc: Heiko Schocher, devicetree, netdev, Georg.Soffel,
	Florian Fainelli

On some boards the energy enable detect mode leads in
trouble with some switches, so make the enabling of
this mode configurable through DT.

Signed-off-by: Heiko Schocher <hs@denx.de>
---

 .../devicetree/bindings/net/smsc-lan87xx.txt       | 19 +++++++++++++++++
 drivers/net/phy/smsc.c                             | 24 +++++++++++++++++-----
 2 files changed, 38 insertions(+), 5 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/net/smsc-lan87xx.txt

diff --git a/Documentation/devicetree/bindings/net/smsc-lan87xx.txt b/Documentation/devicetree/bindings/net/smsc-lan87xx.txt
new file mode 100644
index 0000000..39aa1dc
--- /dev/null
+++ b/Documentation/devicetree/bindings/net/smsc-lan87xx.txt
@@ -0,0 +1,19 @@
+SMSC LAN87xx Ethernet PHY
+
+Some boards require special tuning values. Configure them
+through an Ethernet OF device node.
+
+Optional properties:
+
+- disable-energy-detect:
+  If set, do not enable energy detect mode for the SMSC phy.
+  default: enable energy detect mode
+
+Examples:
+
+	/* Attach to an Ethernet device with autodetected PHY */
+	&cpsw_emac0 {
+		phy_id = <&davinci_mdio>, <0>;
+		phy-mode = "mii";
+		disable-energy-detect;
+	};
diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c
index 70b0895..f90fbf3 100644
--- a/drivers/net/phy/smsc.c
+++ b/drivers/net/phy/smsc.c
@@ -43,16 +43,30 @@ static int smsc_phy_ack_interrupt(struct phy_device *phydev)
 
 static int smsc_phy_config_init(struct phy_device *phydev)
 {
+#ifdef CONFIG_OF
+	int len;
+	struct device *dev = &phydev->dev;
+	struct device_node *of_node = dev->of_node;
+#endif
 	int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
+	int enable_energy = 1;
 
 	if (rc < 0)
 		return rc;
 
-	/* Enable energy detect mode for this SMSC Transceivers */
-	rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS,
-		       rc | MII_LAN83C185_EDPWRDOWN);
-	if (rc < 0)
-		return rc;
+#ifdef CONFIG_OF
+	if (!of_node && dev->parent->of_node)
+		of_node = dev->parent->of_node;
+	if (of_find_property(of_node, "disable-energy-detect", &len))
+		enable_energy = 0;
+#endif
+	if (enable_energy) {
+		/* Enable energy detect mode for this SMSC Transceivers */
+		rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS,
+			       rc | MII_LAN83C185_EDPWRDOWN);
+		if (rc < 0)
+			return rc;
+	}
 
 	return smsc_phy_ack_interrupt(phydev);
 }
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-10-17  3:42 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-13  5:13 [PATCH] net: phy: smsc: disable energy detect mode Heiko Schocher
2015-10-13 19:26 ` Florian Fainelli
2015-10-14  4:17   ` Heiko Schocher
2015-10-16  5:37     ` Heiko Schocher
2015-10-16 16:27     ` Florian Fainelli
2015-10-17  3:42       ` Heiko Schocher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox