aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorHaavard Skinnemoen <hskinnemoen@atmel.com>2008-03-04 13:39:29 +0100
committerHaavard Skinnemoen <haavard.skinnemoen@atmel.com>2008-07-02 11:05:00 +0200
commitc1f598fd71db6a971ee88311167c8003243ebff2 (patch)
tree6f2fbc8f691d9377dd9488b854b36b96d7797842 /drivers/net
parente1c609efbc0333840f2af2d875ca52ed8ee18587 (diff)
downloadkernel_samsung_tuna-c1f598fd71db6a971ee88311167c8003243ebff2.zip
kernel_samsung_tuna-c1f598fd71db6a971ee88311167c8003243ebff2.tar.gz
kernel_samsung_tuna-c1f598fd71db6a971ee88311167c8003243ebff2.tar.bz2
macb: Basic suspend/resume support
This implements suspend and resume callbacks for the macb driver. We may have to do some more to gracefully shut the MAC down, but this at least prevents the macb from waking the system when hooked up to a busy network. Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> Cc: Jeff Garzik <jeff@garzik.org> Cc: Patrice Vilchez <patrice.vilchez@rfo.atmel.com> Cc: Nicolas FERRE <nicolas.ferre@rfo.atmel.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/macb.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index 92dccd4..0a5745a 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -1277,8 +1277,45 @@ static int __exit macb_remove(struct platform_device *pdev)
return 0;
}
+#ifdef CONFIG_PM
+static int macb_suspend(struct platform_device *pdev, pm_message_t state)
+{
+ struct net_device *netdev = platform_get_drvdata(pdev);
+ struct macb *bp = netdev_priv(netdev);
+
+ netif_device_detach(netdev);
+
+#ifndef CONFIG_ARCH_AT91
+ clk_disable(bp->hclk);
+#endif
+ clk_disable(bp->pclk);
+
+ return 0;
+}
+
+static int macb_resume(struct platform_device *pdev)
+{
+ struct net_device *netdev = platform_get_drvdata(pdev);
+ struct macb *bp = netdev_priv(netdev);
+
+ clk_enable(bp->pclk);
+#ifndef CONFIG_ARCH_AT91
+ clk_enable(bp->hclk);
+#endif
+
+ netif_device_attach(netdev);
+
+ return 0;
+}
+#else
+#define macb_suspend NULL
+#define macb_resume NULL
+#endif
+
static struct platform_driver macb_driver = {
.remove = __exit_p(macb_remove),
+ .suspend = macb_suspend,
+ .resume = macb_resume,
.driver = {
.name = "macb",
.owner = THIS_MODULE,