diff options
author | Ambresh K <ambresh@ti.com> | 2012-01-27 17:22:55 +0530 |
---|---|---|
committer | Ziyann <jaraidaniel@gmail.com> | 2014-10-01 12:56:42 +0200 |
commit | ab8742e8ca0c1538fbc179ac158fa43a683d8e99 (patch) | |
tree | 6863cf5d0869b4ae150b94be4e2229298f601994 | |
parent | fd86c4bb1ecffd6b530e79b2cc7c5849091e8cb6 (diff) | |
download | kernel_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.c | 11 | ||||
-rw-r--r-- | drivers/mfd/twl6030-power.c | 21 | ||||
-rw-r--r-- | include/linux/i2c/twl.h | 1 |
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 /* |