diff options
| -rw-r--r-- | drivers/regulator/max77686.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/drivers/regulator/max77686.c b/drivers/regulator/max77686.c index 0d103ba1d462..db01c09e98f5 100644 --- a/drivers/regulator/max77686.c +++ b/drivers/regulator/max77686.c | |||
| @@ -45,6 +45,23 @@ | |||
| 45 | #define MAX77686_DVS_MINUV 600000 | 45 | #define MAX77686_DVS_MINUV 600000 |
| 46 | #define MAX77686_DVS_UVSTEP 12500 | 46 | #define MAX77686_DVS_UVSTEP 12500 |
| 47 | 47 | ||
| 48 | /* | ||
| 49 | * Values used for configuring LDOs and bucks. | ||
| 50 | * Forcing low power mode: LDO1, 3-5, 9, 13, 17-26 | ||
| 51 | */ | ||
| 52 | #define MAX77686_LDO_LOWPOWER 0x1 | ||
| 53 | /* | ||
| 54 | * On/off controlled by PWRREQ: | ||
| 55 | * - LDO2, 6-8, 10-12, 14-16 | ||
| 56 | * - buck[1234] | ||
| 57 | */ | ||
| 58 | #define MAX77686_OFF_PWRREQ 0x1 | ||
| 59 | /* Low power mode controlled by PWRREQ: All LDOs */ | ||
| 60 | #define MAX77686_LDO_LOWPOWER_PWRREQ 0x2 | ||
| 61 | /* Forcing low power mode: buck[234] */ | ||
| 62 | #define MAX77686_BUCK_LOWPOWER 0x2 | ||
| 63 | #define MAX77686_NORMAL 0x3 | ||
| 64 | |||
| 48 | #define MAX77686_OPMODE_SHIFT 6 | 65 | #define MAX77686_OPMODE_SHIFT 6 |
| 49 | #define MAX77686_OPMODE_BUCK234_SHIFT 4 | 66 | #define MAX77686_OPMODE_BUCK234_SHIFT 4 |
| 50 | #define MAX77686_OPMODE_MASK 0x3 | 67 | #define MAX77686_OPMODE_MASK 0x3 |
| @@ -76,9 +93,9 @@ static int max77686_buck_set_suspend_disable(struct regulator_dev *rdev) | |||
| 76 | int ret, id = rdev_get_id(rdev); | 93 | int ret, id = rdev_get_id(rdev); |
| 77 | 94 | ||
| 78 | if (id == MAX77686_BUCK1) | 95 | if (id == MAX77686_BUCK1) |
| 79 | val = 0x1; | 96 | val = MAX77686_OFF_PWRREQ; |
| 80 | else | 97 | else |
| 81 | val = 0x1 << MAX77686_OPMODE_BUCK234_SHIFT; | 98 | val = MAX77686_OFF_PWRREQ << MAX77686_OPMODE_BUCK234_SHIFT; |
| 82 | 99 | ||
| 83 | ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, | 100 | ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, |
| 84 | rdev->desc->enable_mask, val); | 101 | rdev->desc->enable_mask, val); |
| @@ -103,10 +120,10 @@ static int max77686_set_suspend_mode(struct regulator_dev *rdev, | |||
| 103 | 120 | ||
| 104 | switch (mode) { | 121 | switch (mode) { |
| 105 | case REGULATOR_MODE_IDLE: /* ON in LP Mode */ | 122 | case REGULATOR_MODE_IDLE: /* ON in LP Mode */ |
| 106 | val = 0x2 << MAX77686_OPMODE_SHIFT; | 123 | val = MAX77686_LDO_LOWPOWER_PWRREQ << MAX77686_OPMODE_SHIFT; |
| 107 | break; | 124 | break; |
| 108 | case REGULATOR_MODE_NORMAL: /* ON in Normal Mode */ | 125 | case REGULATOR_MODE_NORMAL: /* ON in Normal Mode */ |
| 109 | val = 0x3 << MAX77686_OPMODE_SHIFT; | 126 | val = MAX77686_NORMAL << MAX77686_OPMODE_SHIFT; |
| 110 | break; | 127 | break; |
| 111 | default: | 128 | default: |
| 112 | pr_warn("%s: regulator_suspend_mode : 0x%x not supported\n", | 129 | pr_warn("%s: regulator_suspend_mode : 0x%x not supported\n", |
| @@ -133,13 +150,13 @@ static int max77686_ldo_set_suspend_mode(struct regulator_dev *rdev, | |||
| 133 | 150 | ||
| 134 | switch (mode) { | 151 | switch (mode) { |
| 135 | case REGULATOR_MODE_STANDBY: /* switch off */ | 152 | case REGULATOR_MODE_STANDBY: /* switch off */ |
| 136 | val = 0x1 << MAX77686_OPMODE_SHIFT; | 153 | val = MAX77686_OFF_PWRREQ << MAX77686_OPMODE_SHIFT; |
| 137 | break; | 154 | break; |
| 138 | case REGULATOR_MODE_IDLE: /* ON in LP Mode */ | 155 | case REGULATOR_MODE_IDLE: /* ON in LP Mode */ |
| 139 | val = 0x2 << MAX77686_OPMODE_SHIFT; | 156 | val = MAX77686_LDO_LOWPOWER_PWRREQ << MAX77686_OPMODE_SHIFT; |
| 140 | break; | 157 | break; |
| 141 | case REGULATOR_MODE_NORMAL: /* ON in Normal Mode */ | 158 | case REGULATOR_MODE_NORMAL: /* ON in Normal Mode */ |
| 142 | val = 0x3 << MAX77686_OPMODE_SHIFT; | 159 | val = MAX77686_NORMAL << MAX77686_OPMODE_SHIFT; |
| 143 | break; | 160 | break; |
| 144 | default: | 161 | default: |
| 145 | pr_warn("%s: regulator_suspend_mode : 0x%x not supported\n", | 162 | pr_warn("%s: regulator_suspend_mode : 0x%x not supported\n", |
