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