Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b5e218d authored by Eric Bénard's avatar Eric Bénard Committed by Marc Kleine-Budde
Browse files

can: flexcan: add PM support



tested on an i.MX257

Signed-off-by: default avatarEric Bénard <eric@eukrea.com>
Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
parent 31a67102
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -1050,6 +1050,42 @@ static struct of_device_id flexcan_of_match[] = {
	{},
};

#ifdef CONFIG_PM
static int flexcan_suspend(struct platform_device *pdev, pm_message_t state)
{
	struct net_device *dev = platform_get_drvdata(pdev);
	struct flexcan_priv *priv = netdev_priv(dev);

	flexcan_chip_disable(priv);

	if (netif_running(dev)) {
		netif_stop_queue(dev);
		netif_device_detach(dev);
	}
	priv->can.state = CAN_STATE_SLEEPING;

	return 0;
}

static int flexcan_resume(struct platform_device *pdev)
{
	struct net_device *dev = platform_get_drvdata(pdev);
	struct flexcan_priv *priv = netdev_priv(dev);

	priv->can.state = CAN_STATE_ERROR_ACTIVE;
	if (netif_running(dev)) {
		netif_device_attach(dev);
		netif_start_queue(dev);
	}
	flexcan_chip_enable(priv);

	return 0;
}
#else
#define flexcan_suspend NULL
#define flexcan_resume NULL
#endif

static struct platform_driver flexcan_driver = {
	.driver = {
		.name = DRV_NAME,
@@ -1058,6 +1094,8 @@ static struct platform_driver flexcan_driver = {
	},
	.probe = flexcan_probe,
	.remove = __devexit_p(flexcan_remove),
	.suspend = flexcan_suspend,
	.resume = flexcan_resume,
};

module_platform_driver(flexcan_driver);