|
@@ -1,5 +1,5 @@
|
|
|
#include <linux/init.h>
|
|
|
-#include <linux/pm.h>
|
|
|
+#include <linux/suspend.h>
|
|
|
#include <asm/io.h>
|
|
|
#include <asm/time.h>
|
|
|
#include <asm/mpc52xx.h>
|
|
@@ -18,6 +18,8 @@ static void __iomem *sram;
|
|
|
static const int sram_size = 0x4000; /* 16 kBytes */
|
|
|
static void __iomem *mbar;
|
|
|
|
|
|
+static suspend_state_t lite5200_pm_target_state;
|
|
|
+
|
|
|
static int lite5200_pm_valid(suspend_state_t state)
|
|
|
{
|
|
|
switch (state) {
|
|
@@ -29,13 +31,22 @@ static int lite5200_pm_valid(suspend_state_t state)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static int lite5200_pm_prepare(suspend_state_t state)
|
|
|
+static int lite5200_pm_set_target(suspend_state_t state)
|
|
|
+{
|
|
|
+ if (lite5200_pm_valid(state)) {
|
|
|
+ lite5200_pm_target_state = state;
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return -EINVAL;
|
|
|
+}
|
|
|
+
|
|
|
+static int lite5200_pm_prepare(void)
|
|
|
{
|
|
|
/* deep sleep? let mpc52xx code handle that */
|
|
|
- if (state == PM_SUSPEND_STANDBY)
|
|
|
- return mpc52xx_pm_prepare(state);
|
|
|
+ if (lite5200_pm_target_state == PM_SUSPEND_STANDBY)
|
|
|
+ return mpc52xx_pm_prepare();
|
|
|
|
|
|
- if (state != PM_SUSPEND_MEM)
|
|
|
+ if (lite5200_pm_target_state != PM_SUSPEND_MEM)
|
|
|
return -EINVAL;
|
|
|
|
|
|
/* map registers */
|
|
@@ -190,17 +201,16 @@ static int lite5200_pm_enter(suspend_state_t state)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int lite5200_pm_finish(suspend_state_t state)
|
|
|
+static void lite5200_pm_finish(void)
|
|
|
{
|
|
|
/* deep sleep? let mpc52xx code handle that */
|
|
|
- if (state == PM_SUSPEND_STANDBY) {
|
|
|
- return mpc52xx_pm_finish(state);
|
|
|
- }
|
|
|
- return 0;
|
|
|
+ if (lite5200_pm_target_state == PM_SUSPEND_STANDBY)
|
|
|
+ mpc52xx_pm_finish();
|
|
|
}
|
|
|
|
|
|
-static struct pm_ops lite5200_pm_ops = {
|
|
|
+static struct platform_suspend_ops lite5200_pm_ops = {
|
|
|
.valid = lite5200_pm_valid,
|
|
|
+ .set_target = lite5200_pm_set_target,
|
|
|
.prepare = lite5200_pm_prepare,
|
|
|
.enter = lite5200_pm_enter,
|
|
|
.finish = lite5200_pm_finish,
|
|
@@ -208,6 +218,6 @@ static struct pm_ops lite5200_pm_ops = {
|
|
|
|
|
|
int __init lite5200_pm_init(void)
|
|
|
{
|
|
|
- pm_set_ops(&lite5200_pm_ops);
|
|
|
+ suspend_set_ops(&lite5200_pm_ops);
|
|
|
return 0;
|
|
|
}
|