blob: b8349e6d6dd0de4a5eb21b64c6b8ec0844a2a48f [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001From 211c20a459a0fd4868ed22ecfc2b2186d9df6da0 Mon Sep 17 00:00:00 2001
2From: Joakim Zhang <qiangqing.zhang@nxp.com>
3Date: Tue, 30 Jul 2019 14:43:25 +0800
4Subject: [PATCH] can: flexcan: add LPSR mode support for i.MX7D
5
6For i.MX7D LPSR mode, the controller will lost power and got the
7configuration state lost after system resume back.
8So we need to set pinctrl state again and re-start chip to do
9re-configuration after resume.
10
11For wakeup case, it should not set pinctrl to sleep state by
12pinctrl_pm_select_sleep_state.
13For interface is not up before suspend case, we don't need
14re-configure as it will be configured by user later by interface up.
15
16Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
17---
18 drivers/net/can/flexcan.c | 21 ++++++++++++++-------
19 1 file changed, 14 insertions(+), 7 deletions(-)
20
21--- a/drivers/net/can/flexcan.c
22+++ b/drivers/net/can/flexcan.c
23@@ -26,6 +26,7 @@
24 #include <linux/platform_device.h>
25 #include <linux/pm_runtime.h>
26 #include <linux/regulator/consumer.h>
27+#include <linux/pinctrl/consumer.h>
28 #include <linux/regmap.h>
29
30 #define DRV_NAME "flexcan"
31@@ -1971,9 +1972,7 @@ static int __maybe_unused flexcan_suspen
32 if (err)
33 return err;
34 } else {
35- err = flexcan_chip_disable(priv);
36- if (err)
37- return err;
38+ flexcan_chip_stop(dev);
39 }
40 netif_stop_queue(dev);
41 netif_device_detach(dev);
42@@ -1999,7 +1998,9 @@ static int __maybe_unused flexcan_resume
43 if (err)
44 return err;
45 } else {
46- err = flexcan_chip_enable(priv);
47+ err = flexcan_chip_start(dev);
48+ if (err)
49+ return err;
50 }
51 }
52