diff options
author | Nicolas Ferre <nicolas.ferre@atmel.com> | 2012-07-03 19:14:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-07-09 03:03:06 -0400 |
commit | 03fc4721cd96753696a988a2ba563f9f08ad4e9f (patch) | |
tree | e02851168b70a9fa22d7bc9186688387031a3028 /drivers | |
parent | ed1062772531b6e1029fa4ca62dc8d61f6d53d1c (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.c | 13 |
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); |