Merge branch 'stable/generic' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
[pandora-kernel.git] / arch / arm / mach-omap2 / pm34xx.c
index 0fae3d6..5b323f2 100644 (file)
@@ -32,7 +32,7 @@
 
 #include <plat/sram.h>
 #include "clockdomain.h"
-#include <plat/powerdomain.h>
+#include "powerdomain.h"
 #include <plat/serial.h>
 #include <plat/sdrc.h>
 #include <plat/prcm.h>
@@ -133,16 +133,7 @@ static void omap3_disable_io_chain(void)
 
 static void omap3_core_save_context(void)
 {
-       u32 control_padconf_off;
-
-       /* Save the padconf registers */
-       control_padconf_off = omap_ctrl_readl(OMAP343X_CONTROL_PADCONF_OFF);
-       control_padconf_off |= START_PADCONF_SAVE;
-       omap_ctrl_writel(control_padconf_off, OMAP343X_CONTROL_PADCONF_OFF);
-       /* wait for the save to complete */
-       while (!(omap_ctrl_readl(OMAP343X_CONTROL_GENERAL_PURPOSE_STATUS)
-                       & PADCONF_SAVE_DONE))
-               udelay(1);
+       omap3_ctrl_save_padconf();
 
        /*
         * Force write last pad into memory, as this can fail in some
@@ -360,6 +351,7 @@ void omap_sram_idle(void)
        int mpu_next_state = PWRDM_POWER_ON;
        int per_next_state = PWRDM_POWER_ON;
        int core_next_state = PWRDM_POWER_ON;
+       int per_going_off;
        int core_prev_state, per_prev_state;
        u32 sdrc_pwr = 0;
 
@@ -411,9 +403,10 @@ void omap_sram_idle(void)
 
        /* PER */
        if (per_next_state < PWRDM_POWER_ON) {
+               per_going_off = (per_next_state == PWRDM_POWER_OFF) ? 1 : 0;
                omap_uart_prepare_idle(2);
                omap_uart_prepare_idle(3);
-               omap2_gpio_prepare_for_idle(per_next_state);
+               omap2_gpio_prepare_for_idle(per_going_off);
                if (per_next_state == PWRDM_POWER_OFF)
                                omap3_per_save_context();
        }