12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- From 211c20a459a0fd4868ed22ecfc2b2186d9df6da0 Mon Sep 17 00:00:00 2001
- From: Joakim Zhang <[email protected]>
- 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 <[email protected]>
- ---
- 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"
- @@ -1959,9 +1960,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);
- @@ -1987,7 +1986,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;
- }
- }
-
|