Move the setup of soc_pm.bu->suspended in platform_suspend::begin
function so that the PMC code in charge with clocks suspend/resume
to differentiate b/w standard PM mode and backup mode.

Signed-off-by: Claudiu Beznea <claudiu.bez...@microchip.com>
Reviewed-by: Alexandre Belloni <alexandre.bell...@bootlin.com>
---
 arch/arm/mach-at91/pm.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c
index e13ceef7ac9a..3742a1fb76db 100644
--- a/arch/arm/mach-at91/pm.c
+++ b/arch/arm/mach-at91/pm.c
@@ -214,6 +214,8 @@ static int at91_sam9x60_config_pmc_ws(void __iomem *pmc, 
u32 mode, u32 polarity)
  */
 static int at91_pm_begin(suspend_state_t state)
 {
+       int ret;
+
        switch (state) {
        case PM_SUSPEND_MEM:
                soc_pm.data.mode = soc_pm.data.suspend_mode;
@@ -227,7 +229,16 @@ static int at91_pm_begin(suspend_state_t state)
                soc_pm.data.mode = -1;
        }
 
-       return at91_pm_config_ws(soc_pm.data.mode, true);
+       ret = at91_pm_config_ws(soc_pm.data.mode, true);
+       if (ret)
+               return ret;
+
+       if (soc_pm.data.mode == AT91_PM_BACKUP)
+               soc_pm.bu->suspended = 1;
+       else if (soc_pm.bu)
+               soc_pm.bu->suspended = 0;
+
+       return 0;
 }
 
 /*
@@ -296,8 +307,6 @@ static int at91_suspend_finish(unsigned long val)
 static void at91_pm_suspend(suspend_state_t state)
 {
        if (soc_pm.data.mode == AT91_PM_BACKUP) {
-               soc_pm.bu->suspended = 1;
-
                cpu_suspend(0, at91_suspend_finish);
 
                /* The SRAM is lost between suspend cycles */
-- 
2.25.1

Reply via email to