diff options
Diffstat (limited to 'drivers/thermal/thermal_sys.c')
-rw-r--r-- | drivers/thermal/thermal_sys.c | 91 |
1 files changed, 78 insertions, 13 deletions
diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c index 8171ca17b936..bd139adc6d32 100644 --- a/drivers/thermal/thermal_sys.c +++ b/drivers/thermal/thermal_sys.c | |||
@@ -104,22 +104,36 @@ static ssize_t | |||
104 | temp_show(struct device *dev, struct device_attribute *attr, char *buf) | 104 | temp_show(struct device *dev, struct device_attribute *attr, char *buf) |
105 | { | 105 | { |
106 | struct thermal_zone_device *tz = to_thermal_zone(dev); | 106 | struct thermal_zone_device *tz = to_thermal_zone(dev); |
107 | long temperature; | ||
108 | int ret; | ||
107 | 109 | ||
108 | if (!tz->ops->get_temp) | 110 | if (!tz->ops->get_temp) |
109 | return -EPERM; | 111 | return -EPERM; |
110 | 112 | ||
111 | return tz->ops->get_temp(tz, buf); | 113 | ret = tz->ops->get_temp(tz, &temperature); |
114 | |||
115 | if (ret) | ||
116 | return ret; | ||
117 | |||
118 | return sprintf(buf, "%ld\n", temperature); | ||
112 | } | 119 | } |
113 | 120 | ||
114 | static ssize_t | 121 | static ssize_t |
115 | mode_show(struct device *dev, struct device_attribute *attr, char *buf) | 122 | mode_show(struct device *dev, struct device_attribute *attr, char *buf) |
116 | { | 123 | { |
117 | struct thermal_zone_device *tz = to_thermal_zone(dev); | 124 | struct thermal_zone_device *tz = to_thermal_zone(dev); |
125 | enum thermal_device_mode mode; | ||
126 | int result; | ||
118 | 127 | ||
119 | if (!tz->ops->get_mode) | 128 | if (!tz->ops->get_mode) |
120 | return -EPERM; | 129 | return -EPERM; |
121 | 130 | ||
122 | return tz->ops->get_mode(tz, buf); | 131 | result = tz->ops->get_mode(tz, &mode); |
132 | if (result) | ||
133 | return result; | ||
134 | |||
135 | return sprintf(buf, "%s\n", mode == THERMAL_DEVICE_ENABLED ? "enabled" | ||
136 | : "disabled"); | ||
123 | } | 137 | } |
124 | 138 | ||
125 | static ssize_t | 139 | static ssize_t |
@@ -132,7 +146,13 @@ mode_store(struct device *dev, struct device_attribute *attr, | |||
132 | if (!tz->ops->set_mode) | 146 | if (!tz->ops->set_mode) |
133 | return -EPERM; | 147 | return -EPERM; |
134 | 148 | ||
135 | result = tz->ops->set_mode(tz, buf); | 149 | if (!strncmp(buf, "enabled", sizeof("enabled"))) |
150 | result = tz->ops->set_mode(tz, THERMAL_DEVICE_ENABLED); | ||
151 | else if (!strncmp(buf, "disabled", sizeof("disabled"))) | ||
152 | result = tz->ops->set_mode(tz, THERMAL_DEVICE_DISABLED); | ||
153 | else | ||
154 | result = -EINVAL; | ||
155 | |||
136 | if (result) | 156 | if (result) |
137 | return result; | 157 | return result; |
138 | 158 | ||
@@ -144,7 +164,8 @@ trip_point_type_show(struct device *dev, struct device_attribute *attr, | |||
144 | char *buf) | 164 | char *buf) |
145 | { | 165 | { |
146 | struct thermal_zone_device *tz = to_thermal_zone(dev); | 166 | struct thermal_zone_device *tz = to_thermal_zone(dev); |
147 | int trip; | 167 | enum thermal_trip_type type; |
168 | int trip, result; | ||
148 | 169 | ||
149 | if (!tz->ops->get_trip_type) | 170 | if (!tz->ops->get_trip_type) |
150 | return -EPERM; | 171 | return -EPERM; |
@@ -152,7 +173,22 @@ trip_point_type_show(struct device *dev, struct device_attribute *attr, | |||
152 | if (!sscanf(attr->attr.name, "trip_point_%d_type", &trip)) | 173 | if (!sscanf(attr->attr.name, "trip_point_%d_type", &trip)) |
153 | return -EINVAL; | 174 | return -EINVAL; |
154 | 175 | ||
155 | return tz->ops->get_trip_type(tz, trip, buf); | 176 | result = tz->ops->get_trip_type(tz, trip, &type); |
177 | if (result) | ||
178 | return result; | ||
179 | |||
180 | switch (type) { | ||
181 | case THERMAL_TRIP_CRITICAL: | ||
182 | return sprintf(buf, "critical"); | ||
183 | case THERMAL_TRIP_HOT: | ||
184 | return sprintf(buf, "hot"); | ||
185 | case THERMAL_TRIP_PASSIVE: | ||
186 | return sprintf(buf, "passive"); | ||
187 | case THERMAL_TRIP_ACTIVE: | ||
188 | return sprintf(buf, "active"); | ||
189 | default: | ||
190 | return sprintf(buf, "unknown"); | ||
191 | } | ||
156 | } | 192 | } |
157 | 193 | ||
158 | static ssize_t | 194 | static ssize_t |
@@ -160,7 +196,8 @@ trip_point_temp_show(struct device *dev, struct device_attribute *attr, | |||
160 | char *buf) | 196 | char *buf) |
161 | { | 197 | { |
162 | struct thermal_zone_device *tz = to_thermal_zone(dev); | 198 | struct thermal_zone_device *tz = to_thermal_zone(dev); |
163 | int trip; | 199 | int trip, ret; |
200 | long temperature; | ||
164 | 201 | ||
165 | if (!tz->ops->get_trip_temp) | 202 | if (!tz->ops->get_trip_temp) |
166 | return -EPERM; | 203 | return -EPERM; |
@@ -168,7 +205,12 @@ trip_point_temp_show(struct device *dev, struct device_attribute *attr, | |||
168 | if (!sscanf(attr->attr.name, "trip_point_%d_temp", &trip)) | 205 | if (!sscanf(attr->attr.name, "trip_point_%d_temp", &trip)) |
169 | return -EINVAL; | 206 | return -EINVAL; |
170 | 207 | ||
171 | return tz->ops->get_trip_temp(tz, trip, buf); | 208 | ret = tz->ops->get_trip_temp(tz, trip, &temperature); |
209 | |||
210 | if (ret) | ||
211 | return ret; | ||
212 | |||
213 | return sprintf(buf, "%ld\n", temperature); | ||
172 | } | 214 | } |
173 | 215 | ||
174 | static DEVICE_ATTR(type, 0444, type_show, NULL); | 216 | static DEVICE_ATTR(type, 0444, type_show, NULL); |
@@ -236,8 +278,13 @@ thermal_cooling_device_max_state_show(struct device *dev, | |||
236 | struct device_attribute *attr, char *buf) | 278 | struct device_attribute *attr, char *buf) |
237 | { | 279 | { |
238 | struct thermal_cooling_device *cdev = to_cooling_device(dev); | 280 | struct thermal_cooling_device *cdev = to_cooling_device(dev); |
281 | unsigned long state; | ||
282 | int ret; | ||
239 | 283 | ||
240 | return cdev->ops->get_max_state(cdev, buf); | 284 | ret = cdev->ops->get_max_state(cdev, &state); |
285 | if (ret) | ||
286 | return ret; | ||
287 | return sprintf(buf, "%ld\n", state); | ||
241 | } | 288 | } |
242 | 289 | ||
243 | static ssize_t | 290 | static ssize_t |
@@ -245,8 +292,13 @@ thermal_cooling_device_cur_state_show(struct device *dev, | |||
245 | struct device_attribute *attr, char *buf) | 292 | struct device_attribute *attr, char *buf) |
246 | { | 293 | { |
247 | struct thermal_cooling_device *cdev = to_cooling_device(dev); | 294 | struct thermal_cooling_device *cdev = to_cooling_device(dev); |
295 | unsigned long state; | ||
296 | int ret; | ||
248 | 297 | ||
249 | return cdev->ops->get_cur_state(cdev, buf); | 298 | ret = cdev->ops->get_cur_state(cdev, &state); |
299 | if (ret) | ||
300 | return ret; | ||
301 | return sprintf(buf, "%ld\n", state); | ||
250 | } | 302 | } |
251 | 303 | ||
252 | static ssize_t | 304 | static ssize_t |
@@ -255,10 +307,10 @@ thermal_cooling_device_cur_state_store(struct device *dev, | |||
255 | const char *buf, size_t count) | 307 | const char *buf, size_t count) |
256 | { | 308 | { |
257 | struct thermal_cooling_device *cdev = to_cooling_device(dev); | 309 | struct thermal_cooling_device *cdev = to_cooling_device(dev); |
258 | int state; | 310 | unsigned long state; |
259 | int result; | 311 | int result; |
260 | 312 | ||
261 | if (!sscanf(buf, "%d\n", &state)) | 313 | if (!sscanf(buf, "%ld\n", &state)) |
262 | return -EINVAL; | 314 | return -EINVAL; |
263 | 315 | ||
264 | if (state < 0) | 316 | if (state < 0) |
@@ -312,13 +364,20 @@ static DEVICE_ATTR(name, 0444, name_show, NULL); | |||
312 | static ssize_t | 364 | static ssize_t |
313 | temp_input_show(struct device *dev, struct device_attribute *attr, char *buf) | 365 | temp_input_show(struct device *dev, struct device_attribute *attr, char *buf) |
314 | { | 366 | { |
367 | long temperature; | ||
368 | int ret; | ||
315 | struct thermal_hwmon_attr *hwmon_attr | 369 | struct thermal_hwmon_attr *hwmon_attr |
316 | = container_of(attr, struct thermal_hwmon_attr, attr); | 370 | = container_of(attr, struct thermal_hwmon_attr, attr); |
317 | struct thermal_zone_device *tz | 371 | struct thermal_zone_device *tz |
318 | = container_of(hwmon_attr, struct thermal_zone_device, | 372 | = container_of(hwmon_attr, struct thermal_zone_device, |
319 | temp_input); | 373 | temp_input); |
320 | 374 | ||
321 | return tz->ops->get_temp(tz, buf); | 375 | ret = tz->ops->get_temp(tz, &temperature); |
376 | |||
377 | if (ret) | ||
378 | return ret; | ||
379 | |||
380 | return sprintf(buf, "%ld\n", temperature); | ||
322 | } | 381 | } |
323 | 382 | ||
324 | static ssize_t | 383 | static ssize_t |
@@ -330,8 +389,14 @@ temp_crit_show(struct device *dev, struct device_attribute *attr, | |||
330 | struct thermal_zone_device *tz | 389 | struct thermal_zone_device *tz |
331 | = container_of(hwmon_attr, struct thermal_zone_device, | 390 | = container_of(hwmon_attr, struct thermal_zone_device, |
332 | temp_crit); | 391 | temp_crit); |
392 | long temperature; | ||
393 | int ret; | ||
394 | |||
395 | ret = tz->ops->get_trip_temp(tz, 0, &temperature); | ||
396 | if (ret) | ||
397 | return ret; | ||
333 | 398 | ||
334 | return tz->ops->get_trip_temp(tz, 0, buf); | 399 | return sprintf(buf, "%ld\n", temperature); |
335 | } | 400 | } |
336 | 401 | ||
337 | 402 | ||