diff options
Diffstat (limited to 'arch/arm/mach-s5pv210/pm.c')
| -rw-r--r-- | arch/arm/mach-s5pv210/pm.c | 45 | 
1 files changed, 23 insertions, 22 deletions
diff --git a/arch/arm/mach-s5pv210/pm.c b/arch/arm/mach-s5pv210/pm.c index 549d7924fd4..3cf3f9c8ddd 100644 --- a/arch/arm/mach-s5pv210/pm.c +++ b/arch/arm/mach-s5pv210/pm.c @@ -16,11 +16,11 @@  #include <linux/init.h>  #include <linux/suspend.h> +#include <linux/syscore_ops.h>  #include <linux/io.h>  #include <plat/cpu.h>  #include <plat/pm.h> -#include <plat/regs-timer.h>  #include <mach/regs-irq.h>  #include <mach/regs-clock.h> @@ -76,18 +76,9 @@ static struct sleep_save s5pv210_core_save[] = {  	/* Clock ETC */  	SAVE_ITEM(S5P_CLK_OUT),  	SAVE_ITEM(S5P_MDNIE_SEL), - -	/* PWM Register */ -	SAVE_ITEM(S3C2410_TCFG0), -	SAVE_ITEM(S3C2410_TCFG1), -	SAVE_ITEM(S3C64XX_TINT_CSTAT), -	SAVE_ITEM(S3C2410_TCON), -	SAVE_ITEM(S3C2410_TCNTB(0)), -	SAVE_ITEM(S3C2410_TCMPB(0)), -	SAVE_ITEM(S3C2410_TCNTO(0)),  }; -void s5pv210_cpu_suspend(void) +static int s5pv210_cpu_suspend(unsigned long arg)  {  	unsigned long tmp; @@ -103,8 +94,8 @@ void s5pv210_cpu_suspend(void)  	    "mcr p15, 0, %0, c7, c10, 4\n\t"  	    "wfi" : : "r" (tmp)); -	/* we should never get past here */ -	panic("sleep resumed to originator?"); +	pr_info("Failed to suspend the system\n"); +	return 1; /* Aborting suspend */  }  static void s5pv210_pm_prepare(void) @@ -132,7 +123,7 @@ static void s5pv210_pm_prepare(void)  	s3c_pm_do_save(s5pv210_core_save, ARRAY_SIZE(s5pv210_core_save));  } -static int s5pv210_pm_add(struct sys_device *sysdev) +static int s5pv210_pm_add(struct device *dev, struct subsys_interface *sif)  {  	pm_cpu_prep = s5pv210_pm_prepare;  	pm_cpu_sleep = s5pv210_cpu_suspend; @@ -140,7 +131,19 @@ static int s5pv210_pm_add(struct sys_device *sysdev)  	return 0;  } -static int s5pv210_pm_resume(struct sys_device *dev) +static struct subsys_interface s5pv210_pm_interface = { +	.name		= "s5pv210_pm", +	.subsys		= &s5pv210_subsys, +	.add_dev	= s5pv210_pm_add, +}; + +static __init int s5pv210_pm_drvinit(void) +{ +	return subsys_interface_register(&s5pv210_pm_interface); +} +arch_initcall(s5pv210_pm_drvinit); + +static void s5pv210_pm_resume(void)  {  	u32 tmp; @@ -150,17 +153,15 @@ static int s5pv210_pm_resume(struct sys_device *dev)  	__raw_writel(tmp , S5P_OTHERS);  	s3c_pm_do_restore_core(s5pv210_core_save, ARRAY_SIZE(s5pv210_core_save)); - -	return 0;  } -static struct sysdev_driver s5pv210_pm_driver = { -	.add		= s5pv210_pm_add, +static struct syscore_ops s5pv210_pm_syscore_ops = {  	.resume		= s5pv210_pm_resume,  }; -static __init int s5pv210_pm_drvinit(void) +static __init int s5pv210_pm_syscore_init(void)  { -	return sysdev_driver_register(&s5pv210_sysclass, &s5pv210_pm_driver); +	register_syscore_ops(&s5pv210_pm_syscore_ops); +	return 0;  } -arch_initcall(s5pv210_pm_drvinit); +arch_initcall(s5pv210_pm_syscore_init);  | 
