|
@@ -2947,6 +2947,36 @@ static int sh_eth_drv_remove(struct platform_device *pdev)
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_PM
|
|
|
+#ifdef CONFIG_PM_SLEEP
|
|
|
+static int sh_eth_suspend(struct device *dev)
|
|
|
+{
|
|
|
+ struct net_device *ndev = dev_get_drvdata(dev);
|
|
|
+ int ret = 0;
|
|
|
+
|
|
|
+ if (netif_running(ndev)) {
|
|
|
+ netif_device_detach(ndev);
|
|
|
+ ret = sh_eth_close(ndev);
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static int sh_eth_resume(struct device *dev)
|
|
|
+{
|
|
|
+ struct net_device *ndev = dev_get_drvdata(dev);
|
|
|
+ int ret = 0;
|
|
|
+
|
|
|
+ if (netif_running(ndev)) {
|
|
|
+ ret = sh_eth_open(ndev);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+ netif_device_attach(ndev);
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
static int sh_eth_runtime_nop(struct device *dev)
|
|
|
{
|
|
|
/* Runtime PM callback shared between ->runtime_suspend()
|
|
@@ -2960,8 +2990,8 @@ static int sh_eth_runtime_nop(struct device *dev)
|
|
|
}
|
|
|
|
|
|
static const struct dev_pm_ops sh_eth_dev_pm_ops = {
|
|
|
- .runtime_suspend = sh_eth_runtime_nop,
|
|
|
- .runtime_resume = sh_eth_runtime_nop,
|
|
|
+ SET_SYSTEM_SLEEP_PM_OPS(sh_eth_suspend, sh_eth_resume)
|
|
|
+ SET_RUNTIME_PM_OPS(sh_eth_runtime_nop, sh_eth_runtime_nop, NULL)
|
|
|
};
|
|
|
#define SH_ETH_PM_OPS (&sh_eth_dev_pm_ops)
|
|
|
#else
|