summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSanchayan Maity <maitysanchayan@gmail.com>2017-04-26 13:30:14 +0530
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-12-09 23:11:15 +0100
commitec10bb3e4cd97063a18e3511eecaae52a0f66178 (patch)
tree4207b518703b5a5ca24d63549d4bf8a2dda133a9 /drivers
parent1cc1de90c2f7dff19fb51eb908e77d7bae495a20 (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')
-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 27958bbe9312..241f03ff0007 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;