disp: msm: disable regulator load after the regulator was disabled
Setting a lower load can make the regulator enter into LPM. Now the
lower load was set before the regulator disable, there's a risk here.
The regulator has been LPM, while it was not disable, if the cosumer
has a higher current needed than LPM at this time, that will lead OCP
on this regulator. The right operation for a regulator enable/disable
should be:
1. regulator_set_voltage(vreg, active_min_uV, active_max_uV) and
regulator_set_load(vreg, active_load_uA); in either order
2. regulator_enable()
3. regulator_disable()
4. regulator_set_voltage(vreg, inactive_min_uV, inactive_max_uV)
and regulator_set_load(vreg, inactive_load_uA); in either order
Change-Id: Ibe4f888a5675baf2691e479daa163d8867902e69
Signed-off-by: Zhao, Yuan <yzhao@codeaurora.org>
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
parent
bb71c092c8
commit
d9c2a8d3a6
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2012, 2015-2019, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2012, 2015-2020, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||
|
||||
@@ -255,12 +255,12 @@ int sde_rot_enable_vreg(struct sde_vreg *in_vreg, int num_vreg, int enable)
|
||||
if (in_vreg[i].pre_off_sleep)
|
||||
usleep_range(in_vreg[i].pre_off_sleep * 1000,
|
||||
in_vreg[i].pre_off_sleep * 1000);
|
||||
regulator_set_load(in_vreg[i].vreg,
|
||||
in_vreg[i].disable_load);
|
||||
regulator_disable(in_vreg[i].vreg);
|
||||
if (in_vreg[i].post_off_sleep)
|
||||
usleep_range(in_vreg[i].post_off_sleep * 1000,
|
||||
in_vreg[i].post_off_sleep * 1000);
|
||||
regulator_set_load(in_vreg[i].vreg,
|
||||
in_vreg[i].disable_load);
|
||||
}
|
||||
}
|
||||
return rc;
|
||||
@@ -273,12 +273,12 @@ vreg_set_opt_mode_fail:
|
||||
if (in_vreg[i].pre_off_sleep)
|
||||
usleep_range(in_vreg[i].pre_off_sleep * 1000,
|
||||
in_vreg[i].pre_off_sleep * 1000);
|
||||
regulator_set_load(in_vreg[i].vreg,
|
||||
in_vreg[i].disable_load);
|
||||
regulator_disable(in_vreg[i].vreg);
|
||||
if (in_vreg[i].post_off_sleep)
|
||||
usleep_range(in_vreg[i].post_off_sleep * 1000,
|
||||
in_vreg[i].post_off_sleep * 1000);
|
||||
regulator_set_load(in_vreg[i].vreg,
|
||||
in_vreg[i].disable_load);
|
||||
}
|
||||
|
||||
return rc;
|
||||
|
||||
Reference in New Issue
Block a user