OMAP3: AM3505/3517 do not have IO wakeup capability
authorstanley.miao <stanley.miao@windriver.com>
Mon, 2 Aug 2010 11:21:40 +0000 (14:21 +0300)
committerTony Lindgren <tony@atomide.com>
Mon, 2 Aug 2010 11:21:40 +0000 (14:21 +0300)
AM3505/3517 doesn't have IO wakeup capability, so we do not need to set
the bit OMAP3430_EN_IO and the bit OMAP3430_EN_IO_CHAIN in the register
PM_WKEN_WKUP when the system enters suspend state.

Tested on AM3517EVM and OMAP3530EVM.

Signed-off-by: Stanley.Miao <stanley.miao@windriver.com>
Acked-by: Kevin Hilman <khilman@deeprootsystems.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/id.c
arch/arm/mach-omap2/pm34xx.c
arch/arm/plat-omap/include/plat/cpu.h

index c7bf0e1c4d9c732ccf1748b14a9bfa6abb483ded..ccaa1ed8e0f189cc36ee1867f9d27803c8ff4cc6 100644 (file)
@@ -179,6 +179,8 @@ static void __init omap3_check_features(void)
        OMAP3_CHECK_FEATURE(status, ISP);
        if (cpu_is_omap3630())
                omap3_features |= OMAP3_HAS_192MHZ_CLK;
+       if (!cpu_is_omap3505() && !cpu_is_omap3517())
+               omap3_features |= OMAP3_HAS_IO_WAKEUP;
 
        /*
         * TODO: Get additional info (where applicable)
index b88737fd6cfe7a434f6254e81dad7f90d8e3cd1a..fb4994ad622ec469aaec34665a98af6250d29dc8 100644 (file)
@@ -385,8 +385,9 @@ void omap_sram_idle(void)
        /* Enable IO-PAD and IO-CHAIN wakeups */
        per_next_state = pwrdm_read_next_pwrst(per_pwrdm);
        core_next_state = pwrdm_read_next_pwrst(core_pwrdm);
-       if (per_next_state < PWRDM_POWER_ON ||
-                       core_next_state < PWRDM_POWER_ON) {
+       if (omap3_has_io_wakeup() && \
+                       (per_next_state < PWRDM_POWER_ON ||
+                       core_next_state < PWRDM_POWER_ON)) {
                prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN);
                omap3_enable_io_chain();
        }
@@ -479,7 +480,7 @@ void omap_sram_idle(void)
        }
 
        /* Disable IO-PAD and IO-CHAIN wakeup */
-       if (core_next_state < PWRDM_POWER_ON) {
+       if (omap3_has_io_wakeup() && core_next_state < PWRDM_POWER_ON) {
                prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN);
                omap3_disable_io_chain();
        }
index 75141742300cfaca52494c0b767160d57ad617de..aa2f4f079f573ec5a65b5e41e378b478fa279e95 100644 (file)
@@ -444,6 +444,7 @@ extern u32 omap3_features;
 #define OMAP3_HAS_NEON                 BIT(3)
 #define OMAP3_HAS_ISP                  BIT(4)
 #define OMAP3_HAS_192MHZ_CLK           BIT(5)
+#define OMAP3_HAS_IO_WAKEUP            BIT(6)
 
 #define OMAP3_HAS_FEATURE(feat,flag)                   \
 static inline unsigned int omap3_has_ ##feat(void)     \
@@ -457,5 +458,6 @@ OMAP3_HAS_FEATURE(iva, IVA)
 OMAP3_HAS_FEATURE(neon, NEON)
 OMAP3_HAS_FEATURE(isp, ISP)
 OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK)
+OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP)
 
 #endif