thermal: devfreq_cooling: refactor code and add get_voltage function
authorLukasz Luba <lukasz.luba@arm.com>
Thu, 4 May 2017 11:34:31 +0000 (12:34 +0100)
committerZhang Rui <rui.zhang@intel.com>
Fri, 5 May 2017 07:54:45 +0000 (15:54 +0800)
Move the code which gets the voltage for a given frequency.
This code will be resused in few places.

Acked-by: Javi Merino <javi.merino@kernel.org>
Signed-off-by: Lukasz Luba <lukasz.luba@arm.com>
drivers/thermal/devfreq_cooling.c

index 4bf4ad58cffda0172a48138248f4b406790c58e8..af9d32837a3a5141da6951522ec34f187c9f9340 100644 (file)
@@ -164,27 +164,12 @@ freq_get_state(struct devfreq_cooling_device *dfc, unsigned long freq)
        return THERMAL_CSTATE_INVALID;
 }
 
-/**
- * get_static_power() - calculate the static power
- * @dfc:       Pointer to devfreq cooling device
- * @freq:      Frequency in Hz
- *
- * Calculate the static power in milliwatts using the supplied
- * get_static_power().  The current voltage is calculated using the
- * OPP library.  If no get_static_power() was supplied, assume the
- * static power is negligible.
- */
-static unsigned long
-get_static_power(struct devfreq_cooling_device *dfc, unsigned long freq)
+static unsigned long get_voltage(struct devfreq *df, unsigned long freq)
 {
-       struct devfreq *df = dfc->devfreq;
        struct device *dev = df->dev.parent;
        unsigned long voltage;
        struct dev_pm_opp *opp;
 
-       if (!dfc->power_ops->get_static_power)
-               return 0;
-
        opp = dev_pm_opp_find_freq_exact(dev, freq, true);
        if (PTR_ERR(opp) == -ERANGE)
                opp = dev_pm_opp_find_freq_exact(dev, freq, false);
@@ -202,9 +187,35 @@ get_static_power(struct devfreq_cooling_device *dfc, unsigned long freq)
                dev_err_ratelimited(dev,
                                    "Failed to get voltage for frequency %lu\n",
                                    freq);
-               return 0;
        }
 
+       return voltage;
+}
+
+/**
+ * get_static_power() - calculate the static power
+ * @dfc:       Pointer to devfreq cooling device
+ * @freq:      Frequency in Hz
+ *
+ * Calculate the static power in milliwatts using the supplied
+ * get_static_power().  The current voltage is calculated using the
+ * OPP library.  If no get_static_power() was supplied, assume the
+ * static power is negligible.
+ */
+static unsigned long
+get_static_power(struct devfreq_cooling_device *dfc, unsigned long freq)
+{
+       struct devfreq *df = dfc->devfreq;
+       unsigned long voltage;
+
+       if (!dfc->power_ops->get_static_power)
+               return 0;
+
+       voltage = get_voltage(df, freq);
+
+       if (voltage == 0)
+               return 0;
+
        return dfc->power_ops->get_static_power(df, voltage);
 }