| From 211c20a459a0fd4868ed22ecfc2b2186d9df6da0 Mon Sep 17 00:00:00 2001 |
| From: Joakim Zhang <qiangqing.zhang@nxp.com> |
| Date: Tue, 30 Jul 2019 14:43:25 +0800 |
| Subject: [PATCH] can: flexcan: add LPSR mode support for i.MX7D |
| |
| For i.MX7D LPSR mode, the controller will lost power and got the |
| configuration state lost after system resume back. |
| So we need to set pinctrl state again and re-start chip to do |
| re-configuration after resume. |
| |
| For wakeup case, it should not set pinctrl to sleep state by |
| pinctrl_pm_select_sleep_state. |
| For interface is not up before suspend case, we don't need |
| re-configure as it will be configured by user later by interface up. |
| |
| Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com> |
| --- |
| drivers/net/can/flexcan.c | 21 ++++++++++++++------- |
| 1 file changed, 14 insertions(+), 7 deletions(-) |
| |
| --- a/drivers/net/can/flexcan.c |
| +++ b/drivers/net/can/flexcan.c |
| @@ -26,6 +26,7 @@ |
| #include <linux/platform_device.h> |
| #include <linux/pm_runtime.h> |
| #include <linux/regulator/consumer.h> |
| +#include <linux/pinctrl/consumer.h> |
| #include <linux/regmap.h> |
| |
| #define DRV_NAME "flexcan" |
| @@ -1971,9 +1972,7 @@ static int __maybe_unused flexcan_suspen |
| if (err) |
| return err; |
| } else { |
| - err = flexcan_chip_disable(priv); |
| - if (err) |
| - return err; |
| + flexcan_chip_stop(dev); |
| } |
| netif_stop_queue(dev); |
| netif_device_detach(dev); |
| @@ -1999,7 +1998,9 @@ static int __maybe_unused flexcan_resume |
| if (err) |
| return err; |
| } else { |
| - err = flexcan_chip_enable(priv); |
| + err = flexcan_chip_start(dev); |
| + if (err) |
| + return err; |
| } |
| } |
| |