xref: /openbmc/linux/arch/arm/mach-shmobile/suspend.c (revision c3dada1894de46139c21352a1000c0fd02d308d5)
1*c3dada18SMagnus Damm /*
2*c3dada18SMagnus Damm  * Suspend-to-RAM support code for SH-Mobile ARM
3*c3dada18SMagnus Damm  *
4*c3dada18SMagnus Damm  *  Copyright (C) 2011 Magnus Damm
5*c3dada18SMagnus Damm  *
6*c3dada18SMagnus Damm  * This file is subject to the terms and conditions of the GNU General Public
7*c3dada18SMagnus Damm  * License.  See the file "COPYING" in the main directory of this archive
8*c3dada18SMagnus Damm  * for more details.
9*c3dada18SMagnus Damm  */
10*c3dada18SMagnus Damm 
11*c3dada18SMagnus Damm #include <linux/pm.h>
12*c3dada18SMagnus Damm #include <linux/suspend.h>
13*c3dada18SMagnus Damm #include <linux/module.h>
14*c3dada18SMagnus Damm #include <linux/err.h>
15*c3dada18SMagnus Damm #include <asm/system.h>
16*c3dada18SMagnus Damm #include <asm/io.h>
17*c3dada18SMagnus Damm 
18*c3dada18SMagnus Damm static int shmobile_suspend_default_enter(suspend_state_t suspend_state)
19*c3dada18SMagnus Damm {
20*c3dada18SMagnus Damm 	cpu_do_idle();
21*c3dada18SMagnus Damm 	return 0;
22*c3dada18SMagnus Damm }
23*c3dada18SMagnus Damm 
24*c3dada18SMagnus Damm static int shmobile_suspend_begin(suspend_state_t state)
25*c3dada18SMagnus Damm {
26*c3dada18SMagnus Damm 	disable_hlt();
27*c3dada18SMagnus Damm 	return 0;
28*c3dada18SMagnus Damm }
29*c3dada18SMagnus Damm 
30*c3dada18SMagnus Damm static void shmobile_suspend_end(void)
31*c3dada18SMagnus Damm {
32*c3dada18SMagnus Damm 	enable_hlt();
33*c3dada18SMagnus Damm }
34*c3dada18SMagnus Damm 
35*c3dada18SMagnus Damm struct platform_suspend_ops shmobile_suspend_ops = {
36*c3dada18SMagnus Damm 	.begin		= shmobile_suspend_begin,
37*c3dada18SMagnus Damm 	.end		= shmobile_suspend_end,
38*c3dada18SMagnus Damm 	.enter		= shmobile_suspend_default_enter,
39*c3dada18SMagnus Damm 	.valid		= suspend_valid_only_mem,
40*c3dada18SMagnus Damm };
41*c3dada18SMagnus Damm 
42*c3dada18SMagnus Damm static int __init shmobile_suspend_init(void)
43*c3dada18SMagnus Damm {
44*c3dada18SMagnus Damm 	suspend_set_ops(&shmobile_suspend_ops);
45*c3dada18SMagnus Damm 	return 0;
46*c3dada18SMagnus Damm }
47*c3dada18SMagnus Damm late_initcall(shmobile_suspend_init);
48