linux/include/linux/thermal.h
<<
>>
Prefs
   1/*
   2 *  thermal.h  ($Revision: 0 $)
   3 *
   4 *  Copyright (C) 2008  Intel Corp
   5 *  Copyright (C) 2008  Zhang Rui <rui.zhang@intel.com>
   6 *  Copyright (C) 2008  Sujith Thomas <sujith.thomas@intel.com>
   7 *
   8 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   9 *  This program is free software; you can redistribute it and/or modify
  10 *  it under the terms of the GNU General Public License as published by
  11 *  the Free Software Foundation; version 2 of the License.
  12 *
  13 *  This program is distributed in the hope that it will be useful, but
  14 *  WITHOUT ANY WARRANTY; without even the implied warranty of
  15 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16 *  General Public License for more details.
  17 *
  18 *  You should have received a copy of the GNU General Public License along
  19 *  with this program; if not, write to the Free Software Foundation, Inc.,
  20 *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  21 *
  22 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  23 */
  24
  25#ifndef __THERMAL_H__
  26#define __THERMAL_H__
  27
  28#include <linux/idr.h>
  29#include <linux/device.h>
  30#include <linux/workqueue.h>
  31
  32struct thermal_zone_device;
  33struct thermal_cooling_device;
  34
  35enum thermal_device_mode {
  36        THERMAL_DEVICE_DISABLED = 0,
  37        THERMAL_DEVICE_ENABLED,
  38};
  39
  40enum thermal_trip_type {
  41        THERMAL_TRIP_ACTIVE = 0,
  42        THERMAL_TRIP_PASSIVE,
  43        THERMAL_TRIP_HOT,
  44        THERMAL_TRIP_CRITICAL,
  45};
  46
  47struct thermal_zone_device_ops {
  48        int (*bind) (struct thermal_zone_device *,
  49                     struct thermal_cooling_device *);
  50        int (*unbind) (struct thermal_zone_device *,
  51                       struct thermal_cooling_device *);
  52        int (*get_temp) (struct thermal_zone_device *, unsigned long *);
  53        int (*get_mode) (struct thermal_zone_device *,
  54                         enum thermal_device_mode *);
  55        int (*set_mode) (struct thermal_zone_device *,
  56                enum thermal_device_mode);
  57        int (*get_trip_type) (struct thermal_zone_device *, int,
  58                enum thermal_trip_type *);
  59        int (*get_trip_temp) (struct thermal_zone_device *, int,
  60                              unsigned long *);
  61        int (*get_crit_temp) (struct thermal_zone_device *, unsigned long *);
  62        int (*notify) (struct thermal_zone_device *, int,
  63                       enum thermal_trip_type);
  64};
  65
  66struct thermal_cooling_device_ops {
  67        int (*get_max_state) (struct thermal_cooling_device *, unsigned long *);
  68        int (*get_cur_state) (struct thermal_cooling_device *, unsigned long *);
  69        int (*set_cur_state) (struct thermal_cooling_device *, unsigned long);
  70};
  71
  72#define THERMAL_TRIPS_NONE -1
  73#define THERMAL_MAX_TRIPS 12
  74#define THERMAL_NAME_LENGTH 20
  75struct thermal_cooling_device {
  76        int id;
  77        char type[THERMAL_NAME_LENGTH];
  78        struct device device;
  79        void *devdata;
  80        struct thermal_cooling_device_ops *ops;
  81        struct list_head node;
  82};
  83
  84#define KELVIN_TO_CELSIUS(t)    (long)(((long)t-2732 >= 0) ?    \
  85                                ((long)t-2732+5)/10 : ((long)t-2732-5)/10)
  86#define CELSIUS_TO_KELVIN(t)    ((t)*10+2732)
  87
  88#if defined(CONFIG_THERMAL_HWMON)
  89/* thermal zone devices with the same type share one hwmon device */
  90struct thermal_hwmon_device {
  91        char type[THERMAL_NAME_LENGTH];
  92        struct device *device;
  93        int count;
  94        struct list_head tz_list;
  95        struct list_head node;
  96};
  97
  98struct thermal_hwmon_attr {
  99        struct device_attribute attr;
 100        char name[16];
 101};
 102#endif
 103
 104struct thermal_zone_device {
 105        int id;
 106        char type[THERMAL_NAME_LENGTH];
 107        struct device device;
 108        void *devdata;
 109        int trips;
 110        int tc1;
 111        int tc2;
 112        int passive_delay;
 113        int polling_delay;
 114        int last_temperature;
 115        bool passive;
 116        unsigned int forced_passive;
 117        struct thermal_zone_device_ops *ops;
 118        struct list_head cooling_devices;
 119        struct idr idr;
 120        struct mutex lock;      /* protect cooling devices list */
 121        struct list_head node;
 122        struct delayed_work poll_queue;
 123#if defined(CONFIG_THERMAL_HWMON)
 124        struct list_head hwmon_node;
 125        struct thermal_hwmon_device *hwmon;
 126        struct thermal_hwmon_attr temp_input;   /* hwmon sys attr */
 127        struct thermal_hwmon_attr temp_crit;    /* hwmon sys attr */
 128#endif
 129};
 130
 131struct thermal_zone_device *thermal_zone_device_register(char *, int, void *,
 132                                                         struct
 133                                                         thermal_zone_device_ops
 134                                                         *, int tc1, int tc2,
 135                                                         int passive_freq,
 136                                                         int polling_freq);
 137void thermal_zone_device_unregister(struct thermal_zone_device *);
 138
 139int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
 140                                     struct thermal_cooling_device *);
 141int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int,
 142                                       struct thermal_cooling_device *);
 143void thermal_zone_device_update(struct thermal_zone_device *);
 144struct thermal_cooling_device *thermal_cooling_device_register(char *, void *,
 145                                                               struct
 146                                                               thermal_cooling_device_ops
 147                                                               *);
 148void thermal_cooling_device_unregister(struct thermal_cooling_device *);
 149
 150#endif /* __THERMAL_H__ */
 151