summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBengt Jonsson <bengt.g.jonsson@stericsson.com>2011-11-14 09:13:47 +0100
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 10:59:18 +0200
commitccf2d594242c7d4dff89f977db81222d2d72a5a2 (patch)
tree34a5965591adcfe2fe57cb149b63a6d8442a6596
parent7437492204841a589742e686f326e15c818748e5 (diff)
arm: u8500: Activate regulator_suspend/resume
ST-Ericsson Linux next: - ST-Ericsson ID: 374223 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: Ifb0243ee71b16fb1fc8c17ac8f594b871daf791a Signed-off-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/37698 Reviewed-by: QABUILD Reviewed-by: Mattias NILSSON <mattias.i.nilsson@stericsson.com> Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
-rw-r--r--arch/arm/mach-ux500/pm/suspend.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/arm/mach-ux500/pm/suspend.c b/arch/arm/mach-ux500/pm/suspend.c
index 3a044831351..3a6437e421b 100644
--- a/arch/arm/mach-ux500/pm/suspend.c
+++ b/arch/arm/mach-ux500/pm/suspend.c
@@ -12,6 +12,7 @@
#include <linux/suspend.h>
#include <linux/mfd/dbx500-prcmu.h>
#include <linux/gpio/nomadik.h>
+#include <linux/regulator/machine.h>
#include <linux/regulator/ab8500-debug.h>
#include <linux/regulator/dbx500-prcmu.h>
#include <linux/mfd/dbx500-prcmu.h>
@@ -24,6 +25,8 @@
static void (*pins_suspend_force)(void);
static void (*pins_suspend_force_mux)(void);
+static suspend_state_t suspend_state = PM_SUSPEND_ON;
+
void suspend_set_pins_force_fn(void (*force)(void), void (*force_mux)(void))
{
pins_suspend_force = force;
@@ -194,10 +197,22 @@ static int ux500_suspend_valid(suspend_state_t state)
return state == PM_SUSPEND_MEM || state == PM_SUSPEND_STANDBY;
}
+static int ux500_suspend_prepare(void)
+{
+ int ret;
+
+ ret = regulator_suspend_prepare(suspend_state);
+ if (ret < 0)
+ return ret;
+
+ return 0;
+}
+
static int ux500_suspend_prepare_late(void)
{
/* ESRAM to retention instead of OFF until ROM is fixed */
(void) prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET);
+
ab8500_regulator_debug_force();
ux500_regulator_suspend_debug();
return 0;
@@ -210,10 +225,16 @@ static void ux500_suspend_wake(void)
(void) prcmu_config_esram0_deep_sleep(ESRAM0_DEEP_SLEEP_STATE_RET);
}
+static void ux500_suspend_finish(void)
+{
+ (void)regulator_suspend_finish();
+}
+
static int ux500_suspend_begin(suspend_state_t state)
{
(void) prcmu_qos_update_requirement(PRCMU_QOS_ARM_OPP,
"suspend", 125);
+ suspend_state = state;
return ux500_suspend_dbg_begin(state);
}
@@ -221,13 +242,16 @@ static void ux500_suspend_end(void)
{
(void) prcmu_qos_update_requirement(PRCMU_QOS_ARM_OPP,
"suspend", 25);
+ suspend_state = PM_SUSPEND_ON;
}
static struct platform_suspend_ops ux500_suspend_ops = {
.enter = ux500_suspend_enter,
.valid = ux500_suspend_valid,
+ .prepare = ux500_suspend_prepare,
.prepare_late = ux500_suspend_prepare_late,
.wake = ux500_suspend_wake,
+ .finish = ux500_suspend_finish,
.begin = ux500_suspend_begin,
.end = ux500_suspend_end,
};