Root/
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 | |
32 | #define THERMAL_TRIPS_NONE -1 |
33 | #define THERMAL_MAX_TRIPS 12 |
34 | #define THERMAL_NAME_LENGTH 20 |
35 | |
36 | /* invalid cooling state */ |
37 | #define THERMAL_CSTATE_INVALID -1UL |
38 | |
39 | /* No upper/lower limit requirement */ |
40 | #define THERMAL_NO_LIMIT THERMAL_CSTATE_INVALID |
41 | |
42 | /* Unit conversion macros */ |
43 | #define KELVIN_TO_CELSIUS(t) (long)(((long)t-2732 >= 0) ? \ |
44 | ((long)t-2732+5)/10 : ((long)t-2732-5)/10) |
45 | #define CELSIUS_TO_KELVIN(t) ((t)*10+2732) |
46 | |
47 | /* Adding event notification support elements */ |
48 | #define THERMAL_GENL_FAMILY_NAME "thermal_event" |
49 | #define THERMAL_GENL_VERSION 0x01 |
50 | #define THERMAL_GENL_MCAST_GROUP_NAME "thermal_mc_grp" |
51 | |
52 | /* Default Thermal Governor */ |
53 | #if defined(CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE) |
54 | #define DEFAULT_THERMAL_GOVERNOR "step_wise" |
55 | #elif defined(CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE) |
56 | #define DEFAULT_THERMAL_GOVERNOR "fair_share" |
57 | #elif defined(CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE) |
58 | #define DEFAULT_THERMAL_GOVERNOR "user_space" |
59 | #endif |
60 | |
61 | struct thermal_zone_device; |
62 | struct thermal_cooling_device; |
63 | |
64 | enum thermal_device_mode { |
65 | THERMAL_DEVICE_DISABLED = 0, |
66 | THERMAL_DEVICE_ENABLED, |
67 | }; |
68 | |
69 | enum thermal_trip_type { |
70 | THERMAL_TRIP_ACTIVE = 0, |
71 | THERMAL_TRIP_PASSIVE, |
72 | THERMAL_TRIP_HOT, |
73 | THERMAL_TRIP_CRITICAL, |
74 | }; |
75 | |
76 | enum thermal_trend { |
77 | THERMAL_TREND_STABLE, /* temperature is stable */ |
78 | THERMAL_TREND_RAISING, /* temperature is raising */ |
79 | THERMAL_TREND_DROPPING, /* temperature is dropping */ |
80 | THERMAL_TREND_RAISE_FULL, /* apply highest cooling action */ |
81 | THERMAL_TREND_DROP_FULL, /* apply lowest cooling action */ |
82 | }; |
83 | |
84 | /* Events supported by Thermal Netlink */ |
85 | enum events { |
86 | THERMAL_AUX0, |
87 | THERMAL_AUX1, |
88 | THERMAL_CRITICAL, |
89 | THERMAL_DEV_FAULT, |
90 | }; |
91 | |
92 | /* attributes of thermal_genl_family */ |
93 | enum { |
94 | THERMAL_GENL_ATTR_UNSPEC, |
95 | THERMAL_GENL_ATTR_EVENT, |
96 | __THERMAL_GENL_ATTR_MAX, |
97 | }; |
98 | #define THERMAL_GENL_ATTR_MAX (__THERMAL_GENL_ATTR_MAX - 1) |
99 | |
100 | /* commands supported by the thermal_genl_family */ |
101 | enum { |
102 | THERMAL_GENL_CMD_UNSPEC, |
103 | THERMAL_GENL_CMD_EVENT, |
104 | __THERMAL_GENL_CMD_MAX, |
105 | }; |
106 | #define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1) |
107 | |
108 | struct thermal_zone_device_ops { |
109 | int (*bind) (struct thermal_zone_device *, |
110 | struct thermal_cooling_device *); |
111 | int (*unbind) (struct thermal_zone_device *, |
112 | struct thermal_cooling_device *); |
113 | int (*get_temp) (struct thermal_zone_device *, unsigned long *); |
114 | int (*get_mode) (struct thermal_zone_device *, |
115 | enum thermal_device_mode *); |
116 | int (*set_mode) (struct thermal_zone_device *, |
117 | enum thermal_device_mode); |
118 | int (*get_trip_type) (struct thermal_zone_device *, int, |
119 | enum thermal_trip_type *); |
120 | int (*get_trip_temp) (struct thermal_zone_device *, int, |
121 | unsigned long *); |
122 | int (*set_trip_temp) (struct thermal_zone_device *, int, |
123 | unsigned long); |
124 | int (*get_trip_hyst) (struct thermal_zone_device *, int, |
125 | unsigned long *); |
126 | int (*set_trip_hyst) (struct thermal_zone_device *, int, |
127 | unsigned long); |
128 | int (*get_crit_temp) (struct thermal_zone_device *, unsigned long *); |
129 | int (*set_emul_temp) (struct thermal_zone_device *, unsigned long); |
130 | int (*get_trend) (struct thermal_zone_device *, int, |
131 | enum thermal_trend *); |
132 | int (*notify) (struct thermal_zone_device *, int, |
133 | enum thermal_trip_type); |
134 | }; |
135 | |
136 | struct thermal_cooling_device_ops { |
137 | int (*get_max_state) (struct thermal_cooling_device *, unsigned long *); |
138 | int (*get_cur_state) (struct thermal_cooling_device *, unsigned long *); |
139 | int (*set_cur_state) (struct thermal_cooling_device *, unsigned long); |
140 | }; |
141 | |
142 | struct thermal_cooling_device { |
143 | int id; |
144 | char type[THERMAL_NAME_LENGTH]; |
145 | struct device device; |
146 | void *devdata; |
147 | const struct thermal_cooling_device_ops *ops; |
148 | bool updated; /* true if the cooling device does not need update */ |
149 | struct mutex lock; /* protect thermal_instances list */ |
150 | struct list_head thermal_instances; |
151 | struct list_head node; |
152 | }; |
153 | |
154 | struct thermal_attr { |
155 | struct device_attribute attr; |
156 | char name[THERMAL_NAME_LENGTH]; |
157 | }; |
158 | |
159 | struct thermal_zone_device { |
160 | int id; |
161 | char type[THERMAL_NAME_LENGTH]; |
162 | struct device device; |
163 | struct thermal_attr *trip_temp_attrs; |
164 | struct thermal_attr *trip_type_attrs; |
165 | struct thermal_attr *trip_hyst_attrs; |
166 | void *devdata; |
167 | int trips; |
168 | int passive_delay; |
169 | int polling_delay; |
170 | int temperature; |
171 | int last_temperature; |
172 | int emul_temperature; |
173 | int passive; |
174 | unsigned int forced_passive; |
175 | const struct thermal_zone_device_ops *ops; |
176 | const struct thermal_zone_params *tzp; |
177 | struct thermal_governor *governor; |
178 | struct list_head thermal_instances; |
179 | struct idr idr; |
180 | struct mutex lock; /* protect thermal_instances list */ |
181 | struct list_head node; |
182 | struct delayed_work poll_queue; |
183 | }; |
184 | |
185 | /* Structure that holds thermal governor information */ |
186 | struct thermal_governor { |
187 | char name[THERMAL_NAME_LENGTH]; |
188 | int (*throttle)(struct thermal_zone_device *tz, int trip); |
189 | struct list_head governor_list; |
190 | }; |
191 | |
192 | /* Structure that holds binding parameters for a zone */ |
193 | struct thermal_bind_params { |
194 | struct thermal_cooling_device *cdev; |
195 | |
196 | /* |
197 | * This is a measure of 'how effectively these devices can |
198 | * cool 'this' thermal zone. The shall be determined by platform |
199 | * characterization. This is on a 'percentage' scale. |
200 | * See Documentation/thermal/sysfs-api.txt for more information. |
201 | */ |
202 | int weight; |
203 | |
204 | /* |
205 | * This is a bit mask that gives the binding relation between this |
206 | * thermal zone and cdev, for a particular trip point. |
207 | * See Documentation/thermal/sysfs-api.txt for more information. |
208 | */ |
209 | int trip_mask; |
210 | int (*match) (struct thermal_zone_device *tz, |
211 | struct thermal_cooling_device *cdev); |
212 | }; |
213 | |
214 | /* Structure to define Thermal Zone parameters */ |
215 | struct thermal_zone_params { |
216 | char governor_name[THERMAL_NAME_LENGTH]; |
217 | int num_tbps; /* Number of tbp entries */ |
218 | struct thermal_bind_params *tbp; |
219 | }; |
220 | |
221 | struct thermal_genl_event { |
222 | u32 orig; |
223 | enum events event; |
224 | }; |
225 | |
226 | /* Function declarations */ |
227 | struct thermal_zone_device *thermal_zone_device_register(const char *, int, int, |
228 | void *, const struct thermal_zone_device_ops *, |
229 | const struct thermal_zone_params *, int, int); |
230 | void thermal_zone_device_unregister(struct thermal_zone_device *); |
231 | |
232 | int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int, |
233 | struct thermal_cooling_device *, |
234 | unsigned long, unsigned long); |
235 | int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int, |
236 | struct thermal_cooling_device *); |
237 | void thermal_zone_device_update(struct thermal_zone_device *); |
238 | |
239 | struct thermal_cooling_device *thermal_cooling_device_register(char *, void *, |
240 | const struct thermal_cooling_device_ops *); |
241 | void thermal_cooling_device_unregister(struct thermal_cooling_device *); |
242 | struct thermal_zone_device *thermal_zone_get_zone_by_name(const char *name); |
243 | int thermal_zone_get_temp(struct thermal_zone_device *tz, unsigned long *temp); |
244 | |
245 | int get_tz_trend(struct thermal_zone_device *, int); |
246 | struct thermal_instance *get_thermal_instance(struct thermal_zone_device *, |
247 | struct thermal_cooling_device *, int); |
248 | void thermal_cdev_update(struct thermal_cooling_device *); |
249 | void thermal_notify_framework(struct thermal_zone_device *, int); |
250 | |
251 | #ifdef CONFIG_NET |
252 | extern int thermal_generate_netlink_event(struct thermal_zone_device *tz, |
253 | enum events event); |
254 | #else |
255 | static inline int thermal_generate_netlink_event(struct thermal_zone_device *tz, |
256 | enum events event) |
257 | { |
258 | return 0; |
259 | } |
260 | #endif |
261 | |
262 | #endif /* __THERMAL_H__ */ |
263 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9