diff options
author | Yangbo Lu <yangbo.lu@nxp.com> | 2020-04-10 10:47:05 +0800 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2020-05-07 12:53:06 +0200 |
commit | cddd4591404fb4c53dc0b3c0b15b942cdbed4356 (patch) | |
tree | 392c1179de46b0f804e3789edca19069b64e6b44 /target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch | |
parent | d1d2c0b5579ea4f69a42246c9318539d61ba1999 (diff) | |
download | upstream-cddd4591404fb4c53dc0b3c0b15b942cdbed4356.tar.gz upstream-cddd4591404fb4c53dc0b3c0b15b942cdbed4356.tar.bz2 upstream-cddd4591404fb4c53dc0b3c0b15b942cdbed4356.zip |
layerscape: add patches-5.4
Add patches for linux-5.4. The patches are from NXP LSDK-20.04 release
which was tagged LSDK-20.04-V5.4.
https://source.codeaurora.org/external/qoriq/qoriq-components/linux/
For boards LS1021A-IOT, and Traverse-LS1043 which are not involved in
LSDK, port the dts patches from 4.14.
The patches are sorted into the following categories:
301-arch-xxxx
302-dts-xxxx
303-core-xxxx
701-net-xxxx
801-audio-xxxx
802-can-xxxx
803-clock-xxxx
804-crypto-xxxx
805-display-xxxx
806-dma-xxxx
807-gpio-xxxx
808-i2c-xxxx
809-jailhouse-xxxx
810-keys-xxxx
811-kvm-xxxx
812-pcie-xxxx
813-pm-xxxx
814-qe-xxxx
815-sata-xxxx
816-sdhc-xxxx
817-spi-xxxx
818-thermal-xxxx
819-uart-xxxx
820-usb-xxxx
821-vfio-xxxx
Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
Diffstat (limited to 'target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch b/target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch new file mode 100644 index 0000000000..afb5557702 --- /dev/null +++ b/target/linux/layerscape/patches-5.4/802-can-0025-can-flexcan-add-LPSR-mode-support-for-i.MX7D.patch @@ -0,0 +1,93 @@ +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" +@@ -1920,7 +1921,7 @@ static int __maybe_unused flexcan_suspen + { + struct net_device *dev = dev_get_drvdata(device); + struct flexcan_priv *priv = netdev_priv(dev); +- int err = 0; ++ int err; + + if (netif_running(dev)) { + /* if wakeup is enabled, enter stop mode +@@ -1932,25 +1933,27 @@ static int __maybe_unused flexcan_suspen + if (err) + return err; + } else { +- err = flexcan_chip_disable(priv); ++ flexcan_chip_stop(dev); ++ ++ err = pm_runtime_force_suspend(device); + if (err) + return err; + +- err = pm_runtime_force_suspend(device); ++ pinctrl_pm_select_sleep_state(device); + } + netif_stop_queue(dev); + netif_device_detach(dev); + } + priv->can.state = CAN_STATE_SLEEPING; + +- return err; ++ return 0; + } + + static int __maybe_unused flexcan_resume(struct device *device) + { + struct net_device *dev = dev_get_drvdata(device); + struct flexcan_priv *priv = netdev_priv(dev); +- int err = 0; ++ int err; + + priv->can.state = CAN_STATE_ERROR_ACTIVE; + if (netif_running(dev)) { +@@ -1962,15 +1965,19 @@ static int __maybe_unused flexcan_resume + if (err) + return err; + } else { ++ pinctrl_pm_select_default_state(device); ++ + err = pm_runtime_force_resume(device); + if (err) + return err; + +- err = flexcan_chip_enable(priv); ++ err = flexcan_chip_start(dev); ++ if (err) ++ return err; + } + } + +- return err; ++ return 0; + } + + static int __maybe_unused flexcan_runtime_suspend(struct device *device) |