|
@@ -49,6 +49,8 @@
|
|
#define MAX77802_RAMP_RATE_MASK_4BIT 0xF0
|
|
#define MAX77802_RAMP_RATE_MASK_4BIT 0xF0
|
|
#define MAX77802_RAMP_RATE_SHIFT_4BIT 4
|
|
#define MAX77802_RAMP_RATE_SHIFT_4BIT 4
|
|
|
|
|
|
|
|
+#define MAX77802_OFF_PWRREQ 0x1
|
|
|
|
+
|
|
/* MAX77802 has two register formats: 2-bit and 4-bit */
|
|
/* MAX77802 has two register formats: 2-bit and 4-bit */
|
|
static const unsigned int ramp_table_77802_2bit[] = {
|
|
static const unsigned int ramp_table_77802_2bit[] = {
|
|
12500,
|
|
12500,
|
|
@@ -83,17 +85,16 @@ static int max77802_get_opmode_shift(int id)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Some BUCKS supports Normal[ON/OFF] mode during suspend
|
|
|
|
|
|
+/**
|
|
|
|
+ * max77802_set_suspend_disable - Disable the regulator during system suspend
|
|
|
|
+ * @rdev: regulator to mark as disabled
|
|
*
|
|
*
|
|
- * BUCK 1, 6, 2-4, 5, 7-10 (all)
|
|
|
|
- *
|
|
|
|
- * The other mode (0x02) will make PWRREQ switch between normal
|
|
|
|
- * and low power.
|
|
|
|
|
|
+ * All regulators expect LDO 1, 3, 20 and 21 support OFF by PWRREQ.
|
|
|
|
+ * Configure the regulator so the PMIC will turn it OFF during system suspend.
|
|
*/
|
|
*/
|
|
-static int max77802_buck_set_suspend_disable(struct regulator_dev *rdev)
|
|
|
|
|
|
+static int max77802_set_suspend_disable(struct regulator_dev *rdev)
|
|
{
|
|
{
|
|
- unsigned int val = MAX77802_OPMODE_STANDBY;
|
|
|
|
|
|
+ unsigned int val = MAX77802_OFF_PWRREQ;
|
|
struct max77802_regulator_prv *max77802 = rdev_get_drvdata(rdev);
|
|
struct max77802_regulator_prv *max77802 = rdev_get_drvdata(rdev);
|
|
int id = rdev_get_id(rdev);
|
|
int id = rdev_get_id(rdev);
|
|
int shift = max77802_get_opmode_shift(id);
|
|
int shift = max77802_get_opmode_shift(id);
|
|
@@ -178,6 +179,9 @@ static int max77802_enable(struct regulator_dev *rdev)
|
|
int id = rdev_get_id(rdev);
|
|
int id = rdev_get_id(rdev);
|
|
int shift = max77802_get_opmode_shift(id);
|
|
int shift = max77802_get_opmode_shift(id);
|
|
|
|
|
|
|
|
+ if (max77802->opmode[id] == MAX77802_OFF_PWRREQ)
|
|
|
|
+ max77802->opmode[id] = MAX77802_OPMODE_NORMAL;
|
|
|
|
+
|
|
return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
|
|
return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
|
|
rdev->desc->enable_mask,
|
|
rdev->desc->enable_mask,
|
|
max77802->opmode[id] << shift);
|
|
max77802->opmode[id] << shift);
|
|
@@ -247,6 +251,8 @@ static struct regulator_ops max77802_ldo_ops_logic1 = {
|
|
.get_voltage_sel = regulator_get_voltage_sel_regmap,
|
|
.get_voltage_sel = regulator_get_voltage_sel_regmap,
|
|
.set_voltage_sel = regulator_set_voltage_sel_regmap,
|
|
.set_voltage_sel = regulator_set_voltage_sel_regmap,
|
|
.set_voltage_time_sel = regulator_set_voltage_time_sel,
|
|
.set_voltage_time_sel = regulator_set_voltage_time_sel,
|
|
|
|
+ .set_suspend_enable = max77802_enable,
|
|
|
|
+ .set_suspend_disable = max77802_set_suspend_disable,
|
|
.set_suspend_mode = max77802_ldo_set_suspend_mode_logic1,
|
|
.set_suspend_mode = max77802_ldo_set_suspend_mode_logic1,
|
|
};
|
|
};
|
|
|
|
|
|
@@ -276,7 +282,8 @@ static struct regulator_ops max77802_buck_16_dvs_ops = {
|
|
.set_voltage_sel = regulator_set_voltage_sel_regmap,
|
|
.set_voltage_sel = regulator_set_voltage_sel_regmap,
|
|
.set_voltage_time_sel = regulator_set_voltage_time_sel,
|
|
.set_voltage_time_sel = regulator_set_voltage_time_sel,
|
|
.set_ramp_delay = max77802_set_ramp_delay_4bit,
|
|
.set_ramp_delay = max77802_set_ramp_delay_4bit,
|
|
- .set_suspend_disable = max77802_buck_set_suspend_disable,
|
|
|
|
|
|
+ .set_suspend_enable = max77802_enable,
|
|
|
|
+ .set_suspend_disable = max77802_set_suspend_disable,
|
|
};
|
|
};
|
|
|
|
|
|
/* BUCKs 2-4, 5, 7-10 */
|
|
/* BUCKs 2-4, 5, 7-10 */
|
|
@@ -290,7 +297,8 @@ static struct regulator_ops max77802_buck_dvs_ops = {
|
|
.set_voltage_sel = regulator_set_voltage_sel_regmap,
|
|
.set_voltage_sel = regulator_set_voltage_sel_regmap,
|
|
.set_voltage_time_sel = regulator_set_voltage_time_sel,
|
|
.set_voltage_time_sel = regulator_set_voltage_time_sel,
|
|
.set_ramp_delay = max77802_set_ramp_delay_2bit,
|
|
.set_ramp_delay = max77802_set_ramp_delay_2bit,
|
|
- .set_suspend_disable = max77802_buck_set_suspend_disable,
|
|
|
|
|
|
+ .set_suspend_enable = max77802_enable,
|
|
|
|
+ .set_suspend_disable = max77802_set_suspend_disable,
|
|
};
|
|
};
|
|
|
|
|
|
/* LDOs 3-7, 9-14, 18-26, 28, 29, 32-34 */
|
|
/* LDOs 3-7, 9-14, 18-26, 28, 29, 32-34 */
|