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 *); | |
9ec732ff | 44 | int (*get_crit_temp) (struct thermal_zone_device *, unsigned long *); |
203d3d4a ZR |
45 | }; |
46 | ||
47 | struct thermal_cooling_device_ops { | |
48 | int (*get_max_state) (struct thermal_cooling_device *, char *); | |
49 | int (*get_cur_state) (struct thermal_cooling_device *, char *); | |
50 | int (*set_cur_state) (struct thermal_cooling_device *, unsigned int); | |
51 | }; | |
52 | ||
53 | #define THERMAL_TRIPS_NONE -1 | |
5f1a3f2a | 54 | #define THERMAL_MAX_TRIPS 12 |
203d3d4a ZR |
55 | #define THERMAL_NAME_LENGTH 20 |
56 | struct thermal_cooling_device { | |
57 | int id; | |
58 | char type[THERMAL_NAME_LENGTH]; | |
59 | struct device device; | |
60 | void *devdata; | |
61 | struct thermal_cooling_device_ops *ops; | |
62 | struct list_head node; | |
63 | }; | |
64 | ||
041d4bbf ZR |
65 | #define KELVIN_TO_CELSIUS(t) (long)(((long)t-2732 >= 0) ? \ |
66 | ((long)t-2732+5)/10 : ((long)t-2732-5)/10) | |
67 | #define CELSIUS_TO_KELVIN(t) ((t)*10+2732) | |
68 | ||
16d75239 | 69 | #if defined(CONFIG_THERMAL_HWMON) |
e68b16ab ZR |
70 | /* thermal zone devices with the same type share one hwmon device */ |
71 | struct thermal_hwmon_device { | |
72 | char type[THERMAL_NAME_LENGTH]; | |
73 | struct device *device; | |
74 | int count; | |
75 | struct list_head tz_list; | |
76 | struct list_head node; | |
77 | }; | |
78 | ||
79 | struct thermal_hwmon_attr { | |
80 | struct device_attribute attr; | |
81 | char name[16]; | |
82 | }; | |
83 | #endif | |
84 | ||
203d3d4a ZR |
85 | struct thermal_zone_device { |
86 | int id; | |
87 | char type[THERMAL_NAME_LENGTH]; | |
88 | struct device device; | |
89 | void *devdata; | |
90 | int trips; | |
91 | struct thermal_zone_device_ops *ops; | |
92 | struct list_head cooling_devices; | |
93 | struct idr idr; | |
94 | struct mutex lock; /* protect cooling devices list */ | |
95 | struct list_head node; | |
16d75239 | 96 | #if defined(CONFIG_THERMAL_HWMON) |
e68b16ab ZR |
97 | struct list_head hwmon_node; |
98 | struct thermal_hwmon_device *hwmon; | |
99 | struct thermal_hwmon_attr temp_input; /* hwmon sys attr */ | |
100 | struct thermal_hwmon_attr temp_crit; /* hwmon sys attr */ | |
101 | #endif | |
203d3d4a ZR |
102 | }; |
103 | ||
104 | struct thermal_zone_device *thermal_zone_device_register(char *, int, void *, | |
a0dd25b2 LB |
105 | struct |
106 | thermal_zone_device_ops | |
107 | *); | |
203d3d4a ZR |
108 | void thermal_zone_device_unregister(struct thermal_zone_device *); |
109 | ||
110 | int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int, | |
111 | struct thermal_cooling_device *); | |
112 | int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int, | |
113 | struct thermal_cooling_device *); | |
203d3d4a | 114 | struct thermal_cooling_device *thermal_cooling_device_register(char *, void *, |
a0dd25b2 LB |
115 | struct |
116 | thermal_cooling_device_ops | |
117 | *); | |
203d3d4a ZR |
118 | void thermal_cooling_device_unregister(struct thermal_cooling_device *); |
119 | ||
a0dd25b2 | 120 | #endif /* __THERMAL_H__ */ |