aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmbresh K <ambresh@ti.com>2012-01-27 17:22:55 +0530
committerZiyann <jaraidaniel@gmail.com>2014-10-01 12:56:42 +0200
commitab8742e8ca0c1538fbc179ac158fa43a683d8e99 (patch)
tree6863cf5d0869b4ae150b94be4e2229298f601994
parentfd86c4bb1ecffd6b530e79b2cc7c5849091e8cb6 (diff)
downloadkernel_samsung_tuna-ab8742e8ca0c1538fbc179ac158fa43a683d8e99.zip
kernel_samsung_tuna-ab8742e8ca0c1538fbc179ac158fa43a683d8e99.tar.gz
kernel_samsung_tuna-ab8742e8ca0c1538fbc179ac158fa43a683d8e99.tar.bz2
Regulator: TWL6030: Unmask PREQ in MASK_TRANSITION.
Based on board configuration, unmask PREQ so that on de-assertion or assertion on PREQ{1,2,3} transition Executes ACT2SLP and SLP2ACT sleep sequence. By default APPs process group is unmasked, but can be overridden through board file using struct twl4030_power_data. Change-Id: Ib9f561c64210e5997865a4bf7a2203dca9a1d695 Signed-off-by: Ambresh K <ambresh@ti.com>
-rw-r--r--arch/arm/mach-omap2/omap_tps6236x.c11
-rw-r--r--drivers/mfd/twl6030-power.c21
-rw-r--r--include/linux/i2c/twl.h1
3 files changed, 22 insertions, 11 deletions
diff --git a/arch/arm/mach-omap2/omap_tps6236x.c b/arch/arm/mach-omap2/omap_tps6236x.c
index a1fe432..6598b58 100644
--- a/arch/arm/mach-omap2/omap_tps6236x.c
+++ b/arch/arm/mach-omap2/omap_tps6236x.c
@@ -70,11 +70,9 @@
#define TWL6030_REG_SYSEN_CFG_TRANS 0xB4
#define TWL6030_REG_VCORE3_CFG_GRP 0x5E
#define TWL6030_REG_VMEM_CFG_GRP 0x64
-#define TWL6030_REG_MSK_TRANSITION 0x20
#define TWL6030_BIT_APE_GRP BIT(0)
#define TWL6030_BIT_CON_GRP BIT(1)
#define TWL6030_BIT_MOD_GRP BIT(2)
-#define TWL6030_MSK_PREQ1 BIT(5)
#define TWL6030_MSK_SYSEN_OFF (0x3 << 4)
#define TWL6030_MSK_SYSEN_SLEEP (0x3 << 2)
#define TWL6030_MSK_SYSEN_ACTIVE (0x3 << 0)
@@ -289,15 +287,6 @@ static int __init omap4_twl_tps62361_enable(struct voltagedomain *voltdm)
/* if we have to work with TWL */
#ifdef CONFIG_TWL4030_CORE
-
- /* unmask PREQ transition Executes ACT2SLP and SLP2ACT sleep sequence */
- ret1 = _twl_i2c_rmw_u8(TWL6030_MODULE_ID0, TWL6030_MSK_PREQ1,
- 0x00, TWL6030_REG_MSK_TRANSITION);
- if (ret1) {
- pr_err("%s:Err:TWL6030: map APE PREQ1(%d)\n", __func__, ret1);
- ret = ret1;
- }
-
/* Setup SYSEN to be 1 on Active and 0 for sleep and OFF states */
ret1 = _twl_i2c_rmw_u8(TWL6030_MODULE_ID0, TWL6030_MSK_SYSEN_ACTIVE,
0x01, TWL6030_REG_SYSEN_CFG_TRANS);
diff --git a/drivers/mfd/twl6030-power.c b/drivers/mfd/twl6030-power.c
index 2bbea1a..84ea1b2 100644
--- a/drivers/mfd/twl6030-power.c
+++ b/drivers/mfd/twl6030-power.c
@@ -23,6 +23,7 @@
#include <asm/mach-types.h>
#define VREG_GRP 0
+#define MSK_TRANSITION_APP_SHIFT 0x5
static u8 dev_on_group;
@@ -124,6 +125,26 @@ static __init void twl6030_process_system_config(void)
grp |= (dev_on_group & DEV_GRP_P3) ? 0 : P3_GRP_6030;
dev_on_group = grp;
}
+
+ /*
+ * unmask PREQ transition Executes ACT2SLP and SLP2ACT sleep
+ * sequence
+ */
+ r = twl_i2c_read_u8(TWL_MODULE_PM_MASTER, &grp,
+ TWL6030_PM_MASTER_MSK_TRANSITION);
+ if (r) {
+ pr_err("%s: Error (%d) reading"
+ " TWL6030_MSK_TRANSITION\n", __func__, r);
+ return;
+ }
+
+ grp &= (dev_on_group << MSK_TRANSITION_APP_SHIFT);
+
+ r = twl_i2c_write_u8(TWL_MODULE_PM_MASTER, grp,
+ TWL6030_PM_MASTER_MSK_TRANSITION);
+ if (r)
+ pr_err("%s: Error (%d) writing to"
+ " TWL6030_MSK_TRANSITION\n", __func__, r);
}
}
diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
index eae3f01..bed388f 100644
--- a/include/linux/i2c/twl.h
+++ b/include/linux/i2c/twl.h
@@ -467,6 +467,7 @@ static inline int twl6030_mmc_card_detect(struct device *dev, int slot)
* TWL6030 PM Master module register offsets (use TWL_MODULE_PM_MASTER)
*/
+#define TWL6030_PM_MASTER_MSK_TRANSITION 0x01
#define TWL6030_VBATMIN_HI_THRESHOLD 0x05
/*