]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/linux/devfreq_cooling.h
block: introduce new block status code type
[karo-tx-linux.git] / include / linux / devfreq_cooling.h
index c35d0c0e0ada7a4e99363d217a86fc4cad8dafaf..4635f95000a4c50bff074ac5bb2f174985f7477a 100644 (file)
  *                     If get_dynamic_power() is NULL, then the
  *                     dynamic power is calculated as
  *                     @dyn_power_coeff * frequency * voltage^2
+ * @get_real_power:    When this is set, the framework uses it to ask the
+ *                     device driver for the actual power.
+ *                     Some devices have more sophisticated methods
+ *                     (like power counters) to approximate the actual power
+ *                     that they use.
+ *                     This function provides more accurate data to the
+ *                     thermal governor. When the driver does not provide
+ *                     such function, framework just uses pre-calculated
+ *                     table and scale the power by 'utilization'
+ *                     (based on 'busy_time' and 'total_time' taken from
+ *                     devfreq 'last_status').
+ *                     The value returned by this function must be lower
+ *                     or equal than the maximum power value
+ *                     for the current state
+ *                     (which can be found in power_table[state]).
+ *                     When this interface is used, the power_table holds
+ *                     max total (static + dynamic) power value for each OPP.
  */
 struct devfreq_cooling_power {
        unsigned long (*get_static_power)(struct devfreq *devfreq,
@@ -41,6 +58,8 @@ struct devfreq_cooling_power {
        unsigned long (*get_dynamic_power)(struct devfreq *devfreq,
                                           unsigned long freq,
                                           unsigned long voltage);
+       int (*get_real_power)(struct devfreq *df, u32 *power,
+                             unsigned long freq, unsigned long voltage);
        unsigned long dyn_power_coeff;
 };