diff options
author | Madhusudhan Chikkature <madhu.cr@ti.com> | 2011-09-08 21:03:04 -0500 |
---|---|---|
committer | Nishanth Menon <nm@ti.com> | 2011-09-09 14:37:36 -0500 |
commit | f6321c9389c1af2e5eeeb733e5ee992ac5719e6d (patch) | |
tree | de08d94c84eb163b147f51f8b99c221d419b1638 /arch/arm/mach-omap2 | |
parent | 597d07ce35b0be4de32939b2e8a1d4967eb4e27b (diff) | |
download | kernel_samsung_tuna-f6321c9389c1af2e5eeeb733e5ee992ac5719e6d.zip kernel_samsung_tuna-f6321c9389c1af2e5eeeb733e5ee992ac5719e6d.tar.gz kernel_samsung_tuna-f6321c9389c1af2e5eeeb733e5ee992ac5719e6d.tar.bz2 |
OMAP4: PM: Add Non-EMIF I/O isolation for device OFF mode
Extend the non-EMIF I/O isolation before going to OFF mode
on OMAP4 devices. This removes the glitch noticed on the
GPIO lines coming out of OFF-mode.
Change-Id: Idf79e4bad93b9679efc19d026f7404c8e23297d8
[wwang@ti.com: ported forward from K35 to K3.0]
Signed-off-by: Wenbiao Wang <wwang@ti.com>
Signed-off-by: Madhusudhan Chikkature <madhu.cr@ti.com>
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r-- | arch/arm/mach-omap2/pm44xx.c | 21 | ||||
-rw-r--r-- | arch/arm/mach-omap2/prm-regbits-44xx.h | 2 |
2 files changed, 18 insertions, 5 deletions
diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c index 5a0862e..37a44a5 100644 --- a/arch/arm/mach-omap2/pm44xx.c +++ b/arch/arm/mach-omap2/pm44xx.c @@ -183,6 +183,11 @@ void omap4_enter_sleep(unsigned int cpu, unsigned int power_state, bool suspend) omap4_sar_overwrite(); omap4_cm_prepare_off(); omap4_dpll_prepare_off(); + + /* Extend Non-EMIF I/O isolation */ + omap4_prminst_rmw_inst_reg_bits(OMAP4430_ISOOVR_EXTEND_MASK, + OMAP4430_ISOOVR_EXTEND_MASK, OMAP4430_PRM_PARTITION, + OMAP4430_PRM_DEVICE_INST, OMAP4_PRM_IO_PMCTRL_OFFSET); } omap4_enter_lowpower(cpu, power_state); @@ -219,13 +224,19 @@ abort_device_off: omap4_ldo_trim_configure(); } - /* - * GPIO: since we have put_synced clks, we need to resume - * even if OFF was not really achieved - */ - if (omap4_device_next_state_off()) + if (omap4_device_next_state_off()) { + /* + * GPIO: since we have put_synced clks, we need to resume + * even if OFF was not really achieved + */ omap2_gpio_resume_after_idle(); + /* Disable the extension of Non-EMIF I/O isolation */ + omap4_prminst_rmw_inst_reg_bits(OMAP4430_ISOOVR_EXTEND_MASK, + 0, OMAP4430_PRM_PARTITION, + OMAP4430_PRM_DEVICE_INST, OMAP4_PRM_IO_PMCTRL_OFFSET); + } + if (mpu_next_state < PWRDM_POWER_INACTIVE) { omap_vc_set_auto_trans(mpu_voltdm, OMAP_VC_CHANNEL_AUTO_TRANSITION_DISABLE); diff --git a/arch/arm/mach-omap2/prm-regbits-44xx.h b/arch/arm/mach-omap2/prm-regbits-44xx.h index d9b8320..b76cfd6 100644 --- a/arch/arm/mach-omap2/prm-regbits-44xx.h +++ b/arch/arm/mach-omap2/prm-regbits-44xx.h @@ -402,6 +402,8 @@ /* Used by PRM_IO_PMCTRL */ #define OMAP4430_GLOBAL_WUEN_SHIFT 16 #define OMAP4430_GLOBAL_WUEN_MASK (1 << 16) +#define OMAP4430_ISOOVR_EXTEND_SHIFT 4 +#define OMAP4430_ISOOVR_EXTEND_MASK (1 << 4) /* Used by PRM_VC_CFG_I2C_MODE */ #define OMAP4430_HSMCODE_SHIFT 0 |