035b08fa981385f8adbe057160ee435b4e6b1568
[linux-2.6.git] / include / linux / therm_est.h
1 /*
2  * include/linux/therm_est.h
3  *
4  * Copyright (c) 2010-2012, NVIDIA Corporation.
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #ifndef _LINUX_THERM_EST_H
18 #define _LINUX_THERM_EST_H
19
20 #include <linux/workqueue.h>
21
22 #define HIST_LEN (20)
23
24 struct therm_est_subdevice {
25         void *dev_data;
26         int (*get_temp)(void *, long *);
27         long coeffs[HIST_LEN];
28         long hist[HIST_LEN];
29 };
30
31 struct therm_estimator {
32         long therm_est_lo_limit;
33         long therm_est_hi_limit;
34         void (*callback)(void *);
35         void *callback_data;
36         long cur_temp;
37         long polling_period;
38         struct workqueue_struct *workqueue;
39         struct delayed_work therm_est_work;
40         long toffset;
41         int ntemp;
42         int ndevs;
43         struct therm_est_subdevice **devs;
44 };
45
46 #ifdef CONFIG_THERM_EST
47 struct therm_estimator *therm_est_register(
48                         struct therm_est_subdevice **devs,
49                         int ndevs,
50                         long toffset,
51                         long pperiod);
52 int therm_est_get_temp(struct therm_estimator *est, long *temp);
53 int therm_est_set_limits(struct therm_estimator *est,
54                         long lo_limit,
55                         long hi_limit);
56 int therm_est_set_alert(struct therm_estimator *est,
57                         void (*cb)(void *),
58                         void *cb_data);
59 #else
60 static inline struct therm_estimator *therm_est_register(
61                         struct therm_est_subdevice **devs,
62                         int ndevs,
63                         long toffset,
64                         long pperiod)
65 { return NULL; }
66 static inline int therm_est_get_temp(struct therm_estimator *est, long *temp)
67 { return -EINVAL; }
68 static inline int therm_est_set_limits(struct therm_estimator *est,
69                         long lo_limit,
70                         long hi_limit)
71 { return -EINVAL; }
72 static inline int therm_est_set_alert(struct therm_estimator *est,
73                         void (*cb)(void *),
74                         void *cb_data)
75 { return -EINVAL; }
76 #endif
77 #endif /* _LINUX_THERM_EST_H */