linux/include/linux/devfreq_cooling.h
<<
>>
Prefs
   1/*
   2 * devfreq_cooling: Thermal cooling device implementation for devices using
   3 *                  devfreq
   4 *
   5 * Copyright (C) 2014-2015 ARM Limited
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License version 2 as
   9 * published by the Free Software Foundation.
  10 *
  11 * This program is distributed "as is" WITHOUT ANY WARRANTY of any
  12 * kind, whether express or implied; without even the implied warranty
  13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 * GNU General Public License for more details.
  15 */
  16
  17#ifndef __DEVFREQ_COOLING_H__
  18#define __DEVFREQ_COOLING_H__
  19
  20#include <linux/devfreq.h>
  21#include <linux/thermal.h>
  22
  23#ifdef CONFIG_DEVFREQ_THERMAL
  24
  25/**
  26 * struct devfreq_cooling_power - Devfreq cooling power ops
  27 * @get_static_power:   Take voltage, in mV, and return the static power
  28 *                      in mW.  If NULL, the static power is assumed
  29 *                      to be 0.
  30 * @get_dynamic_power:  Take voltage, in mV, and frequency, in HZ, and
  31 *                      return the dynamic power draw in mW.  If NULL,
  32 *                      a simple power model is used.
  33 * @dyn_power_coeff:    Coefficient for the simple dynamic power model in
  34 *                      mW/(MHz mV mV).
  35 *                      If get_dynamic_power() is NULL, then the
  36 *                      dynamic power is calculated as
  37 *                      @dyn_power_coeff * frequency * voltage^2
  38 */
  39struct devfreq_cooling_power {
  40        unsigned long (*get_static_power)(unsigned long voltage);
  41        unsigned long (*get_dynamic_power)(unsigned long freq,
  42                                           unsigned long voltage);
  43        unsigned long dyn_power_coeff;
  44};
  45
  46struct thermal_cooling_device *
  47of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
  48                                  struct devfreq_cooling_power *dfc_power);
  49struct thermal_cooling_device *
  50of_devfreq_cooling_register(struct device_node *np, struct devfreq *df);
  51struct thermal_cooling_device *devfreq_cooling_register(struct devfreq *df);
  52void devfreq_cooling_unregister(struct thermal_cooling_device *dfc);
  53
  54#else /* !CONFIG_DEVFREQ_THERMAL */
  55
  56struct thermal_cooling_device *
  57of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
  58                                  struct devfreq_cooling_power *dfc_power)
  59{
  60        return ERR_PTR(-EINVAL);
  61}
  62
  63static inline struct thermal_cooling_device *
  64of_devfreq_cooling_register(struct device_node *np, struct devfreq *df)
  65{
  66        return ERR_PTR(-EINVAL);
  67}
  68
  69static inline struct thermal_cooling_device *
  70devfreq_cooling_register(struct devfreq *df)
  71{
  72        return ERR_PTR(-EINVAL);
  73}
  74
  75static inline void
  76devfreq_cooling_unregister(struct thermal_cooling_device *dfc)
  77{
  78}
  79
  80#endif /* CONFIG_DEVFREQ_THERMAL */
  81#endif /* __DEVFREQ_COOLING_H__ */
  82