Blame view

include/linux/thermal.h 5.49 KB
203d3d4aa   Zhang Rui   the generic therm...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  /*
   *  thermal.h  ($Revision: 0 $)
   *
   *  Copyright (C) 2008  Intel Corp
   *  Copyright (C) 2008  Zhang Rui <rui.zhang@intel.com>
   *  Copyright (C) 2008  Sujith Thomas <sujith.thomas@intel.com>
   *
   * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   *  This program is free software; you can redistribute it and/or modify
   *  it under the terms of the GNU General Public License as published by
   *  the Free Software Foundation; version 2 of the License.
   *
   *  This program is distributed in the hope that it will be useful, but
   *  WITHOUT ANY WARRANTY; without even the implied warranty of
   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   *  General Public License for more details.
   *
   *  You should have received a copy of the GNU General Public License along
   *  with this program; if not, write to the Free Software Foundation, Inc.,
   *  59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
   *
   * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   */
  
  #ifndef __THERMAL_H__
  #define __THERMAL_H__
  
  #include <linux/idr.h>
  #include <linux/device.h>
b1569e99c   Matthew Garrett   ACPI: move therma...
30
  #include <linux/workqueue.h>
203d3d4aa   Zhang Rui   the generic therm...
31
32
33
  
  struct thermal_zone_device;
  struct thermal_cooling_device;
6503e5df0   Matthew Garrett   thermal: use inte...
34
35
36
37
38
39
40
41
42
43
44
  enum thermal_device_mode {
  	THERMAL_DEVICE_DISABLED = 0,
  	THERMAL_DEVICE_ENABLED,
  };
  
  enum thermal_trip_type {
  	THERMAL_TRIP_ACTIVE = 0,
  	THERMAL_TRIP_PASSIVE,
  	THERMAL_TRIP_HOT,
  	THERMAL_TRIP_CRITICAL,
  };
203d3d4aa   Zhang Rui   the generic therm...
45
46
47
48
49
  struct thermal_zone_device_ops {
  	int (*bind) (struct thermal_zone_device *,
  		     struct thermal_cooling_device *);
  	int (*unbind) (struct thermal_zone_device *,
  		       struct thermal_cooling_device *);
6503e5df0   Matthew Garrett   thermal: use inte...
50
51
52
53
54
55
56
57
58
  	int (*get_temp) (struct thermal_zone_device *, unsigned long *);
  	int (*get_mode) (struct thermal_zone_device *,
  			 enum thermal_device_mode *);
  	int (*set_mode) (struct thermal_zone_device *,
  		enum thermal_device_mode);
  	int (*get_trip_type) (struct thermal_zone_device *, int,
  		enum thermal_trip_type *);
  	int (*get_trip_temp) (struct thermal_zone_device *, int,
  			      unsigned long *);
9ec732ff8   Zhang, Rui   thermal: add new ...
59
  	int (*get_crit_temp) (struct thermal_zone_device *, unsigned long *);
b1569e99c   Matthew Garrett   ACPI: move therma...
60
61
  	int (*notify) (struct thermal_zone_device *, int,
  		       enum thermal_trip_type);
203d3d4aa   Zhang Rui   the generic therm...
62
63
64
  };
  
  struct thermal_cooling_device_ops {
6503e5df0   Matthew Garrett   thermal: use inte...
65
66
67
  	int (*get_max_state) (struct thermal_cooling_device *, unsigned long *);
  	int (*get_cur_state) (struct thermal_cooling_device *, unsigned long *);
  	int (*set_cur_state) (struct thermal_cooling_device *, unsigned long);
203d3d4aa   Zhang Rui   the generic therm...
68
69
70
  };
  
  #define THERMAL_TRIPS_NONE -1
5f1a3f2ac   Krzysztof Helt   acpi thermal trip...
71
  #define THERMAL_MAX_TRIPS 12
203d3d4aa   Zhang Rui   the generic therm...
72
73
74
75
76
77
  #define THERMAL_NAME_LENGTH 20
  struct thermal_cooling_device {
  	int id;
  	char type[THERMAL_NAME_LENGTH];
  	struct device device;
  	void *devdata;
5b275ce27   Alan Cox   thermal: make ops...
78
  	const struct thermal_cooling_device_ops *ops;
203d3d4aa   Zhang Rui   the generic therm...
79
80
  	struct list_head node;
  };
041d4bbf1   Zhang Rui   ACPI: CELSIUS_TO_...
81
82
83
  #define KELVIN_TO_CELSIUS(t)	(long)(((long)t-2732 >= 0) ?	\
  				((long)t-2732+5)/10 : ((long)t-2732-5)/10)
  #define CELSIUS_TO_KELVIN(t)	((t)*10+2732)
16d752397   Rene Herman   thermal: Create C...
84
  #if defined(CONFIG_THERMAL_HWMON)
e68b16abd   Zhang Rui   thermal: add hwmo...
85
86
87
88
89
90
91
92
93
94
95
96
97
98
  /* thermal zone devices with the same type share one hwmon device */
  struct thermal_hwmon_device {
  	char type[THERMAL_NAME_LENGTH];
  	struct device *device;
  	int count;
  	struct list_head tz_list;
  	struct list_head node;
  };
  
  struct thermal_hwmon_attr {
  	struct device_attribute attr;
  	char name[16];
  };
  #endif
203d3d4aa   Zhang Rui   the generic therm...
99
100
101
102
103
104
  struct thermal_zone_device {
  	int id;
  	char type[THERMAL_NAME_LENGTH];
  	struct device device;
  	void *devdata;
  	int trips;
b1569e99c   Matthew Garrett   ACPI: move therma...
105
106
107
108
109
110
  	int tc1;
  	int tc2;
  	int passive_delay;
  	int polling_delay;
  	int last_temperature;
  	bool passive;
03a971a28   Matthew Garrett   thermal: support ...
111
  	unsigned int forced_passive;
5b275ce27   Alan Cox   thermal: make ops...
112
  	const struct thermal_zone_device_ops *ops;
203d3d4aa   Zhang Rui   the generic therm...
113
114
115
116
  	struct list_head cooling_devices;
  	struct idr idr;
  	struct mutex lock;	/* protect cooling devices list */
  	struct list_head node;
b1569e99c   Matthew Garrett   ACPI: move therma...
117
  	struct delayed_work poll_queue;
16d752397   Rene Herman   thermal: Create C...
118
  #if defined(CONFIG_THERMAL_HWMON)
e68b16abd   Zhang Rui   thermal: add hwmo...
119
120
121
122
123
  	struct list_head hwmon_node;
  	struct thermal_hwmon_device *hwmon;
  	struct thermal_hwmon_attr temp_input;	/* hwmon sys attr */
  	struct thermal_hwmon_attr temp_crit;	/* hwmon sys attr */
  #endif
203d3d4aa   Zhang Rui   the generic therm...
124
  };
4cb187287   R.Durgadoss   thermal: Add even...
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
  /* Adding event notification support elements */
  #define THERMAL_GENL_FAMILY_NAME                "thermal_event"
  #define THERMAL_GENL_VERSION                    0x01
  #define THERMAL_GENL_MCAST_GROUP_NAME           "thermal_mc_group"
  
  enum events {
  	THERMAL_AUX0,
  	THERMAL_AUX1,
  	THERMAL_CRITICAL,
  	THERMAL_DEV_FAULT,
  };
  
  struct thermal_genl_event {
  	u32 orig;
  	enum events event;
  };
  /* attributes of thermal_genl_family */
  enum {
  	THERMAL_GENL_ATTR_UNSPEC,
  	THERMAL_GENL_ATTR_EVENT,
  	__THERMAL_GENL_ATTR_MAX,
  };
  #define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1)
  
  /* commands supported by the thermal_genl_family */
  enum {
  	THERMAL_GENL_CMD_UNSPEC,
  	THERMAL_GENL_CMD_EVENT,
  	__THERMAL_GENL_CMD_MAX,
  };
  #define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1)
203d3d4aa   Zhang Rui   the generic therm...
156
157
  
  struct thermal_zone_device *thermal_zone_device_register(char *, int, void *,
5b275ce27   Alan Cox   thermal: make ops...
158
159
  		const struct thermal_zone_device_ops *, int tc1, int tc2,
  		int passive_freq, int polling_freq);
203d3d4aa   Zhang Rui   the generic therm...
160
161
162
163
164
165
  void thermal_zone_device_unregister(struct thermal_zone_device *);
  
  int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
  				     struct thermal_cooling_device *);
  int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int,
  				       struct thermal_cooling_device *);
b1569e99c   Matthew Garrett   ACPI: move therma...
166
  void thermal_zone_device_update(struct thermal_zone_device *);
203d3d4aa   Zhang Rui   the generic therm...
167
  struct thermal_cooling_device *thermal_cooling_device_register(char *, void *,
5b275ce27   Alan Cox   thermal: make ops...
168
  		const struct thermal_cooling_device_ops *);
203d3d4aa   Zhang Rui   the generic therm...
169
  void thermal_cooling_device_unregister(struct thermal_cooling_device *);
af06216a8   Rafael J. Wysocki   ACPI: Fix build f...
170
171
  
  #ifdef CONFIG_NET
4cb187287   R.Durgadoss   thermal: Add even...
172
  extern int generate_netlink_event(u32 orig, enum events event);
af06216a8   Rafael J. Wysocki   ACPI: Fix build f...
173
174
175
176
177
178
  #else
  static inline int generate_netlink_event(u32 orig, enum events event)
  {
  	return 0;
  }
  #endif
203d3d4aa   Zhang Rui   the generic therm...
179

a0dd25b2c   Len Brown   ACPI: thermal: bu...
180
  #endif /* __THERMAL_H__ */