From 07c71c6ce42fa976adbf84ae2583c1f945b806cc Mon Sep 17 00:00:00 2001 From: Clarence Ip Date: Tue, 23 Feb 2016 17:51:27 -0500 Subject: [PATCH] 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 [cip@codeaurora.org: Resolved merge conflicts] Signed-off-by: Clarence Ip --- drivers/video/fbdev/msm/mdss_io_util.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_io_util.c b/drivers/video/fbdev/msm/mdss_io_util.c index 0baa3af79fa6..778b48591b86 100644 --- a/drivers/video/fbdev/msm/mdss_io_util.c +++ b/drivers/video/fbdev/msm/mdss_io_util.c @@ -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;