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 (*set_trip_temp) (struct thermal_zone_device *, int,
  62                              unsigned long);
  63        int (*get_trip_hyst) (struct thermal_zone_device *, int,
  64                              unsigned long *);
  65        int (*set_trip_hyst) (struct thermal_zone_device *, int,
  66                              unsigned long);
  67        int (*get_crit_temp) (struct thermal_zone_device *, unsigned long *);
  68        int (*notify) (struct thermal_zone_device *, int,
  69                       enum thermal_trip_type);
  70};
  71
  72struct thermal_cooling_device_ops {
  73        int (*get_max_state) (struct thermal_cooling_device *, unsigned long *);
  74        int (*get_cur_state) (struct thermal_cooling_device *, unsigned long *);
  75        int (*set_cur_state) (struct thermal_cooling_device *, unsigned long);
  76};
  77
  78#define THERMAL_TRIPS_NONE -1
  79#define THERMAL_MAX_TRIPS 12
  80#define THERMAL_NAME_LENGTH 20
  81struct thermal_cooling_device {
  82        int id;
  83        char type[THERMAL_NAME_LENGTH];
  84        struct device device;
  85        void *devdata;
  86        const struct thermal_cooling_device_ops *ops;
  87        struct list_head node;
  88};
  89
  90#define KELVIN_TO_CELSIUS(t)    (long)(((long)t-2732 >= 0) ?    \
  91                                ((long)t-2732+5)/10 : ((long)t-2732-5)/10)
  92#define CELSIUS_TO_KELVIN(t)    ((t)*10+2732)
  93
  94struct thermal_attr {
  95        struct device_attribute attr;
  96        char name[THERMAL_NAME_LENGTH];
  97};
  98
  99struct thermal_zone_device {
 100        int id;
 101        char type[THERMAL_NAME_LENGTH];
 102        struct device device;
 103        struct thermal_attr *trip_temp_attrs;
 104        struct thermal_attr *trip_type_attrs;
 105        struct thermal_attr *trip_hyst_attrs;
 106        void *devdata;
 107        int trips;
 108        int tc1;
 109        int tc2;
 110        int passive_delay;
 111        int polling_delay;
 112        int last_temperature;
 113        bool passive;
 114        unsigned int forced_passive;
 115        const struct thermal_zone_device_ops *ops;
 116        struct list_head cooling_devices;
 117        struct idr idr;
 118        struct mutex lock;      /* protect cooling devices list */
 119        struct list_head node;
 120        struct delayed_work poll_queue;
 121};
 122/* Adding event notification support elements */
 123#define THERMAL_GENL_FAMILY_NAME                "thermal_event"
 124#define THERMAL_GENL_VERSION                    0x01
 125#define THERMAL_GENL_MCAST_GROUP_NAME           "thermal_mc_group"
 126
 127enum events {
 128        THERMAL_AUX0,
 129        THERMAL_AUX1,
 130        THERMAL_CRITICAL,
 131        THERMAL_DEV_FAULT,
 132};
 133
 134struct thermal_genl_event {
 135        u32 orig;
 136        enum events event;
 137};
 138/* attributes of thermal_genl_family */
 139enum {
 140        THERMAL_GENL_ATTR_UNSPEC,
 141        THERMAL_GENL_ATTR_EVENT,
 142        __THERMAL_GENL_ATTR_MAX,
 143};
 144#define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1)
 145
 146/* commands supported by the thermal_genl_family */
 147enum {
 148        THERMAL_GENL_CMD_UNSPEC,
 149        THERMAL_GENL_CMD_EVENT,
 150        __THERMAL_GENL_CMD_MAX,
 151};
 152#define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1)
 153
 154struct thermal_zone_device *thermal_zone_device_register(const char *, int, int,
 155                void *, const struct thermal_zone_device_ops *, int tc1,
 156                int tc2, int passive_freq, int polling_freq);
 157void thermal_zone_device_unregister(struct thermal_zone_device *);
 158
 159int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
 160                                     struct thermal_cooling_device *);
 161int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int,
 162                                       struct thermal_cooling_device *);
 163void thermal_zone_device_update(struct thermal_zone_device *);
 164struct thermal_cooling_device *thermal_cooling_device_register(char *, void *,
 165                const struct thermal_cooling_device_ops *);
 166void thermal_cooling_device_unregister(struct thermal_cooling_device *);
 167
 168#ifdef CONFIG_NET
 169extern int thermal_generate_netlink_event(u32 orig, enum events event);
 170#else
 171static inline int thermal_generate_netlink_event(u32 orig, enum events event)
 172{
 173        return 0;
 174}
 175#endif
 176
 177#endif /* __THERMAL_H__ */
 178
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.