aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2
diff options
context:
space:
mode:
authorMadhusudhan Chikkature <madhu.cr@ti.com>2011-09-08 21:03:04 -0500
committerNishanth Menon <nm@ti.com>2011-09-09 14:37:36 -0500
commitf6321c9389c1af2e5eeeb733e5ee992ac5719e6d (patch)
treede08d94c84eb163b147f51f8b99c221d419b1638 /arch/arm/mach-omap2
parent597d07ce35b0be4de32939b2e8a1d4967eb4e27b (diff)
downloadkernel_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.c21
-rw-r--r--arch/arm/mach-omap2/prm-regbits-44xx.h2
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