aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator/tps65910-regulator.c
diff options
context:
space:
mode:
authorLaxman Dewangan <ldewangan@nvidia.com>2012-03-07 07:51:49 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-03-11 16:49:28 -0400
commitf30b0716feaedc0cf432ed8eca82c46104d64c0d (patch)
treed4be15e8c029675c2de11b5cf64069d6ed50f6ca /drivers/regulator/tps65910-regulator.c
parent844775ef987aaf09a1ddea668f9acd17f9548062 (diff)
regulator: tps65910: Sleep off rails when ext sleep configured
Keep the rails OFF in sleep mode only when the rails are controlled by external sleep control. The devices tps65910 and tps65911, both has the sleep input. The tps65911's sleep input is not same as tps65910's EN3 and hence taking care of SLEEP input as separate external sleep control input. Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers/regulator/tps65910-regulator.c')
-rw-r--r--drivers/regulator/tps65910-regulator.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
index 15b5f1ec17b7..b0533c111571 100644
--- a/drivers/regulator/tps65910-regulator.c
+++ b/drivers/regulator/tps65910-regulator.c
@@ -28,7 +28,8 @@
28#define TPS65910_SUPPLY_STATE_ENABLED 0x1 28#define TPS65910_SUPPLY_STATE_ENABLED 0x1
29#define EXT_SLEEP_CONTROL (TPS65910_SLEEP_CONTROL_EXT_INPUT_EN1 | \ 29#define EXT_SLEEP_CONTROL (TPS65910_SLEEP_CONTROL_EXT_INPUT_EN1 | \
30 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2 | \ 30 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2 | \
31 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3) 31 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3 | \
32 TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP)
32 33
33/* supported VIO voltages in milivolts */ 34/* supported VIO voltages in milivolts */
34static const u16 VIO_VSEL_table[] = { 35static const u16 VIO_VSEL_table[] = {
@@ -922,6 +923,8 @@ static int tps65910_set_ext_sleep_config(struct tps65910_reg *pmic,
922 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2) != 0); 923 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2) != 0);
923 en_count += ((ext_sleep_config & 924 en_count += ((ext_sleep_config &
924 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3) != 0); 925 TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3) != 0);
926 en_count += ((ext_sleep_config &
927 TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP) != 0);
925 if (en_count > 1) { 928 if (en_count > 1) {
926 dev_err(mfd->dev, 929 dev_err(mfd->dev,
927 "External sleep control flag is not proper\n"); 930 "External sleep control flag is not proper\n");
@@ -1018,12 +1021,18 @@ static int tps65910_set_ext_sleep_config(struct tps65910_reg *pmic,
1018 1021
1019 ret = tps65910_clear_bits(mfd, 1022 ret = tps65910_clear_bits(mfd,
1020 TPS65910_SLEEP_KEEP_LDO_ON + regoffs, bit_pos); 1023 TPS65910_SLEEP_KEEP_LDO_ON + regoffs, bit_pos);
1021 if (!ret) 1024 if (!ret) {
1022 ret = tps65910_set_bits(mfd, 1025 if (ext_sleep_config & TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP)
1023 TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos); 1026 ret = tps65910_set_bits(mfd,
1027 TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
1028 else
1029 ret = tps65910_clear_bits(mfd,
1030 TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
1031 }
1024 if (ret < 0) 1032 if (ret < 0)
1025 dev_err(mfd->dev, 1033 dev_err(mfd->dev,
1026 "Error in configuring SLEEP register\n"); 1034 "Error in configuring SLEEP register\n");
1035
1027 return ret; 1036 return ret;
1028} 1037}
1029 1038