phy: micrel: Disable auto negotiation on startup
authorAlexandre Belloni <alexandre.belloni@free-electrons.com>
Fri, 26 Feb 2016 18:18:23 +0000 (19:18 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 1 Mar 2016 21:52:09 +0000 (16:52 -0500)
commit99f81afc139c6edd14d77a91ee91685a414a1c66
tree9a5f0505739358bb9ad908e4d7a959849199cf00
parentf5aba91d7f186cba84af966a741a0346de603cd4
phy: micrel: Disable auto negotiation on startup

Disable auto negotiation on init to properly detect an already plugged
cable at boot.

At boot, when the phy is started, it is in the PHY_UP state.
However, if a cable is plugged at boot, because auto negociation is already
enabled at the time we get the first interrupt, the phy is already running.
But the state machine then switches from PHY_UP to PHY_AN and calls
phy_start_aneg(). phy_start_aneg() will not do anything because aneg is
already enabled on the phy. It will then wait for a interrupt before going
further. This interrupt will never happen unless the cable is unplugged and
then replugged.

It was working properly before 321beec5047a (net: phy: Use interrupts when
available in NOLINK state) because switching to NOLINK meant starting
polling the phy, even if IRQ were enabled.

Fixes: 321beec5047a (net: phy: Use interrupts when available in NOLINK state)
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/micrel.c