vserver 2.0 rc7
[linux-2.6.git] / arch / arm / mach-pxa / pxa27x.c
index 7e863af..893964f 100644 (file)
@@ -120,6 +120,42 @@ EXPORT_SYMBOL(get_clk_frequency_khz);
 EXPORT_SYMBOL(get_memclk_frequency_10khz);
 EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
 
+#ifdef CONFIG_PM
+
+int pxa_cpu_pm_prepare(suspend_state_t state)
+{
+       switch (state) {
+       case PM_SUSPEND_MEM:
+               return 0;
+       default:
+               return -EINVAL;
+       }
+}
+
+void pxa_cpu_pm_enter(suspend_state_t state)
+{
+       extern void pxa_cpu_standby(void);
+       extern void pxa_cpu_suspend(unsigned int);
+       extern void pxa_cpu_resume(void);
+
+       CKEN = CKEN22_MEMC | CKEN9_OSTIMER;
+
+       /* ensure voltage-change sequencer not initiated, which hangs */
+       PCFR &= ~PCFR_FVC;
+
+       /* Clear edge-detect status register. */
+       PEDR = 0xDF12FE1B;
+
+       switch (state) {
+       case PM_SUSPEND_MEM:
+               /* set resume return address */
+               PSPR = virt_to_phys(pxa_cpu_resume);
+               pxa_cpu_suspend(3);
+               break;
+       }
+}
+
+#endif
 
 /*
  * device registration specific to PXA27x.