diff options
Diffstat (limited to 'arch/arm/mach-s3c6400/include/mach/system.h')
-rw-r--r-- | arch/arm/mach-s3c6400/include/mach/system.h | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/arch/arm/mach-s3c6400/include/mach/system.h b/arch/arm/mach-s3c6400/include/mach/system.h index 652bbc403f0..3165f509780 100644 --- a/arch/arm/mach-s3c6400/include/mach/system.h +++ b/arch/arm/mach-s3c6400/include/mach/system.h @@ -11,9 +11,29 @@ #ifndef __ASM_ARCH_SYSTEM_H #define __ASM_ARCH_SYSTEM_H __FILE__ +#include <linux/io.h> +#include <mach/map.h> + +#include <plat/regs-sys.h> +#include <plat/regs-syscon-power.h> + static void arch_idle(void) { - /* nothing here yet */ + unsigned long flags; + u32 mode; + + /* ensure that if we execute the cpu idle sequence that we + * go into idle mode instead of powering off. */ + + local_irq_save(flags); + mode = __raw_readl(S3C64XX_PWR_CFG); + mode &= ~S3C64XX_PWRCFG_CFG_WFI_MASK; + mode |= S3C64XX_PWRCFG_CFG_WFI_IDLE; + __raw_writel(mode, S3C64XX_PWR_CFG); + + local_irq_restore(flags); + + cpu_do_idle(); } static void arch_reset(char mode) |