diff options
author | Tony Lindgren <tony@atomide.com> | 2012-06-25 10:41:17 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2012-06-25 10:41:17 -0400 |
commit | 9a17d88e0586bb7189655f8f99484a872a474626 (patch) | |
tree | 9e162e41ecdcef6c166b3b9378b2ff4c541d9555 /arch/arm/mach-omap2/pm34xx.c | |
parent | 6b16351acbd415e66ba16bf7d473ece1574cf0bc (diff) | |
parent | fafcdd53220f44d7ae2f06a9ce20c8d550df2d9b (diff) |
Merge tag 'omap-devel-c-for-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/pjw/omap-pending into devel-pm
Reimplement the OMAP PRCM I/O chain code. Needed for I/O wakeups to
work correctly.
Conflicts:
arch/arm/mach-omap2/prm2xxx_3xxx.c
Diffstat (limited to 'arch/arm/mach-omap2/pm34xx.c')
-rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 3a595e899724..e67d898433fb 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
@@ -72,33 +72,6 @@ static struct powerdomain *mpu_pwrdm, *neon_pwrdm; | |||
72 | static struct powerdomain *core_pwrdm, *per_pwrdm; | 72 | static struct powerdomain *core_pwrdm, *per_pwrdm; |
73 | static struct powerdomain *cam_pwrdm; | 73 | static struct powerdomain *cam_pwrdm; |
74 | 74 | ||
75 | static void omap3_enable_io_chain(void) | ||
76 | { | ||
77 | int timeout = 0; | ||
78 | |||
79 | omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, | ||
80 | PM_WKEN); | ||
81 | /* Do a readback to assure write has been done */ | ||
82 | omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN); | ||
83 | |||
84 | while (!(omap2_prm_read_mod_reg(WKUP_MOD, PM_WKEN) & | ||
85 | OMAP3430_ST_IO_CHAIN_MASK)) { | ||
86 | timeout++; | ||
87 | if (timeout > 1000) { | ||
88 | pr_err("Wake up daisy chain activation failed.\n"); | ||
89 | return; | ||
90 | } | ||
91 | omap2_prm_set_mod_reg_bits(OMAP3430_ST_IO_CHAIN_MASK, | ||
92 | WKUP_MOD, PM_WKEN); | ||
93 | } | ||
94 | } | ||
95 | |||
96 | static void omap3_disable_io_chain(void) | ||
97 | { | ||
98 | omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_CHAIN_MASK, WKUP_MOD, | ||
99 | PM_WKEN); | ||
100 | } | ||
101 | |||
102 | static void omap3_core_save_context(void) | 75 | static void omap3_core_save_context(void) |
103 | { | 76 | { |
104 | omap3_ctrl_save_padconf(); | 77 | omap3_ctrl_save_padconf(); |
@@ -299,13 +272,6 @@ void omap_sram_idle(void) | |||
299 | /* Enable IO-PAD and IO-CHAIN wakeups */ | 272 | /* Enable IO-PAD and IO-CHAIN wakeups */ |
300 | per_next_state = pwrdm_read_next_pwrst(per_pwrdm); | 273 | per_next_state = pwrdm_read_next_pwrst(per_pwrdm); |
301 | core_next_state = pwrdm_read_next_pwrst(core_pwrdm); | 274 | core_next_state = pwrdm_read_next_pwrst(core_pwrdm); |
302 | if (omap3_has_io_wakeup() && | ||
303 | (per_next_state < PWRDM_POWER_ON || | ||
304 | core_next_state < PWRDM_POWER_ON)) { | ||
305 | omap2_prm_set_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, PM_WKEN); | ||
306 | if (omap3_has_io_chain_ctrl()) | ||
307 | omap3_enable_io_chain(); | ||
308 | } | ||
309 | 275 | ||
310 | pwrdm_pre_transition(); | 276 | pwrdm_pre_transition(); |
311 | 277 | ||
@@ -378,16 +344,6 @@ void omap_sram_idle(void) | |||
378 | if (per_next_state < PWRDM_POWER_ON) | 344 | if (per_next_state < PWRDM_POWER_ON) |
379 | omap2_gpio_resume_after_idle(); | 345 | omap2_gpio_resume_after_idle(); |
380 | 346 | ||
381 | /* Disable IO-PAD and IO-CHAIN wakeup */ | ||
382 | if (omap3_has_io_wakeup() && | ||
383 | (per_next_state < PWRDM_POWER_ON || | ||
384 | core_next_state < PWRDM_POWER_ON)) { | ||
385 | omap2_prm_clear_mod_reg_bits(OMAP3430_EN_IO_MASK, WKUP_MOD, | ||
386 | PM_WKEN); | ||
387 | if (omap3_has_io_chain_ctrl()) | ||
388 | omap3_disable_io_chain(); | ||
389 | } | ||
390 | |||
391 | clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); | 347 | clkdm_allow_idle(mpu_pwrdm->pwrdm_clkdms[0]); |
392 | } | 348 | } |
393 | 349 | ||