summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/regulator/max77663-regulator.c14
-rw-r--r--include/linux/regulator/max77663-regulator.h3
2 files changed, 13 insertions, 4 deletions
diff --git a/drivers/regulator/max77663-regulator.c b/drivers/regulator/max77663-regulator.c
index 68b13dec1a66..c961ab05d2b0 100644
--- a/drivers/regulator/max77663-regulator.c
+++ b/drivers/regulator/max77663-regulator.c
@@ -448,7 +448,8 @@ static int max77663_regulator_enable(struct regulator_dev *rdev)
{
struct max77663_regulator *reg = rdev_get_drvdata(rdev);
struct max77663_regulator_platform_data *pdata = _to_pdata(reg);
- int power_mode = POWER_MODE_NORMAL;
+ int power_mode = (pdata->flags & GLPM_ENABLE) ?
+ POWER_MODE_GLPM : POWER_MODE_NORMAL;
if (reg->fps_src != FPS_SRC_NONE) {
dev_dbg(&rdev->dev, "enable: Regulator %s using %s\n",
@@ -523,11 +524,13 @@ static int max77663_regulator_set_mode(struct regulator_dev *rdev,
unsigned int mode)
{
struct max77663_regulator *reg = rdev_get_drvdata(rdev);
+ struct max77663_regulator_platform_data *pdata = _to_pdata(reg);
u8 power_mode;
int ret;
if (mode == REGULATOR_MODE_NORMAL)
- power_mode = POWER_MODE_NORMAL;
+ power_mode = (pdata->flags & GLPM_ENABLE) ?
+ POWER_MODE_GLPM : POWER_MODE_NORMAL;
else if (mode == REGULATOR_MODE_STANDBY)
power_mode = POWER_MODE_LPM;
else
@@ -619,7 +622,9 @@ static int max77663_regulator_preinit(struct max77663_regulator *reg)
* from SRC_0, SRC_1 and SRC_2. */
if ((reg->fps_src != FPS_SRC_NONE) && (pdata->fps_src == FPS_SRC_NONE)
&& (reg->power_mode != POWER_MODE_NORMAL)) {
- ret = max77663_regulator_set_power_mode(reg, POWER_MODE_NORMAL);
+ val = (pdata->flags & GLPM_ENABLE) ?
+ POWER_MODE_GLPM : POWER_MODE_NORMAL;
+ ret = max77663_regulator_set_power_mode(reg, val);
if (ret < 0) {
dev_err(reg->dev, "preinit: Failed to "
"set power mode to POWER_MODE_NORMAL\n");
@@ -655,7 +660,8 @@ static int max77663_regulator_preinit(struct max77663_regulator *reg)
}
if (pdata->init_enable)
- val = POWER_MODE_NORMAL;
+ val = (pdata->flags & GLPM_ENABLE) ?
+ POWER_MODE_GLPM : POWER_MODE_NORMAL;
else
val = POWER_MODE_DISABLE;
diff --git a/include/linux/regulator/max77663-regulator.h b/include/linux/regulator/max77663-regulator.h
index 093ca42d4ca7..49ffee212f56 100644
--- a/include/linux/regulator/max77663-regulator.h
+++ b/include/linux/regulator/max77663-regulator.h
@@ -101,6 +101,9 @@ enum max77663_regulator_fps_src {
/* SD Failling Slew Rate Active-Discharge Mode */
#define SD_FSRADE_DISABLE 0x40
+/* Group Low-Power Mode */
+#define GLPM_ENABLE 0x80
+
struct max77663_regulator_fps_cfg {
enum max77663_regulator_fps_src src;
enum max77663_regulator_fps_en_src en_src;