summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNishanth Menon <nm@ti.com>2012-08-01 20:54:32 +0800
committerAndy Green <andy.green@linaro.org>2012-08-01 20:54:32 +0800
commitd8885bd7ea5ab10362848868010847e7ea51cfef (patch)
treeb379df8ba046e8bbf42bc74495e14615ffe4c849
parent4eb6e70d9176f05712ba650b30a9a0d50c4c02f5 (diff)
OMAP3+: DVFS: ensure proper volt config if curr_volt==new_volt
At times when current_volt is same as new voltage, voltdm_scale is not invoked. Since, vp_err_gain update and voltdm->curr_volt update is done as part of vc_prescale and post_scale invoked as part of scale call, these are left configured to old OPP values even if we are moving to a new OPP. Update these when we detect voltdm_scale is not being invoked, but new OPP Vnom is detected. Change-Id: Ic45d5a51edb4e5fe526529c6040cd014907b560e Reported-by: Honda Kenji <x0092217@ti.com> Reported-by: Maki Tanaka <m-tanaka1@ti.com> Signed-off-by: Nishanth Menon <nm@ti.com>
-rw-r--r--arch/arm/mach-omap2/dvfs.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/dvfs.c b/arch/arm/mach-omap2/dvfs.c
index 8dab888ff1b..ffd768ce574 100644
--- a/arch/arm/mach-omap2/dvfs.c
+++ b/arch/arm/mach-omap2/dvfs.c
@@ -865,6 +865,13 @@ static int _dvfs_scale(struct device *req_dev, struct device *target_dev,
_dep_scale_domains(target_dev, vdd);
}
+ /* Ensure that current voltage data pointer points to new volt */
+ if (curr_volt == new_volt && omap_get_nominal_voltage(new_vdata) !=
+ omap_get_nominal_voltage(curr_vdata)) {
+ voltdm->curr_volt = new_vdata;
+ omap_vp_update_errorgain(voltdm, new_vdata);
+ }
+
/* All clear.. go out gracefully */
goto out;