diff options
author | Anton Vorontsov <anton@enomsg.org> | 2013-03-24 20:06:35 -0700 |
---|---|---|
committer | Anton Vorontsov <anton@enomsg.org> | 2013-03-24 20:06:35 -0700 |
commit | 6e997bb894beef128fcfe1679e0830f97dee6dc2 (patch) | |
tree | 078d95af4d30b5e3d5b1db18de215489b26e01ce /drivers/net/ethernet/freescale/fec.c | |
parent | c6cc9fc9d42ec82da2c770f0bef1488dc467f29c (diff) | |
parent | 92413a9bee1299cedcc0e5cfbfbc6b42496fb817 (diff) | |
download | op-kernel-dev-6e997bb894beef128fcfe1679e0830f97dee6dc2.zip op-kernel-dev-6e997bb894beef128fcfe1679e0830f97dee6dc2.tar.gz |
Merge branch 'urgent'
Conflicts:
drivers/power/pm2301_charger.c
Diffstat (limited to 'drivers/net/ethernet/freescale/fec.c')
-rw-r--r-- | drivers/net/ethernet/freescale/fec.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/drivers/net/ethernet/freescale/fec.c b/drivers/net/ethernet/freescale/fec.c index 069a155..e3f3937 100644 --- a/drivers/net/ethernet/freescale/fec.c +++ b/drivers/net/ethernet/freescale/fec.c @@ -934,24 +934,28 @@ static void fec_enet_adjust_link(struct net_device *ndev) goto spin_unlock; } - /* Duplex link change */ if (phy_dev->link) { - if (fep->full_duplex != phy_dev->duplex) { - fec_restart(ndev, phy_dev->duplex); - /* prevent unnecessary second fec_restart() below */ + if (!fep->link) { fep->link = phy_dev->link; status_change = 1; } - } - /* Link on or off change */ - if (phy_dev->link != fep->link) { - fep->link = phy_dev->link; - if (phy_dev->link) + if (fep->full_duplex != phy_dev->duplex) + status_change = 1; + + if (phy_dev->speed != fep->speed) { + fep->speed = phy_dev->speed; + status_change = 1; + } + + /* if any of the above changed restart the FEC */ + if (status_change) fec_restart(ndev, phy_dev->duplex); - else + } else { + if (fep->link) { fec_stop(ndev); - status_change = 1; + status_change = 1; + } } spin_unlock: @@ -1437,6 +1441,7 @@ fec_enet_close(struct net_device *ndev) struct fec_enet_private *fep = netdev_priv(ndev); /* Don't know what to do yet. */ + napi_disable(&fep->napi); fep->opened = 0; netif_stop_queue(ndev); fec_stop(ndev); |