summaryrefslogtreecommitdiff
path: root/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c')
-rw-r--r--cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c66
1 files changed, 64 insertions, 2 deletions
diff --git a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
index 51a728a9d7..9119cbc7f6 100644
--- a/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
+++ b/cleopatre/linux-2.6.25.10-spc300/drivers/net/arm/synop3504.c
@@ -1633,6 +1633,66 @@ static int synop3504_init(struct net_device *dev)
return 0;
}// synop3504_init
+#ifdef CONFIG_PM
+
+/**
+ * Suspend Synop3504 interface.
+ * \param pdev platform device
+ * \param state target suspend state
+ * \return error code
+ */
+static int synop3504_suspend(struct platform_device *pdev, pm_message_t mesg)
+{
+ struct net_device *dev = platform_get_drvdata(pdev);
+ struct net_priv *priv = NULL;
+ Synopsys *synop = NULL;
+
+ priv = netdev_priv(dev);
+ if(priv == NULL)
+ return -1;
+ synop = &priv->synop;
+ if(synop == NULL)
+ return -1;
+
+ netif_device_detach(dev);
+
+ SynopsysSuspendClk(synop);
+
+ return 0;
+}
+
+/**
+ * Resume Synop3504 interface.
+ * \param pdev platform device
+ * \return error code
+ */
+static int synop3504_resume(struct platform_device *pdev)
+{
+ struct net_device *dev = platform_get_drvdata(pdev);
+ struct net_priv *priv = NULL;
+ Synopsys *synop = NULL;
+ struct phy_device *phydev = NULL;
+
+ priv = netdev_priv(dev);
+ if(priv == NULL)
+ return -1;
+ synop = &priv->synop;
+ if(synop == NULL)
+ return -1;
+ phydev = priv->phydev;
+ if (phydev == NULL)
+ return -1;
+
+ SynopsysResumeClk(synop);
+ SynopsysSetMiiClkCap(synop, phydev->speed);
+
+ netif_device_attach(dev);
+
+ return 0;
+}
+
+#endif /* CONFIG_PM */
+
/**
* Number of devices registered
*/
@@ -1854,8 +1914,10 @@ static struct platform_driver synop3504_eth_driver = {
.name = "synopsys3504",
.owner = THIS_MODULE,
},
- .suspend = NULL,
- .resume = NULL,
+#ifdef CONFIG_PM
+ .suspend = synop3504_suspend,
+ .resume = synop3504_resume,
+#endif
.remove = __exit_p(synop3504_module_remove),
};