]>
Commit | Line | Data |
---|---|---|
203d3d4a ZR |
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 | ||
31 | struct thermal_zone_device; | |
32 | struct thermal_cooling_device; | |
33 | ||
34 | struct thermal_zone_device_ops { | |
35 | int (*bind) (struct thermal_zone_device *, | |
36 | struct thermal_cooling_device *); | |
37 | int (*unbind) (struct thermal_zone_device *, | |
38 | struct thermal_cooling_device *); | |
39 | int (*get_temp) (struct thermal_zone_device *, char *); | |
40 | int (*get_mode) (struct thermal_zone_device *, char *); | |
41 | int (*set_mode) (struct thermal_zone_device *, const char *); | |
42 | int (*get_trip_type) (struct thermal_zone_device *, int, char *); | |
43 | int (*get_trip_temp) (struct thermal_zone_device *, int, char *); | |
44 | }; | |
45 | ||
46 | struct thermal_cooling_device_ops { | |
47 | int (*get_max_state) (struct thermal_cooling_device *, char *); | |
48 | int (*get_cur_state) (struct thermal_cooling_device *, char *); | |
49 | int (*set_cur_state) (struct thermal_cooling_device *, unsigned int); | |
50 | }; | |
51 | ||
52 | #define THERMAL_TRIPS_NONE -1 | |
5f1a3f2a | 53 | #define THERMAL_MAX_TRIPS 12 |
203d3d4a ZR |
54 | #define THERMAL_NAME_LENGTH 20 |
55 | struct thermal_cooling_device { | |
56 | int id; | |
57 | char type[THERMAL_NAME_LENGTH]; | |
58 | struct device device; | |
59 | void *devdata; | |
60 | struct thermal_cooling_device_ops *ops; | |
61 | struct list_head node; | |
62 | }; | |
63 | ||
041d4bbf ZR |
64 | #define KELVIN_TO_CELSIUS(t) (long)(((long)t-2732 >= 0) ? \ |
65 | ((long)t-2732+5)/10 : ((long)t-2732-5)/10) | |
66 | #define CELSIUS_TO_KELVIN(t) ((t)*10+2732) | |
67 | ||
203d3d4a ZR |
68 | struct thermal_zone_device { |
69 | int id; | |
70 | char type[THERMAL_NAME_LENGTH]; | |
71 | struct device device; | |
72 | void *devdata; | |
73 | int trips; | |
74 | struct thermal_zone_device_ops *ops; | |
75 | struct list_head cooling_devices; | |
76 | struct idr idr; | |
77 | struct mutex lock; /* protect cooling devices list */ | |
78 | struct list_head node; | |
79 | }; | |
80 | ||
81 | struct thermal_zone_device *thermal_zone_device_register(char *, int, void *, | |
a0dd25b2 LB |
82 | struct |
83 | thermal_zone_device_ops | |
84 | *); | |
203d3d4a ZR |
85 | void thermal_zone_device_unregister(struct thermal_zone_device *); |
86 | ||
87 | int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int, | |
88 | struct thermal_cooling_device *); | |
89 | int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int, | |
90 | struct thermal_cooling_device *); | |
91 | ||
a0dd25b2 | 92 | #ifdef CONFIG_THERMAL |
203d3d4a | 93 | struct thermal_cooling_device *thermal_cooling_device_register(char *, void *, |
a0dd25b2 LB |
94 | struct |
95 | thermal_cooling_device_ops | |
96 | *); | |
203d3d4a | 97 | void thermal_cooling_device_unregister(struct thermal_cooling_device *); |
a0dd25b2 LB |
98 | #else |
99 | static inline struct thermal_cooling_device | |
100 | *thermal_cooling_device_register(char *c, void *v, | |
101 | struct thermal_cooling_device_ops *t) | |
102 | { | |
103 | return NULL; | |
104 | } | |
105 | static inline | |
106 | void thermal_cooling_device_unregister(struct thermal_cooling_device *t) | |
107 | { | |
108 | }; | |
109 | #endif | |
203d3d4a | 110 | |
a0dd25b2 | 111 | #endif /* __THERMAL_H__ */ |