Skip to content

Commit

Permalink
net: phy: smsc: disable energy detect mode
Browse files Browse the repository at this point in the history
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>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Heiko Schocher authored and David S. Miller committed Oct 21, 2015
1 parent 9e42f71 commit d88ecb3
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 5 deletions.
24 changes: 24 additions & 0 deletions Documentation/devicetree/bindings/net/smsc-lan87xx.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
SMSC LAN87xx Ethernet PHY

Some boards require special tuning values. Configure them
through an Ethernet OF device node.

Optional properties:

- smsc,disable-energy-detect:
If set, do not enable energy detect mode for the SMSC phy.
default: enable energy detect mode

Examples:
smsc phy with disabled energy detect mode on an am335x based board.
&davinci_mdio {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&davinci_mdio_default>;
pinctrl-1 = <&davinci_mdio_sleep>;
status = "okay";

ethernetphy0: ethernet-phy@0 {
reg = <0>;
smsc,disable-energy-detect;
};
};
19 changes: 14 additions & 5 deletions drivers/net/phy/smsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,25 @@ static int smsc_phy_ack_interrupt(struct phy_device *phydev)

static int smsc_phy_config_init(struct phy_device *phydev)
{
int __maybe_unused len;
struct device *dev __maybe_unused = &phydev->dev;
struct device_node *of_node __maybe_unused = dev->of_node;
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;
if (of_find_property(of_node, "smsc,disable-energy-detect", &len))
enable_energy = 0;

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);
}
Expand Down

0 comments on commit d88ecb3

Please sign in to comment.