Commit d88ecb37 authored by Heiko Schocher's avatar Heiko Schocher Committed by David S. Miller

net: phy: smsc: disable energy detect mode

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: default avatarHeiko Schocher <hs@denx.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9e42f715
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;
};
};
...@@ -43,16 +43,25 @@ static int smsc_phy_ack_interrupt(struct phy_device *phydev) ...@@ -43,16 +43,25 @@ static int smsc_phy_ack_interrupt(struct phy_device *phydev)
static int smsc_phy_config_init(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 rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);
int enable_energy = 1;
if (rc < 0) if (rc < 0)
return rc; return rc;
/* Enable energy detect mode for this SMSC Transceivers */ if (of_find_property(of_node, "smsc,disable-energy-detect", &len))
rc = phy_write(phydev, MII_LAN83C185_CTRL_STATUS, enable_energy = 0;
rc | MII_LAN83C185_EDPWRDOWN);
if (rc < 0) if (enable_energy) {
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;
}
return smsc_phy_ack_interrupt(phydev); return smsc_phy_ack_interrupt(phydev);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment