]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/mach-pxa/pm.c
Merge branch 'semaphore' of git://git.kernel.org/pub/scm/linux/kernel/git/willy/misc
[linux-2.6-omap-h63xx.git] / arch / arm / mach-pxa / pm.c
index b59a81a8e7d32d35d1ad9c3b1ce4cc833bf7eb7b..039194cbe477fd90eaacaa613dd87e1417040d65 100644 (file)
@@ -38,34 +38,37 @@ int pxa_pm_enter(suspend_state_t state)
                iwmmxt_task_disable(NULL);
 #endif
 
-       pxa_cpu_pm_fns->save(sleep_save);
+       /* skip registers saving for standby */
+       if (state != PM_SUSPEND_STANDBY) {
+               pxa_cpu_pm_fns->save(sleep_save);
+               /* before sleeping, calculate and save a checksum */
+               for (i = 0; i < pxa_cpu_pm_fns->save_size - 1; i++)
+                       sleep_save_checksum += sleep_save[i];
+       }
 
        /* Clear sleep reset status */
        RCSR = RCSR_SMR;
 
-       /* before sleeping, calculate and save a checksum */
-       for (i = 0; i < pxa_cpu_pm_fns->save_size - 1; i++)
-               sleep_save_checksum += sleep_save[i];
-
        /* *** go zzz *** */
        pxa_cpu_pm_fns->enter(state);
        cpu_init();
 
-       /* after sleeping, validate the checksum */
-       for (i = 0; i < pxa_cpu_pm_fns->save_size - 1; i++)
-               checksum += sleep_save[i];
+       if (state != PM_SUSPEND_STANDBY) {
+               /* after sleeping, validate the checksum */
+               for (i = 0; i < pxa_cpu_pm_fns->save_size - 1; i++)
+                       checksum += sleep_save[i];
 
-       /* if invalid, display message and wait for a hardware reset */
-       if (checksum != sleep_save_checksum) {
+               /* if invalid, display message and wait for a hardware reset */
+               if (checksum != sleep_save_checksum) {
 #ifdef CONFIG_ARCH_LUBBOCK
-               LUB_HEXLED = 0xbadbadc5;
+                       LUB_HEXLED = 0xbadbadc5;
 #endif
-               while (1)
-                       pxa_cpu_pm_fns->enter(state);
+                       while (1)
+                               pxa_cpu_pm_fns->enter(state);
+               }
+               pxa_cpu_pm_fns->restore(sleep_save);
        }
 
-       pxa_cpu_pm_fns->restore(sleep_save);
-
        pr_debug("*** made it back from resume\n");
 
        return 0;
@@ -86,7 +89,7 @@ static int pxa_pm_valid(suspend_state_t state)
        return -EINVAL;
 }
 
-static struct pm_ops pxa_pm_ops = {
+static struct platform_suspend_ops pxa_pm_ops = {
        .valid          = pxa_pm_valid,
        .enter          = pxa_pm_enter,
 };
@@ -104,7 +107,7 @@ static int __init pxa_pm_init(void)
                return -ENOMEM;
        }
 
-       pm_set_ops(&pxa_pm_ops);
+       suspend_set_ops(&pxa_pm_ops);
        return 0;
 }