aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorNicolas Ferre <nicolas.ferre@atmel.com>2012-07-03 19:14:13 -0400
committerDavid S. Miller <davem@davemloft.net>2012-07-09 03:03:06 -0400
commit03fc4721cd96753696a988a2ba563f9f08ad4e9f (patch)
treee02851168b70a9fa22d7bc9186688387031a3028 /drivers
parented1062772531b6e1029fa4ca62dc8d61f6d53d1c (diff)
net/macb: manage carrier state with call to netif_carrier_{on|off}()
OFF carrier state is setup in probe() open() and suspend() functions. The carrier ON state is managed in macb_handle_link_change(). Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ethernet/cadence/macb.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 1466bc4e3dda..033064b7b576 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -179,13 +179,16 @@ static void macb_handle_link_change(struct net_device *dev)
179 spin_unlock_irqrestore(&bp->lock, flags); 179 spin_unlock_irqrestore(&bp->lock, flags);
180 180
181 if (status_change) { 181 if (status_change) {
182 if (phydev->link) 182 if (phydev->link) {
183 netif_carrier_on(dev);
183 netdev_info(dev, "link up (%d/%s)\n", 184 netdev_info(dev, "link up (%d/%s)\n",
184 phydev->speed, 185 phydev->speed,
185 phydev->duplex == DUPLEX_FULL ? 186 phydev->duplex == DUPLEX_FULL ?
186 "Full" : "Half"); 187 "Full" : "Half");
187 else 188 } else {
189 netif_carrier_off(dev);
188 netdev_info(dev, "link down\n"); 190 netdev_info(dev, "link down\n");
191 }
189 } 192 }
190} 193}
191 194
@@ -1033,6 +1036,9 @@ static int macb_open(struct net_device *dev)
1033 1036
1034 netdev_dbg(bp->dev, "open\n"); 1037 netdev_dbg(bp->dev, "open\n");
1035 1038
1039 /* carrier starts down */
1040 netif_carrier_off(dev);
1041
1036 /* if the phy is not yet register, retry later*/ 1042 /* if the phy is not yet register, retry later*/
1037 if (!bp->phy_dev) 1043 if (!bp->phy_dev)
1038 return -EAGAIN; 1044 return -EAGAIN;
@@ -1406,6 +1412,8 @@ static int __init macb_probe(struct platform_device *pdev)
1406 1412
1407 platform_set_drvdata(pdev, dev); 1413 platform_set_drvdata(pdev, dev);
1408 1414
1415 netif_carrier_off(dev);
1416
1409 netdev_info(dev, "Cadence %s at 0x%08lx irq %d (%pM)\n", 1417 netdev_info(dev, "Cadence %s at 0x%08lx irq %d (%pM)\n",
1410 macb_is_gem(bp) ? "GEM" : "MACB", dev->base_addr, 1418 macb_is_gem(bp) ? "GEM" : "MACB", dev->base_addr,
1411 dev->irq, dev->dev_addr); 1419 dev->irq, dev->dev_addr);
@@ -1469,6 +1477,7 @@ static int macb_suspend(struct platform_device *pdev, pm_message_t state)
1469 struct net_device *netdev = platform_get_drvdata(pdev); 1477 struct net_device *netdev = platform_get_drvdata(pdev);
1470 struct macb *bp = netdev_priv(netdev); 1478 struct macb *bp = netdev_priv(netdev);
1471 1479
1480 netif_carrier_off(netdev);
1472 netif_device_detach(netdev); 1481 netif_device_detach(netdev);
1473 1482
1474 clk_disable(bp->hclk); 1483 clk_disable(bp->hclk);