diff options
Diffstat (limited to 'arch/powerpc/platforms/52xx/lite5200_pm.c')
| -rw-r--r-- | arch/powerpc/platforms/52xx/lite5200_pm.c | 34 | 
1 files changed, 22 insertions, 12 deletions
diff --git a/arch/powerpc/platforms/52xx/lite5200_pm.c b/arch/powerpc/platforms/52xx/lite5200_pm.c index f26afcd4175..ffa14aff524 100644 --- a/arch/powerpc/platforms/52xx/lite5200_pm.c +++ b/arch/powerpc/platforms/52xx/lite5200_pm.c @@ -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;  }  |