aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/base/power/opp/core.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c
index 2824d3a5e9f0..6441dfda489f 100644
--- a/drivers/base/power/opp/core.c
+++ b/drivers/base/power/opp/core.c
@@ -584,6 +584,7 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
584 struct clk *clk; 584 struct clk *clk;
585 unsigned long freq, old_freq; 585 unsigned long freq, old_freq;
586 unsigned long u_volt, u_volt_min, u_volt_max; 586 unsigned long u_volt, u_volt_min, u_volt_max;
587 unsigned long old_u_volt, old_u_volt_min, old_u_volt_max;
587 int ret; 588 int ret;
588 589
589 if (unlikely(!target_freq)) { 590 if (unlikely(!target_freq)) {
@@ -633,6 +634,14 @@ int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq)
633 return ret; 634 return ret;
634 } 635 }
635 636
637 if (IS_ERR(old_opp)) {
638 old_u_volt = 0;
639 } else {
640 old_u_volt = old_opp->u_volt;
641 old_u_volt_min = old_opp->u_volt_min;
642 old_u_volt_max = old_opp->u_volt_max;
643 }
644
636 u_volt = opp->u_volt; 645 u_volt = opp->u_volt;
637 u_volt_min = opp->u_volt_min; 646 u_volt_min = opp->u_volt_min;
638 u_volt_max = opp->u_volt_max; 647 u_volt_max = opp->u_volt_max;
@@ -677,9 +686,10 @@ restore_freq:
677 __func__, old_freq); 686 __func__, old_freq);
678restore_voltage: 687restore_voltage:
679 /* This shouldn't harm even if the voltages weren't updated earlier */ 688 /* This shouldn't harm even if the voltages weren't updated earlier */
680 if (!IS_ERR(old_opp)) 689 if (old_u_volt) {
681 _set_opp_voltage(dev, reg, old_opp->u_volt, 690 _set_opp_voltage(dev, reg, old_u_volt, old_u_volt_min,
682 old_opp->u_volt_min, old_opp->u_volt_max); 691 old_u_volt_max);
692 }
683 693
684 return ret; 694 return ret;
685} 695}