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. |
