Commit 0ba78b4a authored by Kunihiko Hayashi's avatar Kunihiko Hayashi Committed by David S. Miller
Browse files

net: ethernet: ave: Add suspend/resume support



This patch introduces suspend and resume functions to ave driver.

Signed-off-by: default avatarKunihiko Hayashi <hayashi.kunihiko@socionext.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent bd82233f
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -1734,6 +1734,49 @@ static int ave_remove(struct platform_device *pdev)
	return 0;
}

#ifdef CONFIG_PM_SLEEP
static int ave_suspend(struct device *dev)
{
	struct net_device *ndev = dev_get_drvdata(dev);
	struct ave_private *priv = netdev_priv(ndev);
	int ret = 0;

	if (netif_running(ndev)) {
		ret = ave_stop(ndev);
		netif_device_detach(ndev);
	}

	return ret;
}

static int ave_resume(struct device *dev)
{
	struct net_device *ndev = dev_get_drvdata(dev);
	struct ave_private *priv = netdev_priv(ndev);
	int ret = 0;

	ave_global_reset(ndev);

	if (ndev->phydev) {
		ret = phy_resume(ndev->phydev);
		if (ret)
			return ret;
	}

	if (netif_running(ndev)) {
		ret = ave_open(ndev);
		netif_device_attach(ndev);
	}

	return ret;
}

static SIMPLE_DEV_PM_OPS(ave_pm_ops, ave_suspend, ave_resume);
#define AVE_PM_OPS	(&ave_pm_ops)
#else
#define AVE_PM_OPS	NULL
#endif

static int ave_pro4_get_pinmode(struct ave_private *priv,
				phy_interface_t phy_mode, u32 arg)
{
@@ -1908,6 +1951,7 @@ static struct platform_driver ave_driver = {
	.remove = ave_remove,
	.driver	= {
		.name = "ave",
		.pm   = AVE_PM_OPS,
		.of_match_table	= of_ave_match,
	},
};