]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/mach-omap2/pm34xx.c
OMAP3: PM: enable gptimer12 as a wakeup source
[linux-2.6-omap-h63xx.git] / arch / arm / mach-omap2 / pm34xx.c
index da098d24d133f3ddc09477bbe690b0499f564365..8e3c257f1235b422f770cb567cf360be50232028 100644 (file)
@@ -239,8 +239,13 @@ static int set_pwrdm_state(struct powerdomain *pwrdm, u32 state)
        if (pwrdm == NULL || IS_ERR(pwrdm))
                return -EINVAL;
 
-       cur_state = pwrdm_read_next_pwrst(pwrdm);
+       while (!(pwrdm->pwrsts & (1 << state))) {
+               if (state == PWRDM_POWER_OFF)
+                       return ret;
+               state--;
+       }
 
+       cur_state = pwrdm_read_next_pwrst(pwrdm);
        if (cur_state == state)
                return ret;
 
@@ -314,7 +319,7 @@ restore:
        list_for_each_entry(pwrst, &pwrst_list, node) {
                set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state);
                state = pwrdm_read_prev_pwrst(pwrst->pwrdm);
-               if (state != pwrst->next_state) {
+               if (state > pwrst->next_state) {
                        printk(KERN_INFO "Powerdomain (%s) didn't enter "
                               "target state %d\n",
                               pwrst->pwrdm->name, pwrst->next_state);
@@ -476,9 +481,8 @@ static void __init prcm_setup_regs(void)
         * Set all plls to autoidle. This is needed until autoidle is
         * enabled by clockfw
         */
-       cm_write_mod_reg(1 << OMAP3430_CLKTRCTRL_IVA2_SHIFT,
-                        OMAP3430_IVA2_MOD,
-                        CM_AUTOIDLE2);
+       cm_write_mod_reg(1 << OMAP3430_AUTO_IVA2_DPLL_SHIFT,
+                        OMAP3430_IVA2_MOD, CM_AUTOIDLE2);
        cm_write_mod_reg(1 << OMAP3430_AUTO_MPU_DPLL_SHIFT,
                         MPU_MOD,
                         CM_AUTOIDLE2);
@@ -501,10 +505,12 @@ static void __init prcm_setup_regs(void)
                             OMAP3_PRM_CLKSRC_CTRL_OFFSET);
 
        /* setup wakup source */
-       prm_write_mod_reg(OMAP3430_EN_IO | OMAP3430_EN_GPIO1 | OMAP3430_EN_GPT1,
+       prm_write_mod_reg(OMAP3430_EN_IO | OMAP3430_EN_GPIO1 |
+                         OMAP3430_EN_GPT1 | OMAP3430_EN_GPT12,
                          WKUP_MOD, PM_WKEN);
        /* No need to write EN_IO, that is always enabled */
-       prm_write_mod_reg(OMAP3430_EN_GPIO1 | OMAP3430_EN_GPT1,
+       prm_write_mod_reg(OMAP3430_EN_GPIO1 | OMAP3430_EN_GPT1 |
+                         OMAP3430_EN_GPT12,
                          WKUP_MOD, OMAP3430_PM_MPUGRPSEL);
        /* For some reason IO doesn't generate wakeup event even if
         * it is selected to mpu wakeup goup */