diff options
Diffstat (limited to 'arch/arm/mach-pxa/pxa27x.c')
-rw-r--r-- | arch/arm/mach-pxa/pxa27x.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index 7e863afefb53..aa3c3b2ab75e 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c | |||
@@ -120,6 +120,38 @@ EXPORT_SYMBOL(get_clk_frequency_khz); | |||
120 | EXPORT_SYMBOL(get_memclk_frequency_10khz); | 120 | EXPORT_SYMBOL(get_memclk_frequency_10khz); |
121 | EXPORT_SYMBOL(get_lcdclk_frequency_10khz); | 121 | EXPORT_SYMBOL(get_lcdclk_frequency_10khz); |
122 | 122 | ||
123 | int pxa_cpu_pm_prepare(suspend_state_t state) | ||
124 | { | ||
125 | switch (state) { | ||
126 | case PM_SUSPEND_MEM: | ||
127 | return 0; | ||
128 | default: | ||
129 | return -EINVAL; | ||
130 | } | ||
131 | } | ||
132 | |||
133 | void pxa_cpu_pm_enter(suspend_state_t state) | ||
134 | { | ||
135 | extern void pxa_cpu_standby(void); | ||
136 | extern void pxa_cpu_suspend(unsigned int); | ||
137 | extern void pxa_cpu_resume(void); | ||
138 | |||
139 | CKEN = CKEN22_MEMC | CKEN9_OSTIMER; | ||
140 | |||
141 | /* ensure voltage-change sequencer not initiated, which hangs */ | ||
142 | PCFR &= ~PCFR_FVC; | ||
143 | |||
144 | /* Clear edge-detect status register. */ | ||
145 | PEDR = 0xDF12FE1B; | ||
146 | |||
147 | switch (state) { | ||
148 | case PM_SUSPEND_MEM: | ||
149 | /* set resume return address */ | ||
150 | PSPR = virt_to_phys(pxa_cpu_resume); | ||
151 | pxa_cpu_suspend(3); | ||
152 | break; | ||
153 | } | ||
154 | } | ||
123 | 155 | ||
124 | /* | 156 | /* |
125 | * device registration specific to PXA27x. | 157 | * device registration specific to PXA27x. |