msm: mdss: use usleep_range instead of msleep in mdss util

msleep API runs in atomic context and can add extra delay
after sleep timeout. This can add extra delays for panel
regulator turn on/off sequence which affects device
suspend/resume timing. Moving to usleep_range enables the
delay backed by hrtimers.

Change-Id: Id9e50ab02c0166de41316eeb948e93cdce432e15
Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
[cip@codeaurora.org: Resolved merge conflicts]
Signed-off-by: Clarence Ip <cip@codeaurora.org>
This commit is contained in:
Clarence Ip 2016-02-23 17:51:27 -05:00 committed by David Keitel
parent 5214f4a020
commit 07c71c6ce4

View file

@ -224,7 +224,8 @@ int msm_dss_enable_vreg(struct dss_vreg *in_vreg, int num_vreg, int enable)
}
need_sleep = !regulator_is_enabled(in_vreg[i].vreg);
if (in_vreg[i].pre_on_sleep && need_sleep)
msleep(in_vreg[i].pre_on_sleep);
usleep_range(in_vreg[i].pre_on_sleep,
in_vreg[i].pre_on_sleep);
rc = regulator_set_load(in_vreg[i].vreg,
in_vreg[i].enable_load);
if (rc < 0) {
@ -235,7 +236,8 @@ int msm_dss_enable_vreg(struct dss_vreg *in_vreg, int num_vreg, int enable)
}
rc = regulator_enable(in_vreg[i].vreg);
if (in_vreg[i].post_on_sleep && need_sleep)
msleep(in_vreg[i].post_on_sleep);
usleep_range(in_vreg[i].post_on_sleep,
in_vreg[i].post_on_sleep);
if (rc < 0) {
DEV_ERR("%pS->%s: %s enable failed\n",
__builtin_return_address(0), __func__,
@ -246,12 +248,14 @@ int msm_dss_enable_vreg(struct dss_vreg *in_vreg, int num_vreg, int enable)
} else {
for (i = num_vreg-1; i >= 0; i--) {
if (in_vreg[i].pre_off_sleep)
msleep(in_vreg[i].pre_off_sleep);
usleep_range(in_vreg[i].pre_off_sleep,
in_vreg[i].pre_off_sleep);
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)
msleep(in_vreg[i].post_off_sleep);
usleep_range(in_vreg[i].post_off_sleep,
in_vreg[i].post_off_sleep);
}
}
return rc;
@ -262,12 +266,14 @@ disable_vreg:
vreg_set_opt_mode_fail:
for (i--; i >= 0; i--) {
if (in_vreg[i].pre_off_sleep)
msleep(in_vreg[i].pre_off_sleep);
usleep_range(in_vreg[i].pre_off_sleep,
in_vreg[i].pre_off_sleep);
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)
msleep(in_vreg[i].post_off_sleep);
usleep_range(in_vreg[i].post_off_sleep,
in_vreg[i].post_off_sleep);
}
return rc;