Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / arm / mach-pxa / pxa27x.c
index 893964f..3baa708 100644 (file)
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/pm.h>
-#include <linux/device.h>
+#include <linux/platform_device.h>
 
 #include <asm/hardware.h>
 #include <asm/irq.h>
 #include <asm/arch/pxa-regs.h>
+#include <asm/arch/ohci.h>
 
 #include "generic.h"
 
@@ -43,7 +44,7 @@ unsigned int get_clk_frequency_khz( int info)
 
        /* Read clkcfg register: it has turbo, b, half-turbo (and f) */
        asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg) );
-       t  = clkcfg & (1 << 1);
+       t  = clkcfg & (1 << 0);
        ht = clkcfg & (1 << 2);
        b  = clkcfg & (1 << 3);
 
@@ -126,6 +127,7 @@ int pxa_cpu_pm_prepare(suspend_state_t state)
 {
        switch (state) {
        case PM_SUSPEND_MEM:
+       case PM_SUSPEND_STANDBY:
                return 0;
        default:
                return -EINVAL;
@@ -138,7 +140,10 @@ void pxa_cpu_pm_enter(suspend_state_t state)
        extern void pxa_cpu_suspend(unsigned int);
        extern void pxa_cpu_resume(void);
 
-       CKEN = CKEN22_MEMC | CKEN9_OSTIMER;
+       if (state == PM_SUSPEND_STANDBY)
+               CKEN = CKEN22_MEMC | CKEN9_OSTIMER | CKEN16_LCD |CKEN0_PWM0;
+       else
+               CKEN = CKEN22_MEMC | CKEN9_OSTIMER;
 
        /* ensure voltage-change sequencer not initiated, which hangs */
        PCFR &= ~PCFR_FVC;
@@ -147,10 +152,13 @@ void pxa_cpu_pm_enter(suspend_state_t state)
        PEDR = 0xDF12FE1B;
 
        switch (state) {
+       case PM_SUSPEND_STANDBY:
+               pxa_cpu_standby();
+               break;
        case PM_SUSPEND_MEM:
                /* set resume return address */
                PSPR = virt_to_phys(pxa_cpu_resume);
-               pxa_cpu_suspend(3);
+               pxa_cpu_suspend(PWRMODE_SLEEP);
                break;
        }
 }
@@ -187,6 +195,11 @@ static struct platform_device ohci_device = {
        .resource       = pxa27x_ohci_resources,
 };
 
+void __init pxa_set_ohci_info(struct pxaohci_platform_data *info)
+{
+       ohci_device.dev.platform_data = info;
+}
+
 static struct platform_device *devices[] __initdata = {
        &ohci_device,
 };