This source file includes following definitions.
- sa11x0_pm_enter
- sa11x0_pm_init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #include <linux/init.h>
26 #include <linux/io.h>
27 #include <linux/suspend.h>
28 #include <linux/errno.h>
29 #include <linux/time.h>
30
31 #include <mach/hardware.h>
32 #include <asm/memory.h>
33 #include <asm/suspend.h>
34 #include <asm/mach/time.h>
35
36 extern int sa1100_finish_suspend(unsigned long);
37
38 #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x
39 #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x]
40
41
42
43
44
45
46 enum { SLEEP_SAVE_GPDR, SLEEP_SAVE_GAFR,
47 SLEEP_SAVE_PPDR, SLEEP_SAVE_PPSR, SLEEP_SAVE_PPAR, SLEEP_SAVE_PSDR,
48
49 SLEEP_SAVE_Ser1SDCR0,
50
51 SLEEP_SAVE_COUNT
52 };
53
54
55 static int sa11x0_pm_enter(suspend_state_t state)
56 {
57 unsigned long gpio, sleep_save[SLEEP_SAVE_COUNT];
58
59 gpio = GPLR;
60
61
62 SAVE(GPDR);
63 SAVE(GAFR);
64
65 SAVE(PPDR);
66 SAVE(PPSR);
67 SAVE(PPAR);
68 SAVE(PSDR);
69
70 SAVE(Ser1SDCR0);
71
72
73 RCSR = RCSR_HWR | RCSR_SWR | RCSR_WDR | RCSR_SMR;
74
75
76 PSPR = __pa_symbol(cpu_resume);
77
78
79 cpu_suspend(0, sa1100_finish_suspend);
80
81
82
83
84 RCSR = RCSR_SMR;
85 PSPR = 0;
86
87
88
89
90
91 ICLR = 0;
92 ICCR = 1;
93 ICMR = 0;
94
95
96 RESTORE(GPDR);
97 RESTORE(GAFR);
98
99 RESTORE(PPDR);
100 RESTORE(PPSR);
101 RESTORE(PPAR);
102 RESTORE(PSDR);
103
104 RESTORE(Ser1SDCR0);
105
106 GPSR = gpio;
107 GPCR = ~gpio;
108
109
110
111
112 PSSR = PSSR_PH;
113
114 return 0;
115 }
116
117 static const struct platform_suspend_ops sa11x0_pm_ops = {
118 .enter = sa11x0_pm_enter,
119 .valid = suspend_valid_only_mem,
120 };
121
122 int __init sa11x0_pm_init(void)
123 {
124 suspend_set_ops(&sa11x0_pm_ops);
125 return 0;
126 }