Blame view

include/linux/thermal.h 4.62 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
78
79
80
  #define THERMAL_NAME_LENGTH 20
  struct thermal_cooling_device {
  	int id;
  	char type[THERMAL_NAME_LENGTH];
  	struct device device;
  	void *devdata;
  	struct thermal_cooling_device_ops *ops;
  	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;
203d3d4aa   Zhang Rui   the generic therm...
112
113
114
115
116
  	struct thermal_zone_device_ops *ops;
  	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
125
126
  };
  
  struct thermal_zone_device *thermal_zone_device_register(char *, int, void *,
a0dd25b2c   Len Brown   ACPI: thermal: bu...
127
128
  							 struct
  							 thermal_zone_device_ops
b1569e99c   Matthew Garrett   ACPI: move therma...
129
130
131
  							 *, int tc1, int tc2,
  							 int passive_freq,
  							 int polling_freq);
203d3d4aa   Zhang Rui   the generic therm...
132
133
134
135
136
137
  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...
138
  void thermal_zone_device_update(struct thermal_zone_device *);
203d3d4aa   Zhang Rui   the generic therm...
139
  struct thermal_cooling_device *thermal_cooling_device_register(char *, void *,
a0dd25b2c   Len Brown   ACPI: thermal: bu...
140
141
142
  							       struct
  							       thermal_cooling_device_ops
  							       *);
203d3d4aa   Zhang Rui   the generic therm...
143
  void thermal_cooling_device_unregister(struct thermal_cooling_device *);
a0dd25b2c   Len Brown   ACPI: thermal: bu...
144
  #endif /* __THERMAL_H__ */