summaryrefslogtreecommitdiff
path: root/drivers/net/can/flexcan.c
diff options
context:
space:
mode:
authorSanchayan Maity <maitysanchayan@gmail.com>2017-04-26 13:30:14 +0530
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2017-12-21 14:27:46 +0100
commitc1a2057ba5c48f67ce09b617181f353bc620446d (patch)
treef2c86f99635c678030521cfa96afab377124a28c /drivers/net/can/flexcan.c
parent7d9a3340afa8c6279eefe46be553953388f5fd7a (diff)
net: can: flexcan: Fix wakeup on CAN from suspend issue
Do not disable peripheral while entering suspend mode. Disabling the peripheral does not allow waking up from suspend on a CAN frame reception. Signed-off-by: Sanchayan Maity <maitysanchayan@gmail.com> Acked-by: Stefan Agner <stefan.agner@toradex.com> (cherry picked from commit f972815d2a4db5c93ded76bd11b660261e41f28c)
Diffstat (limited to 'drivers/net/can/flexcan.c')
-rw-r--r--drivers/net/can/flexcan.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
index 08f885441af9..cbf1cf3d6a1d 100644
--- a/drivers/net/can/flexcan.c
+++ b/drivers/net/can/flexcan.c
@@ -1378,6 +1378,7 @@ static int __maybe_unused flexcan_suspend(struct device *device)
{
struct net_device *dev = dev_get_drvdata(device);
struct flexcan_priv *priv = netdev_priv(dev);
+ int err = 0;
if (netif_running(dev)) {
netif_stop_queue(dev);
@@ -1390,7 +1391,12 @@ static int __maybe_unused flexcan_suspend(struct device *device)
enable_irq_wake(dev->irq);
flexcan_enter_stop_mode(priv);
} else {
- flexcan_chip_stop(dev);
+ err = flexcan_chip_disable(priv);
+ if (err) {
+ netif_device_attach(dev);
+ netif_start_queue(dev);
+ return err;
+ }
}
}
priv->can.state = CAN_STATE_SLEEPING;