| b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | From 211c20a459a0fd4868ed22ecfc2b2186d9df6da0 Mon Sep 17 00:00:00 2001 |
| 2 | From: Joakim Zhang <qiangqing.zhang@nxp.com> |
| 3 | Date: Tue, 30 Jul 2019 14:43:25 +0800 |
| 4 | Subject: [PATCH] can: flexcan: add LPSR mode support for i.MX7D |
| 5 | |
| 6 | For i.MX7D LPSR mode, the controller will lost power and got the |
| 7 | configuration state lost after system resume back. |
| 8 | So we need to set pinctrl state again and re-start chip to do |
| 9 | re-configuration after resume. |
| 10 | |
| 11 | For wakeup case, it should not set pinctrl to sleep state by |
| 12 | pinctrl_pm_select_sleep_state. |
| 13 | For interface is not up before suspend case, we don't need |
| 14 | re-configure as it will be configured by user later by interface up. |
| 15 | |
| 16 | Signed-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 | |