xref: /linux/drivers/thermal/thermal_core.c (revision e5c86679d5e864947a52fb31e45a425dea3e7fa9)
1 /*
2  *  thermal.c - Generic Thermal Management Sysfs support.
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  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; version 2 of the License.
11  */
12 
13 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14 
15 #include <linux/module.h>
16 #include <linux/device.h>
17 #include <linux/err.h>
18 #include <linux/slab.h>
19 #include <linux/kdev_t.h>
20 #include <linux/idr.h>
21 #include <linux/thermal.h>
22 #include <linux/reboot.h>
23 #include <linux/string.h>
24 #include <linux/of.h>
25 #include <net/netlink.h>
26 #include <net/genetlink.h>
27 #include <linux/suspend.h>
28 
29 #define CREATE_TRACE_POINTS
30 #include <trace/events/thermal.h>
31 
32 #include "thermal_core.h"
33 #include "thermal_hwmon.h"
34 
35 MODULE_AUTHOR("Zhang Rui");
36 MODULE_DESCRIPTION("Generic thermal management sysfs support");
37 MODULE_LICENSE("GPL v2");
38 
39 static DEFINE_IDA(thermal_tz_ida);
40 static DEFINE_IDA(thermal_cdev_ida);
41 
42 static LIST_HEAD(thermal_tz_list);
43 static LIST_HEAD(thermal_cdev_list);
44 static LIST_HEAD(thermal_governor_list);
45 
46 static DEFINE_MUTEX(thermal_list_lock);
47 static DEFINE_MUTEX(thermal_governor_lock);
48 
49 static atomic_t in_suspend;
50 
51 static struct thermal_governor *def_governor;
52 
53 /*
54  * Governor section: set of functions to handle thermal governors
55  *
56  * Functions to help in the life cycle of thermal governors within
57  * the thermal core and by the thermal governor code.
58  */
59 
60 static struct thermal_governor *__find_governor(const char *name)
61 {
62 	struct thermal_governor *pos;
63 
64 	if (!name || !name[0])
65 		return def_governor;
66 
67 	list_for_each_entry(pos, &thermal_governor_list, governor_list)
68 		if (!strncasecmp(name, pos->name, THERMAL_NAME_LENGTH))
69 			return pos;
70 
71 	return NULL;
72 }
73 
74 /**
75  * bind_previous_governor() - bind the previous governor of the thermal zone
76  * @tz:		a valid pointer to a struct thermal_zone_device
77  * @failed_gov_name:	the name of the governor that failed to register
78  *
79  * Register the previous governor of the thermal zone after a new
80  * governor has failed to be bound.
81  */
82 static void bind_previous_governor(struct thermal_zone_device *tz,
83 				   const char *failed_gov_name)
84 {
85 	if (tz->governor && tz->governor->bind_to_tz) {
86 		if (tz->governor->bind_to_tz(tz)) {
87 			dev_err(&tz->device,
88 				"governor %s failed to bind and the previous one (%s) failed to bind again, thermal zone %s has no governor\n",
89 				failed_gov_name, tz->governor->name, tz->type);
90 			tz->governor = NULL;
91 		}
92 	}
93 }
94 
95 /**
96  * thermal_set_governor() - Switch to another governor
97  * @tz:		a valid pointer to a struct thermal_zone_device
98  * @new_gov:	pointer to the new governor
99  *
100  * Change the governor of thermal zone @tz.
101  *
102  * Return: 0 on success, an error if the new governor's bind_to_tz() failed.
103  */
104 static int thermal_set_governor(struct thermal_zone_device *tz,
105 				struct thermal_governor *new_gov)
106 {
107 	int ret = 0;
108 
109 	if (tz->governor && tz->governor->unbind_from_tz)
110 		tz->governor->unbind_from_tz(tz);
111 
112 	if (new_gov && new_gov->bind_to_tz) {
113 		ret = new_gov->bind_to_tz(tz);
114 		if (ret) {
115 			bind_previous_governor(tz, new_gov->name);
116 
117 			return ret;
118 		}
119 	}
120 
121 	tz->governor = new_gov;
122 
123 	return ret;
124 }
125 
126 int thermal_register_governor(struct thermal_governor *governor)
127 {
128 	int err;
129 	const char *name;
130 	struct thermal_zone_device *pos;
131 
132 	if (!governor)
133 		return -EINVAL;
134 
135 	mutex_lock(&thermal_governor_lock);
136 
137 	err = -EBUSY;
138 	if (!__find_governor(governor->name)) {
139 		bool match_default;
140 
141 		err = 0;
142 		list_add(&governor->governor_list, &thermal_governor_list);
143 		match_default = !strncmp(governor->name,
144 					 DEFAULT_THERMAL_GOVERNOR,
145 					 THERMAL_NAME_LENGTH);
146 
147 		if (!def_governor && match_default)
148 			def_governor = governor;
149 	}
150 
151 	mutex_lock(&thermal_list_lock);
152 
153 	list_for_each_entry(pos, &thermal_tz_list, node) {
154 		/*
155 		 * only thermal zones with specified tz->tzp->governor_name
156 		 * may run with tz->govenor unset
157 		 */
158 		if (pos->governor)
159 			continue;
160 
161 		name = pos->tzp->governor_name;
162 
163 		if (!strncasecmp(name, governor->name, THERMAL_NAME_LENGTH)) {
164 			int ret;
165 
166 			ret = thermal_set_governor(pos, governor);
167 			if (ret)
168 				dev_err(&pos->device,
169 					"Failed to set governor %s for thermal zone %s: %d\n",
170 					governor->name, pos->type, ret);
171 		}
172 	}
173 
174 	mutex_unlock(&thermal_list_lock);
175 	mutex_unlock(&thermal_governor_lock);
176 
177 	return err;
178 }
179 
180 void thermal_unregister_governor(struct thermal_governor *governor)
181 {
182 	struct thermal_zone_device *pos;
183 
184 	if (!governor)
185 		return;
186 
187 	mutex_lock(&thermal_governor_lock);
188 
189 	if (!__find_governor(governor->name))
190 		goto exit;
191 
192 	mutex_lock(&thermal_list_lock);
193 
194 	list_for_each_entry(pos, &thermal_tz_list, node) {
195 		if (!strncasecmp(pos->governor->name, governor->name,
196 				 THERMAL_NAME_LENGTH))
197 			thermal_set_governor(pos, NULL);
198 	}
199 
200 	mutex_unlock(&thermal_list_lock);
201 	list_del(&governor->governor_list);
202 exit:
203 	mutex_unlock(&thermal_governor_lock);
204 }
205 
206 int thermal_zone_device_set_policy(struct thermal_zone_device *tz,
207 				   char *policy)
208 {
209 	struct thermal_governor *gov;
210 	int ret = -EINVAL;
211 
212 	mutex_lock(&thermal_governor_lock);
213 	mutex_lock(&tz->lock);
214 
215 	gov = __find_governor(strim(policy));
216 	if (!gov)
217 		goto exit;
218 
219 	ret = thermal_set_governor(tz, gov);
220 
221 exit:
222 	mutex_unlock(&tz->lock);
223 	mutex_unlock(&thermal_governor_lock);
224 
225 	return ret;
226 }
227 
228 int thermal_build_list_of_policies(char *buf)
229 {
230 	struct thermal_governor *pos;
231 	ssize_t count = 0;
232 	ssize_t size = PAGE_SIZE;
233 
234 	mutex_lock(&thermal_governor_lock);
235 
236 	list_for_each_entry(pos, &thermal_governor_list, governor_list) {
237 		size = PAGE_SIZE - count;
238 		count += scnprintf(buf + count, size, "%s ", pos->name);
239 	}
240 	count += scnprintf(buf + count, size, "\n");
241 
242 	mutex_unlock(&thermal_governor_lock);
243 
244 	return count;
245 }
246 
247 static int __init thermal_register_governors(void)
248 {
249 	int result;
250 
251 	result = thermal_gov_step_wise_register();
252 	if (result)
253 		return result;
254 
255 	result = thermal_gov_fair_share_register();
256 	if (result)
257 		return result;
258 
259 	result = thermal_gov_bang_bang_register();
260 	if (result)
261 		return result;
262 
263 	result = thermal_gov_user_space_register();
264 	if (result)
265 		return result;
266 
267 	return thermal_gov_power_allocator_register();
268 }
269 
270 static void thermal_unregister_governors(void)
271 {
272 	thermal_gov_step_wise_unregister();
273 	thermal_gov_fair_share_unregister();
274 	thermal_gov_bang_bang_unregister();
275 	thermal_gov_user_space_unregister();
276 	thermal_gov_power_allocator_unregister();
277 }
278 
279 /*
280  * Zone update section: main control loop applied to each zone while monitoring
281  *
282  * in polling mode. The monitoring is done using a workqueue.
283  * Same update may be done on a zone by calling thermal_zone_device_update().
284  *
285  * An update means:
286  * - Non-critical trips will invoke the governor responsible for that zone;
287  * - Hot trips will produce a notification to userspace;
288  * - Critical trip point will cause a system shutdown.
289  */
290 static void thermal_zone_device_set_polling(struct thermal_zone_device *tz,
291 					    int delay)
292 {
293 	if (delay > 1000)
294 		mod_delayed_work(system_freezable_wq, &tz->poll_queue,
295 				 round_jiffies(msecs_to_jiffies(delay)));
296 	else if (delay)
297 		mod_delayed_work(system_freezable_wq, &tz->poll_queue,
298 				 msecs_to_jiffies(delay));
299 	else
300 		cancel_delayed_work(&tz->poll_queue);
301 }
302 
303 static void monitor_thermal_zone(struct thermal_zone_device *tz)
304 {
305 	mutex_lock(&tz->lock);
306 
307 	if (tz->passive)
308 		thermal_zone_device_set_polling(tz, tz->passive_delay);
309 	else if (tz->polling_delay)
310 		thermal_zone_device_set_polling(tz, tz->polling_delay);
311 	else
312 		thermal_zone_device_set_polling(tz, 0);
313 
314 	mutex_unlock(&tz->lock);
315 }
316 
317 static void handle_non_critical_trips(struct thermal_zone_device *tz,
318 				      int trip,
319 				      enum thermal_trip_type trip_type)
320 {
321 	tz->governor ? tz->governor->throttle(tz, trip) :
322 		       def_governor->throttle(tz, trip);
323 }
324 
325 static void handle_critical_trips(struct thermal_zone_device *tz,
326 				  int trip, enum thermal_trip_type trip_type)
327 {
328 	int trip_temp;
329 
330 	tz->ops->get_trip_temp(tz, trip, &trip_temp);
331 
332 	/* If we have not crossed the trip_temp, we do not care. */
333 	if (trip_temp <= 0 || tz->temperature < trip_temp)
334 		return;
335 
336 	trace_thermal_zone_trip(tz, trip, trip_type);
337 
338 	if (tz->ops->notify)
339 		tz->ops->notify(tz, trip, trip_type);
340 
341 	if (trip_type == THERMAL_TRIP_CRITICAL) {
342 		dev_emerg(&tz->device,
343 			  "critical temperature reached(%d C),shutting down\n",
344 			  tz->temperature / 1000);
345 		orderly_poweroff(true);
346 	}
347 }
348 
349 static void handle_thermal_trip(struct thermal_zone_device *tz, int trip)
350 {
351 	enum thermal_trip_type type;
352 
353 	/* Ignore disabled trip points */
354 	if (test_bit(trip, &tz->trips_disabled))
355 		return;
356 
357 	tz->ops->get_trip_type(tz, trip, &type);
358 
359 	if (type == THERMAL_TRIP_CRITICAL || type == THERMAL_TRIP_HOT)
360 		handle_critical_trips(tz, trip, type);
361 	else
362 		handle_non_critical_trips(tz, trip, type);
363 	/*
364 	 * Alright, we handled this trip successfully.
365 	 * So, start monitoring again.
366 	 */
367 	monitor_thermal_zone(tz);
368 }
369 
370 static void update_temperature(struct thermal_zone_device *tz)
371 {
372 	int temp, ret;
373 
374 	ret = thermal_zone_get_temp(tz, &temp);
375 	if (ret) {
376 		if (ret != -EAGAIN)
377 			dev_warn(&tz->device,
378 				 "failed to read out thermal zone (%d)\n",
379 				 ret);
380 		return;
381 	}
382 
383 	mutex_lock(&tz->lock);
384 	tz->last_temperature = tz->temperature;
385 	tz->temperature = temp;
386 	mutex_unlock(&tz->lock);
387 
388 	trace_thermal_temperature(tz);
389 	if (tz->last_temperature == THERMAL_TEMP_INVALID)
390 		dev_dbg(&tz->device, "last_temperature N/A, current_temperature=%d\n",
391 			tz->temperature);
392 	else
393 		dev_dbg(&tz->device, "last_temperature=%d, current_temperature=%d\n",
394 			tz->last_temperature, tz->temperature);
395 }
396 
397 static void thermal_zone_device_reset(struct thermal_zone_device *tz)
398 {
399 	struct thermal_instance *pos;
400 
401 	tz->temperature = THERMAL_TEMP_INVALID;
402 	tz->passive = 0;
403 	list_for_each_entry(pos, &tz->thermal_instances, tz_node)
404 		pos->initialized = false;
405 }
406 
407 void thermal_zone_device_update(struct thermal_zone_device *tz,
408 				enum thermal_notify_event event)
409 {
410 	int count;
411 
412 	if (atomic_read(&in_suspend))
413 		return;
414 
415 	if (!tz->ops->get_temp)
416 		return;
417 
418 	update_temperature(tz);
419 
420 	thermal_zone_set_trips(tz);
421 
422 	tz->notify_event = event;
423 
424 	for (count = 0; count < tz->trips; count++)
425 		handle_thermal_trip(tz, count);
426 }
427 EXPORT_SYMBOL_GPL(thermal_zone_device_update);
428 
429 /**
430  * thermal_notify_framework - Sensor drivers use this API to notify framework
431  * @tz:		thermal zone device
432  * @trip:	indicates which trip point has been crossed
433  *
434  * This function handles the trip events from sensor drivers. It starts
435  * throttling the cooling devices according to the policy configured.
436  * For CRITICAL and HOT trip points, this notifies the respective drivers,
437  * and does actual throttling for other trip points i.e ACTIVE and PASSIVE.
438  * The throttling policy is based on the configured platform data; if no
439  * platform data is provided, this uses the step_wise throttling policy.
440  */
441 void thermal_notify_framework(struct thermal_zone_device *tz, int trip)
442 {
443 	handle_thermal_trip(tz, trip);
444 }
445 EXPORT_SYMBOL_GPL(thermal_notify_framework);
446 
447 static void thermal_zone_device_check(struct work_struct *work)
448 {
449 	struct thermal_zone_device *tz = container_of(work, struct
450 						      thermal_zone_device,
451 						      poll_queue.work);
452 	thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED);
453 }
454 
455 /*
456  * Power actor section: interface to power actors to estimate power
457  *
458  * Set of functions used to interact to cooling devices that know
459  * how to estimate their devices power consumption.
460  */
461 
462 /**
463  * power_actor_get_max_power() - get the maximum power that a cdev can consume
464  * @cdev:	pointer to &thermal_cooling_device
465  * @tz:		a valid thermal zone device pointer
466  * @max_power:	pointer in which to store the maximum power
467  *
468  * Calculate the maximum power consumption in milliwats that the
469  * cooling device can currently consume and store it in @max_power.
470  *
471  * Return: 0 on success, -EINVAL if @cdev doesn't support the
472  * power_actor API or -E* on other error.
473  */
474 int power_actor_get_max_power(struct thermal_cooling_device *cdev,
475 			      struct thermal_zone_device *tz, u32 *max_power)
476 {
477 	if (!cdev_is_power_actor(cdev))
478 		return -EINVAL;
479 
480 	return cdev->ops->state2power(cdev, tz, 0, max_power);
481 }
482 
483 /**
484  * power_actor_get_min_power() - get the mainimum power that a cdev can consume
485  * @cdev:	pointer to &thermal_cooling_device
486  * @tz:		a valid thermal zone device pointer
487  * @min_power:	pointer in which to store the minimum power
488  *
489  * Calculate the minimum power consumption in milliwatts that the
490  * cooling device can currently consume and store it in @min_power.
491  *
492  * Return: 0 on success, -EINVAL if @cdev doesn't support the
493  * power_actor API or -E* on other error.
494  */
495 int power_actor_get_min_power(struct thermal_cooling_device *cdev,
496 			      struct thermal_zone_device *tz, u32 *min_power)
497 {
498 	unsigned long max_state;
499 	int ret;
500 
501 	if (!cdev_is_power_actor(cdev))
502 		return -EINVAL;
503 
504 	ret = cdev->ops->get_max_state(cdev, &max_state);
505 	if (ret)
506 		return ret;
507 
508 	return cdev->ops->state2power(cdev, tz, max_state, min_power);
509 }
510 
511 /**
512  * power_actor_set_power() - limit the maximum power a cooling device consumes
513  * @cdev:	pointer to &thermal_cooling_device
514  * @instance:	thermal instance to update
515  * @power:	the power in milliwatts
516  *
517  * Set the cooling device to consume at most @power milliwatts. The limit is
518  * expected to be a cap at the maximum power consumption.
519  *
520  * Return: 0 on success, -EINVAL if the cooling device does not
521  * implement the power actor API or -E* for other failures.
522  */
523 int power_actor_set_power(struct thermal_cooling_device *cdev,
524 			  struct thermal_instance *instance, u32 power)
525 {
526 	unsigned long state;
527 	int ret;
528 
529 	if (!cdev_is_power_actor(cdev))
530 		return -EINVAL;
531 
532 	ret = cdev->ops->power2state(cdev, instance->tz, power, &state);
533 	if (ret)
534 		return ret;
535 
536 	instance->target = state;
537 	mutex_lock(&cdev->lock);
538 	cdev->updated = false;
539 	mutex_unlock(&cdev->lock);
540 	thermal_cdev_update(cdev);
541 
542 	return 0;
543 }
544 
545 void thermal_zone_device_rebind_exception(struct thermal_zone_device *tz,
546 					  const char *cdev_type, size_t size)
547 {
548 	struct thermal_cooling_device *cdev = NULL;
549 
550 	mutex_lock(&thermal_list_lock);
551 	list_for_each_entry(cdev, &thermal_cdev_list, node) {
552 		/* skip non matching cdevs */
553 		if (strncmp(cdev_type, cdev->type, size))
554 			continue;
555 
556 		/* re binding the exception matching the type pattern */
557 		thermal_zone_bind_cooling_device(tz, THERMAL_TRIPS_NONE, cdev,
558 						 THERMAL_NO_LIMIT,
559 						 THERMAL_NO_LIMIT,
560 						 THERMAL_WEIGHT_DEFAULT);
561 	}
562 	mutex_unlock(&thermal_list_lock);
563 }
564 
565 void thermal_zone_device_unbind_exception(struct thermal_zone_device *tz,
566 					  const char *cdev_type, size_t size)
567 {
568 	struct thermal_cooling_device *cdev = NULL;
569 
570 	mutex_lock(&thermal_list_lock);
571 	list_for_each_entry(cdev, &thermal_cdev_list, node) {
572 		/* skip non matching cdevs */
573 		if (strncmp(cdev_type, cdev->type, size))
574 			continue;
575 		/* unbinding the exception matching the type pattern */
576 		thermal_zone_unbind_cooling_device(tz, THERMAL_TRIPS_NONE,
577 						   cdev);
578 	}
579 	mutex_unlock(&thermal_list_lock);
580 }
581 
582 /*
583  * Device management section: cooling devices, zones devices, and binding
584  *
585  * Set of functions provided by the thermal core for:
586  * - cooling devices lifecycle: registration, unregistration,
587  *				binding, and unbinding.
588  * - thermal zone devices lifecycle: registration, unregistration,
589  *				     binding, and unbinding.
590  */
591 
592 /**
593  * thermal_zone_bind_cooling_device() - bind a cooling device to a thermal zone
594  * @tz:		pointer to struct thermal_zone_device
595  * @trip:	indicates which trip point the cooling devices is
596  *		associated with in this thermal zone.
597  * @cdev:	pointer to struct thermal_cooling_device
598  * @upper:	the Maximum cooling state for this trip point.
599  *		THERMAL_NO_LIMIT means no upper limit,
600  *		and the cooling device can be in max_state.
601  * @lower:	the Minimum cooling state can be used for this trip point.
602  *		THERMAL_NO_LIMIT means no lower limit,
603  *		and the cooling device can be in cooling state 0.
604  * @weight:	The weight of the cooling device to be bound to the
605  *		thermal zone. Use THERMAL_WEIGHT_DEFAULT for the
606  *		default value
607  *
608  * This interface function bind a thermal cooling device to the certain trip
609  * point of a thermal zone device.
610  * This function is usually called in the thermal zone device .bind callback.
611  *
612  * Return: 0 on success, the proper error value otherwise.
613  */
614 int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
615 				     int trip,
616 				     struct thermal_cooling_device *cdev,
617 				     unsigned long upper, unsigned long lower,
618 				     unsigned int weight)
619 {
620 	struct thermal_instance *dev;
621 	struct thermal_instance *pos;
622 	struct thermal_zone_device *pos1;
623 	struct thermal_cooling_device *pos2;
624 	unsigned long max_state;
625 	int result, ret;
626 
627 	if (trip >= tz->trips || (trip < 0 && trip != THERMAL_TRIPS_NONE))
628 		return -EINVAL;
629 
630 	list_for_each_entry(pos1, &thermal_tz_list, node) {
631 		if (pos1 == tz)
632 			break;
633 	}
634 	list_for_each_entry(pos2, &thermal_cdev_list, node) {
635 		if (pos2 == cdev)
636 			break;
637 	}
638 
639 	if (tz != pos1 || cdev != pos2)
640 		return -EINVAL;
641 
642 	ret = cdev->ops->get_max_state(cdev, &max_state);
643 	if (ret)
644 		return ret;
645 
646 	/* lower default 0, upper default max_state */
647 	lower = lower == THERMAL_NO_LIMIT ? 0 : lower;
648 	upper = upper == THERMAL_NO_LIMIT ? max_state : upper;
649 
650 	if (lower > upper || upper > max_state)
651 		return -EINVAL;
652 
653 	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
654 	if (!dev)
655 		return -ENOMEM;
656 	dev->tz = tz;
657 	dev->cdev = cdev;
658 	dev->trip = trip;
659 	dev->upper = upper;
660 	dev->lower = lower;
661 	dev->target = THERMAL_NO_TARGET;
662 	dev->weight = weight;
663 
664 	result = ida_simple_get(&tz->ida, 0, 0, GFP_KERNEL);
665 	if (result < 0)
666 		goto free_mem;
667 
668 	dev->id = result;
669 	sprintf(dev->name, "cdev%d", dev->id);
670 	result =
671 	    sysfs_create_link(&tz->device.kobj, &cdev->device.kobj, dev->name);
672 	if (result)
673 		goto release_ida;
674 
675 	sprintf(dev->attr_name, "cdev%d_trip_point", dev->id);
676 	sysfs_attr_init(&dev->attr.attr);
677 	dev->attr.attr.name = dev->attr_name;
678 	dev->attr.attr.mode = 0444;
679 	dev->attr.show = thermal_cooling_device_trip_point_show;
680 	result = device_create_file(&tz->device, &dev->attr);
681 	if (result)
682 		goto remove_symbol_link;
683 
684 	sprintf(dev->weight_attr_name, "cdev%d_weight", dev->id);
685 	sysfs_attr_init(&dev->weight_attr.attr);
686 	dev->weight_attr.attr.name = dev->weight_attr_name;
687 	dev->weight_attr.attr.mode = S_IWUSR | S_IRUGO;
688 	dev->weight_attr.show = thermal_cooling_device_weight_show;
689 	dev->weight_attr.store = thermal_cooling_device_weight_store;
690 	result = device_create_file(&tz->device, &dev->weight_attr);
691 	if (result)
692 		goto remove_trip_file;
693 
694 	mutex_lock(&tz->lock);
695 	mutex_lock(&cdev->lock);
696 	list_for_each_entry(pos, &tz->thermal_instances, tz_node)
697 		if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) {
698 			result = -EEXIST;
699 			break;
700 		}
701 	if (!result) {
702 		list_add_tail(&dev->tz_node, &tz->thermal_instances);
703 		list_add_tail(&dev->cdev_node, &cdev->thermal_instances);
704 		atomic_set(&tz->need_update, 1);
705 	}
706 	mutex_unlock(&cdev->lock);
707 	mutex_unlock(&tz->lock);
708 
709 	if (!result)
710 		return 0;
711 
712 	device_remove_file(&tz->device, &dev->weight_attr);
713 remove_trip_file:
714 	device_remove_file(&tz->device, &dev->attr);
715 remove_symbol_link:
716 	sysfs_remove_link(&tz->device.kobj, dev->name);
717 release_ida:
718 	ida_simple_remove(&tz->ida, dev->id);
719 free_mem:
720 	kfree(dev);
721 	return result;
722 }
723 EXPORT_SYMBOL_GPL(thermal_zone_bind_cooling_device);
724 
725 /**
726  * thermal_zone_unbind_cooling_device() - unbind a cooling device from a
727  *					  thermal zone.
728  * @tz:		pointer to a struct thermal_zone_device.
729  * @trip:	indicates which trip point the cooling devices is
730  *		associated with in this thermal zone.
731  * @cdev:	pointer to a struct thermal_cooling_device.
732  *
733  * This interface function unbind a thermal cooling device from the certain
734  * trip point of a thermal zone device.
735  * This function is usually called in the thermal zone device .unbind callback.
736  *
737  * Return: 0 on success, the proper error value otherwise.
738  */
739 int thermal_zone_unbind_cooling_device(struct thermal_zone_device *tz,
740 				       int trip,
741 				       struct thermal_cooling_device *cdev)
742 {
743 	struct thermal_instance *pos, *next;
744 
745 	mutex_lock(&tz->lock);
746 	mutex_lock(&cdev->lock);
747 	list_for_each_entry_safe(pos, next, &tz->thermal_instances, tz_node) {
748 		if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) {
749 			list_del(&pos->tz_node);
750 			list_del(&pos->cdev_node);
751 			mutex_unlock(&cdev->lock);
752 			mutex_unlock(&tz->lock);
753 			goto unbind;
754 		}
755 	}
756 	mutex_unlock(&cdev->lock);
757 	mutex_unlock(&tz->lock);
758 
759 	return -ENODEV;
760 
761 unbind:
762 	device_remove_file(&tz->device, &pos->weight_attr);
763 	device_remove_file(&tz->device, &pos->attr);
764 	sysfs_remove_link(&tz->device.kobj, pos->name);
765 	ida_simple_remove(&tz->ida, pos->id);
766 	kfree(pos);
767 	return 0;
768 }
769 EXPORT_SYMBOL_GPL(thermal_zone_unbind_cooling_device);
770 
771 static void thermal_release(struct device *dev)
772 {
773 	struct thermal_zone_device *tz;
774 	struct thermal_cooling_device *cdev;
775 
776 	if (!strncmp(dev_name(dev), "thermal_zone",
777 		     sizeof("thermal_zone") - 1)) {
778 		tz = to_thermal_zone(dev);
779 		kfree(tz->trip_type_attrs);
780 		kfree(tz->trip_temp_attrs);
781 		kfree(tz->trip_hyst_attrs);
782 		kfree(tz->trips_attribute_group.attrs);
783 		kfree(tz->device.groups);
784 		kfree(tz);
785 	} else if (!strncmp(dev_name(dev), "cooling_device",
786 			    sizeof("cooling_device") - 1)) {
787 		cdev = to_cooling_device(dev);
788 		kfree(cdev);
789 	}
790 }
791 
792 static struct class thermal_class = {
793 	.name = "thermal",
794 	.dev_release = thermal_release,
795 };
796 
797 static inline
798 void print_bind_err_msg(struct thermal_zone_device *tz,
799 			struct thermal_cooling_device *cdev, int ret)
800 {
801 	dev_err(&tz->device, "binding zone %s with cdev %s failed:%d\n",
802 		tz->type, cdev->type, ret);
803 }
804 
805 static void __bind(struct thermal_zone_device *tz, int mask,
806 		   struct thermal_cooling_device *cdev,
807 		   unsigned long *limits,
808 		   unsigned int weight)
809 {
810 	int i, ret;
811 
812 	for (i = 0; i < tz->trips; i++) {
813 		if (mask & (1 << i)) {
814 			unsigned long upper, lower;
815 
816 			upper = THERMAL_NO_LIMIT;
817 			lower = THERMAL_NO_LIMIT;
818 			if (limits) {
819 				lower = limits[i * 2];
820 				upper = limits[i * 2 + 1];
821 			}
822 			ret = thermal_zone_bind_cooling_device(tz, i, cdev,
823 							       upper, lower,
824 							       weight);
825 			if (ret)
826 				print_bind_err_msg(tz, cdev, ret);
827 		}
828 	}
829 }
830 
831 static void bind_cdev(struct thermal_cooling_device *cdev)
832 {
833 	int i, ret;
834 	const struct thermal_zone_params *tzp;
835 	struct thermal_zone_device *pos = NULL;
836 
837 	mutex_lock(&thermal_list_lock);
838 
839 	list_for_each_entry(pos, &thermal_tz_list, node) {
840 		if (!pos->tzp && !pos->ops->bind)
841 			continue;
842 
843 		if (pos->ops->bind) {
844 			ret = pos->ops->bind(pos, cdev);
845 			if (ret)
846 				print_bind_err_msg(pos, cdev, ret);
847 			continue;
848 		}
849 
850 		tzp = pos->tzp;
851 		if (!tzp || !tzp->tbp)
852 			continue;
853 
854 		for (i = 0; i < tzp->num_tbps; i++) {
855 			if (tzp->tbp[i].cdev || !tzp->tbp[i].match)
856 				continue;
857 			if (tzp->tbp[i].match(pos, cdev))
858 				continue;
859 			tzp->tbp[i].cdev = cdev;
860 			__bind(pos, tzp->tbp[i].trip_mask, cdev,
861 			       tzp->tbp[i].binding_limits,
862 			       tzp->tbp[i].weight);
863 		}
864 	}
865 
866 	mutex_unlock(&thermal_list_lock);
867 }
868 
869 /**
870  * __thermal_cooling_device_register() - register a new thermal cooling device
871  * @np:		a pointer to a device tree node.
872  * @type:	the thermal cooling device type.
873  * @devdata:	device private data.
874  * @ops:		standard thermal cooling devices callbacks.
875  *
876  * This interface function adds a new thermal cooling device (fan/processor/...)
877  * to /sys/class/thermal/ folder as cooling_device[0-*]. It tries to bind itself
878  * to all the thermal zone devices registered at the same time.
879  * It also gives the opportunity to link the cooling device to a device tree
880  * node, so that it can be bound to a thermal zone created out of device tree.
881  *
882  * Return: a pointer to the created struct thermal_cooling_device or an
883  * ERR_PTR. Caller must check return value with IS_ERR*() helpers.
884  */
885 static struct thermal_cooling_device *
886 __thermal_cooling_device_register(struct device_node *np,
887 				  char *type, void *devdata,
888 				  const struct thermal_cooling_device_ops *ops)
889 {
890 	struct thermal_cooling_device *cdev;
891 	struct thermal_zone_device *pos = NULL;
892 	int result;
893 
894 	if (type && strlen(type) >= THERMAL_NAME_LENGTH)
895 		return ERR_PTR(-EINVAL);
896 
897 	if (!ops || !ops->get_max_state || !ops->get_cur_state ||
898 	    !ops->set_cur_state)
899 		return ERR_PTR(-EINVAL);
900 
901 	cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
902 	if (!cdev)
903 		return ERR_PTR(-ENOMEM);
904 
905 	result = ida_simple_get(&thermal_cdev_ida, 0, 0, GFP_KERNEL);
906 	if (result < 0) {
907 		kfree(cdev);
908 		return ERR_PTR(result);
909 	}
910 
911 	cdev->id = result;
912 	strlcpy(cdev->type, type ? : "", sizeof(cdev->type));
913 	mutex_init(&cdev->lock);
914 	INIT_LIST_HEAD(&cdev->thermal_instances);
915 	cdev->np = np;
916 	cdev->ops = ops;
917 	cdev->updated = false;
918 	cdev->device.class = &thermal_class;
919 	thermal_cooling_device_setup_sysfs(cdev);
920 	cdev->devdata = devdata;
921 	dev_set_name(&cdev->device, "cooling_device%d", cdev->id);
922 	result = device_register(&cdev->device);
923 	if (result) {
924 		ida_simple_remove(&thermal_cdev_ida, cdev->id);
925 		kfree(cdev);
926 		return ERR_PTR(result);
927 	}
928 
929 	/* Add 'this' new cdev to the global cdev list */
930 	mutex_lock(&thermal_list_lock);
931 	list_add(&cdev->node, &thermal_cdev_list);
932 	mutex_unlock(&thermal_list_lock);
933 
934 	/* Update binding information for 'this' new cdev */
935 	bind_cdev(cdev);
936 
937 	mutex_lock(&thermal_list_lock);
938 	list_for_each_entry(pos, &thermal_tz_list, node)
939 		if (atomic_cmpxchg(&pos->need_update, 1, 0))
940 			thermal_zone_device_update(pos,
941 						   THERMAL_EVENT_UNSPECIFIED);
942 	mutex_unlock(&thermal_list_lock);
943 
944 	return cdev;
945 }
946 
947 /**
948  * thermal_cooling_device_register() - register a new thermal cooling device
949  * @type:	the thermal cooling device type.
950  * @devdata:	device private data.
951  * @ops:		standard thermal cooling devices callbacks.
952  *
953  * This interface function adds a new thermal cooling device (fan/processor/...)
954  * to /sys/class/thermal/ folder as cooling_device[0-*]. It tries to bind itself
955  * to all the thermal zone devices registered at the same time.
956  *
957  * Return: a pointer to the created struct thermal_cooling_device or an
958  * ERR_PTR. Caller must check return value with IS_ERR*() helpers.
959  */
960 struct thermal_cooling_device *
961 thermal_cooling_device_register(char *type, void *devdata,
962 				const struct thermal_cooling_device_ops *ops)
963 {
964 	return __thermal_cooling_device_register(NULL, type, devdata, ops);
965 }
966 EXPORT_SYMBOL_GPL(thermal_cooling_device_register);
967 
968 /**
969  * thermal_of_cooling_device_register() - register an OF thermal cooling device
970  * @np:		a pointer to a device tree node.
971  * @type:	the thermal cooling device type.
972  * @devdata:	device private data.
973  * @ops:		standard thermal cooling devices callbacks.
974  *
975  * This function will register a cooling device with device tree node reference.
976  * This interface function adds a new thermal cooling device (fan/processor/...)
977  * to /sys/class/thermal/ folder as cooling_device[0-*]. It tries to bind itself
978  * to all the thermal zone devices registered at the same time.
979  *
980  * Return: a pointer to the created struct thermal_cooling_device or an
981  * ERR_PTR. Caller must check return value with IS_ERR*() helpers.
982  */
983 struct thermal_cooling_device *
984 thermal_of_cooling_device_register(struct device_node *np,
985 				   char *type, void *devdata,
986 				   const struct thermal_cooling_device_ops *ops)
987 {
988 	return __thermal_cooling_device_register(np, type, devdata, ops);
989 }
990 EXPORT_SYMBOL_GPL(thermal_of_cooling_device_register);
991 
992 static void __unbind(struct thermal_zone_device *tz, int mask,
993 		     struct thermal_cooling_device *cdev)
994 {
995 	int i;
996 
997 	for (i = 0; i < tz->trips; i++)
998 		if (mask & (1 << i))
999 			thermal_zone_unbind_cooling_device(tz, i, cdev);
1000 }
1001 
1002 /**
1003  * thermal_cooling_device_unregister - removes a thermal cooling device
1004  * @cdev:	the thermal cooling device to remove.
1005  *
1006  * thermal_cooling_device_unregister() must be called when a registered
1007  * thermal cooling device is no longer needed.
1008  */
1009 void thermal_cooling_device_unregister(struct thermal_cooling_device *cdev)
1010 {
1011 	int i;
1012 	const struct thermal_zone_params *tzp;
1013 	struct thermal_zone_device *tz;
1014 	struct thermal_cooling_device *pos = NULL;
1015 
1016 	if (!cdev)
1017 		return;
1018 
1019 	mutex_lock(&thermal_list_lock);
1020 	list_for_each_entry(pos, &thermal_cdev_list, node)
1021 		if (pos == cdev)
1022 			break;
1023 	if (pos != cdev) {
1024 		/* thermal cooling device not found */
1025 		mutex_unlock(&thermal_list_lock);
1026 		return;
1027 	}
1028 	list_del(&cdev->node);
1029 
1030 	/* Unbind all thermal zones associated with 'this' cdev */
1031 	list_for_each_entry(tz, &thermal_tz_list, node) {
1032 		if (tz->ops->unbind) {
1033 			tz->ops->unbind(tz, cdev);
1034 			continue;
1035 		}
1036 
1037 		if (!tz->tzp || !tz->tzp->tbp)
1038 			continue;
1039 
1040 		tzp = tz->tzp;
1041 		for (i = 0; i < tzp->num_tbps; i++) {
1042 			if (tzp->tbp[i].cdev == cdev) {
1043 				__unbind(tz, tzp->tbp[i].trip_mask, cdev);
1044 				tzp->tbp[i].cdev = NULL;
1045 			}
1046 		}
1047 	}
1048 
1049 	mutex_unlock(&thermal_list_lock);
1050 
1051 	ida_simple_remove(&thermal_cdev_ida, cdev->id);
1052 	device_unregister(&cdev->device);
1053 }
1054 EXPORT_SYMBOL_GPL(thermal_cooling_device_unregister);
1055 
1056 static void bind_tz(struct thermal_zone_device *tz)
1057 {
1058 	int i, ret;
1059 	struct thermal_cooling_device *pos = NULL;
1060 	const struct thermal_zone_params *tzp = tz->tzp;
1061 
1062 	if (!tzp && !tz->ops->bind)
1063 		return;
1064 
1065 	mutex_lock(&thermal_list_lock);
1066 
1067 	/* If there is ops->bind, try to use ops->bind */
1068 	if (tz->ops->bind) {
1069 		list_for_each_entry(pos, &thermal_cdev_list, node) {
1070 			ret = tz->ops->bind(tz, pos);
1071 			if (ret)
1072 				print_bind_err_msg(tz, pos, ret);
1073 		}
1074 		goto exit;
1075 	}
1076 
1077 	if (!tzp || !tzp->tbp)
1078 		goto exit;
1079 
1080 	list_for_each_entry(pos, &thermal_cdev_list, node) {
1081 		for (i = 0; i < tzp->num_tbps; i++) {
1082 			if (tzp->tbp[i].cdev || !tzp->tbp[i].match)
1083 				continue;
1084 			if (tzp->tbp[i].match(tz, pos))
1085 				continue;
1086 			tzp->tbp[i].cdev = pos;
1087 			__bind(tz, tzp->tbp[i].trip_mask, pos,
1088 			       tzp->tbp[i].binding_limits,
1089 			       tzp->tbp[i].weight);
1090 		}
1091 	}
1092 exit:
1093 	mutex_unlock(&thermal_list_lock);
1094 }
1095 
1096 /**
1097  * thermal_zone_device_register() - register a new thermal zone device
1098  * @type:	the thermal zone device type
1099  * @trips:	the number of trip points the thermal zone support
1100  * @mask:	a bit string indicating the writeablility of trip points
1101  * @devdata:	private device data
1102  * @ops:	standard thermal zone device callbacks
1103  * @tzp:	thermal zone platform parameters
1104  * @passive_delay: number of milliseconds to wait between polls when
1105  *		   performing passive cooling
1106  * @polling_delay: number of milliseconds to wait between polls when checking
1107  *		   whether trip points have been crossed (0 for interrupt
1108  *		   driven systems)
1109  *
1110  * This interface function adds a new thermal zone device (sensor) to
1111  * /sys/class/thermal folder as thermal_zone[0-*]. It tries to bind all the
1112  * thermal cooling devices registered at the same time.
1113  * thermal_zone_device_unregister() must be called when the device is no
1114  * longer needed. The passive cooling depends on the .get_trend() return value.
1115  *
1116  * Return: a pointer to the created struct thermal_zone_device or an
1117  * in case of error, an ERR_PTR. Caller must check return value with
1118  * IS_ERR*() helpers.
1119  */
1120 struct thermal_zone_device *
1121 thermal_zone_device_register(const char *type, int trips, int mask,
1122 			     void *devdata, struct thermal_zone_device_ops *ops,
1123 			     struct thermal_zone_params *tzp, int passive_delay,
1124 			     int polling_delay)
1125 {
1126 	struct thermal_zone_device *tz;
1127 	enum thermal_trip_type trip_type;
1128 	int trip_temp;
1129 	int result;
1130 	int count;
1131 	struct thermal_governor *governor;
1132 
1133 	if (!type || strlen(type) == 0)
1134 		return ERR_PTR(-EINVAL);
1135 
1136 	if (type && strlen(type) >= THERMAL_NAME_LENGTH)
1137 		return ERR_PTR(-EINVAL);
1138 
1139 	if (trips > THERMAL_MAX_TRIPS || trips < 0 || mask >> trips)
1140 		return ERR_PTR(-EINVAL);
1141 
1142 	if (!ops)
1143 		return ERR_PTR(-EINVAL);
1144 
1145 	if (trips > 0 && (!ops->get_trip_type || !ops->get_trip_temp))
1146 		return ERR_PTR(-EINVAL);
1147 
1148 	tz = kzalloc(sizeof(*tz), GFP_KERNEL);
1149 	if (!tz)
1150 		return ERR_PTR(-ENOMEM);
1151 
1152 	INIT_LIST_HEAD(&tz->thermal_instances);
1153 	ida_init(&tz->ida);
1154 	mutex_init(&tz->lock);
1155 	result = ida_simple_get(&thermal_tz_ida, 0, 0, GFP_KERNEL);
1156 	if (result < 0) {
1157 		kfree(tz);
1158 		return ERR_PTR(result);
1159 	}
1160 
1161 	tz->id = result;
1162 	strlcpy(tz->type, type, sizeof(tz->type));
1163 	tz->ops = ops;
1164 	tz->tzp = tzp;
1165 	tz->device.class = &thermal_class;
1166 	tz->devdata = devdata;
1167 	tz->trips = trips;
1168 	tz->passive_delay = passive_delay;
1169 	tz->polling_delay = polling_delay;
1170 
1171 	/* sys I/F */
1172 	/* Add nodes that are always present via .groups */
1173 	result = thermal_zone_create_device_groups(tz, mask);
1174 	if (result)
1175 		goto unregister;
1176 
1177 	/* A new thermal zone needs to be updated anyway. */
1178 	atomic_set(&tz->need_update, 1);
1179 
1180 	dev_set_name(&tz->device, "thermal_zone%d", tz->id);
1181 	result = device_register(&tz->device);
1182 	if (result) {
1183 		ida_simple_remove(&thermal_tz_ida, tz->id);
1184 		kfree(tz);
1185 		return ERR_PTR(result);
1186 	}
1187 
1188 	for (count = 0; count < trips; count++) {
1189 		if (tz->ops->get_trip_type(tz, count, &trip_type))
1190 			set_bit(count, &tz->trips_disabled);
1191 		if (tz->ops->get_trip_temp(tz, count, &trip_temp))
1192 			set_bit(count, &tz->trips_disabled);
1193 		/* Check for bogus trip points */
1194 		if (trip_temp == 0)
1195 			set_bit(count, &tz->trips_disabled);
1196 	}
1197 
1198 	/* Update 'this' zone's governor information */
1199 	mutex_lock(&thermal_governor_lock);
1200 
1201 	if (tz->tzp)
1202 		governor = __find_governor(tz->tzp->governor_name);
1203 	else
1204 		governor = def_governor;
1205 
1206 	result = thermal_set_governor(tz, governor);
1207 	if (result) {
1208 		mutex_unlock(&thermal_governor_lock);
1209 		goto unregister;
1210 	}
1211 
1212 	mutex_unlock(&thermal_governor_lock);
1213 
1214 	if (!tz->tzp || !tz->tzp->no_hwmon) {
1215 		result = thermal_add_hwmon_sysfs(tz);
1216 		if (result)
1217 			goto unregister;
1218 	}
1219 
1220 	mutex_lock(&thermal_list_lock);
1221 	list_add_tail(&tz->node, &thermal_tz_list);
1222 	mutex_unlock(&thermal_list_lock);
1223 
1224 	/* Bind cooling devices for this zone */
1225 	bind_tz(tz);
1226 
1227 	INIT_DELAYED_WORK(&tz->poll_queue, thermal_zone_device_check);
1228 
1229 	thermal_zone_device_reset(tz);
1230 	/* Update the new thermal zone and mark it as already updated. */
1231 	if (atomic_cmpxchg(&tz->need_update, 1, 0))
1232 		thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED);
1233 
1234 	return tz;
1235 
1236 unregister:
1237 	ida_simple_remove(&thermal_tz_ida, tz->id);
1238 	device_unregister(&tz->device);
1239 	return ERR_PTR(result);
1240 }
1241 EXPORT_SYMBOL_GPL(thermal_zone_device_register);
1242 
1243 /**
1244  * thermal_device_unregister - removes the registered thermal zone device
1245  * @tz: the thermal zone device to remove
1246  */
1247 void thermal_zone_device_unregister(struct thermal_zone_device *tz)
1248 {
1249 	int i;
1250 	const struct thermal_zone_params *tzp;
1251 	struct thermal_cooling_device *cdev;
1252 	struct thermal_zone_device *pos = NULL;
1253 
1254 	if (!tz)
1255 		return;
1256 
1257 	tzp = tz->tzp;
1258 
1259 	mutex_lock(&thermal_list_lock);
1260 	list_for_each_entry(pos, &thermal_tz_list, node)
1261 		if (pos == tz)
1262 			break;
1263 	if (pos != tz) {
1264 		/* thermal zone device not found */
1265 		mutex_unlock(&thermal_list_lock);
1266 		return;
1267 	}
1268 	list_del(&tz->node);
1269 
1270 	/* Unbind all cdevs associated with 'this' thermal zone */
1271 	list_for_each_entry(cdev, &thermal_cdev_list, node) {
1272 		if (tz->ops->unbind) {
1273 			tz->ops->unbind(tz, cdev);
1274 			continue;
1275 		}
1276 
1277 		if (!tzp || !tzp->tbp)
1278 			break;
1279 
1280 		for (i = 0; i < tzp->num_tbps; i++) {
1281 			if (tzp->tbp[i].cdev == cdev) {
1282 				__unbind(tz, tzp->tbp[i].trip_mask, cdev);
1283 				tzp->tbp[i].cdev = NULL;
1284 			}
1285 		}
1286 	}
1287 
1288 	mutex_unlock(&thermal_list_lock);
1289 
1290 	thermal_zone_device_set_polling(tz, 0);
1291 
1292 	thermal_set_governor(tz, NULL);
1293 
1294 	thermal_remove_hwmon_sysfs(tz);
1295 	ida_simple_remove(&thermal_tz_ida, tz->id);
1296 	ida_destroy(&tz->ida);
1297 	mutex_destroy(&tz->lock);
1298 	device_unregister(&tz->device);
1299 }
1300 EXPORT_SYMBOL_GPL(thermal_zone_device_unregister);
1301 
1302 /**
1303  * thermal_zone_get_zone_by_name() - search for a zone and returns its ref
1304  * @name: thermal zone name to fetch the temperature
1305  *
1306  * When only one zone is found with the passed name, returns a reference to it.
1307  *
1308  * Return: On success returns a reference to an unique thermal zone with
1309  * matching name equals to @name, an ERR_PTR otherwise (-EINVAL for invalid
1310  * paramenters, -ENODEV for not found and -EEXIST for multiple matches).
1311  */
1312 struct thermal_zone_device *thermal_zone_get_zone_by_name(const char *name)
1313 {
1314 	struct thermal_zone_device *pos = NULL, *ref = ERR_PTR(-EINVAL);
1315 	unsigned int found = 0;
1316 
1317 	if (!name)
1318 		goto exit;
1319 
1320 	mutex_lock(&thermal_list_lock);
1321 	list_for_each_entry(pos, &thermal_tz_list, node)
1322 		if (!strncasecmp(name, pos->type, THERMAL_NAME_LENGTH)) {
1323 			found++;
1324 			ref = pos;
1325 		}
1326 	mutex_unlock(&thermal_list_lock);
1327 
1328 	/* nothing has been found, thus an error code for it */
1329 	if (found == 0)
1330 		ref = ERR_PTR(-ENODEV);
1331 	else if (found > 1)
1332 	/* Success only when an unique zone is found */
1333 		ref = ERR_PTR(-EEXIST);
1334 
1335 exit:
1336 	return ref;
1337 }
1338 EXPORT_SYMBOL_GPL(thermal_zone_get_zone_by_name);
1339 
1340 #ifdef CONFIG_NET
1341 static const struct genl_multicast_group thermal_event_mcgrps[] = {
1342 	{ .name = THERMAL_GENL_MCAST_GROUP_NAME, },
1343 };
1344 
1345 static struct genl_family thermal_event_genl_family __ro_after_init = {
1346 	.module = THIS_MODULE,
1347 	.name = THERMAL_GENL_FAMILY_NAME,
1348 	.version = THERMAL_GENL_VERSION,
1349 	.maxattr = THERMAL_GENL_ATTR_MAX,
1350 	.mcgrps = thermal_event_mcgrps,
1351 	.n_mcgrps = ARRAY_SIZE(thermal_event_mcgrps),
1352 };
1353 
1354 int thermal_generate_netlink_event(struct thermal_zone_device *tz,
1355 				   enum events event)
1356 {
1357 	struct sk_buff *skb;
1358 	struct nlattr *attr;
1359 	struct thermal_genl_event *thermal_event;
1360 	void *msg_header;
1361 	int size;
1362 	int result;
1363 	static unsigned int thermal_event_seqnum;
1364 
1365 	if (!tz)
1366 		return -EINVAL;
1367 
1368 	/* allocate memory */
1369 	size = nla_total_size(sizeof(struct thermal_genl_event)) +
1370 	       nla_total_size(0);
1371 
1372 	skb = genlmsg_new(size, GFP_ATOMIC);
1373 	if (!skb)
1374 		return -ENOMEM;
1375 
1376 	/* add the genetlink message header */
1377 	msg_header = genlmsg_put(skb, 0, thermal_event_seqnum++,
1378 				 &thermal_event_genl_family, 0,
1379 				 THERMAL_GENL_CMD_EVENT);
1380 	if (!msg_header) {
1381 		nlmsg_free(skb);
1382 		return -ENOMEM;
1383 	}
1384 
1385 	/* fill the data */
1386 	attr = nla_reserve(skb, THERMAL_GENL_ATTR_EVENT,
1387 			   sizeof(struct thermal_genl_event));
1388 
1389 	if (!attr) {
1390 		nlmsg_free(skb);
1391 		return -EINVAL;
1392 	}
1393 
1394 	thermal_event = nla_data(attr);
1395 	if (!thermal_event) {
1396 		nlmsg_free(skb);
1397 		return -EINVAL;
1398 	}
1399 
1400 	memset(thermal_event, 0, sizeof(struct thermal_genl_event));
1401 
1402 	thermal_event->orig = tz->id;
1403 	thermal_event->event = event;
1404 
1405 	/* send multicast genetlink message */
1406 	genlmsg_end(skb, msg_header);
1407 
1408 	result = genlmsg_multicast(&thermal_event_genl_family, skb, 0,
1409 				   0, GFP_ATOMIC);
1410 	if (result)
1411 		dev_err(&tz->device, "Failed to send netlink event:%d", result);
1412 
1413 	return result;
1414 }
1415 EXPORT_SYMBOL_GPL(thermal_generate_netlink_event);
1416 
1417 static int __init genetlink_init(void)
1418 {
1419 	return genl_register_family(&thermal_event_genl_family);
1420 }
1421 
1422 static void genetlink_exit(void)
1423 {
1424 	genl_unregister_family(&thermal_event_genl_family);
1425 }
1426 #else /* !CONFIG_NET */
1427 static inline int genetlink_init(void) { return 0; }
1428 static inline void genetlink_exit(void) {}
1429 #endif /* !CONFIG_NET */
1430 
1431 static int thermal_pm_notify(struct notifier_block *nb,
1432 			     unsigned long mode, void *_unused)
1433 {
1434 	struct thermal_zone_device *tz;
1435 
1436 	switch (mode) {
1437 	case PM_HIBERNATION_PREPARE:
1438 	case PM_RESTORE_PREPARE:
1439 	case PM_SUSPEND_PREPARE:
1440 		atomic_set(&in_suspend, 1);
1441 		break;
1442 	case PM_POST_HIBERNATION:
1443 	case PM_POST_RESTORE:
1444 	case PM_POST_SUSPEND:
1445 		atomic_set(&in_suspend, 0);
1446 		list_for_each_entry(tz, &thermal_tz_list, node) {
1447 			thermal_zone_device_reset(tz);
1448 			thermal_zone_device_update(tz,
1449 						   THERMAL_EVENT_UNSPECIFIED);
1450 		}
1451 		break;
1452 	default:
1453 		break;
1454 	}
1455 	return 0;
1456 }
1457 
1458 static struct notifier_block thermal_pm_nb = {
1459 	.notifier_call = thermal_pm_notify,
1460 };
1461 
1462 static int __init thermal_init(void)
1463 {
1464 	int result;
1465 
1466 	result = thermal_register_governors();
1467 	if (result)
1468 		goto error;
1469 
1470 	result = class_register(&thermal_class);
1471 	if (result)
1472 		goto unregister_governors;
1473 
1474 	result = genetlink_init();
1475 	if (result)
1476 		goto unregister_class;
1477 
1478 	result = of_parse_thermal_zones();
1479 	if (result)
1480 		goto exit_netlink;
1481 
1482 	result = register_pm_notifier(&thermal_pm_nb);
1483 	if (result)
1484 		pr_warn("Thermal: Can not register suspend notifier, return %d\n",
1485 			result);
1486 
1487 	return 0;
1488 
1489 exit_netlink:
1490 	genetlink_exit();
1491 unregister_class:
1492 	class_unregister(&thermal_class);
1493 unregister_governors:
1494 	thermal_unregister_governors();
1495 error:
1496 	ida_destroy(&thermal_tz_ida);
1497 	ida_destroy(&thermal_cdev_ida);
1498 	mutex_destroy(&thermal_list_lock);
1499 	mutex_destroy(&thermal_governor_lock);
1500 	return result;
1501 }
1502 
1503 static void __exit thermal_exit(void)
1504 {
1505 	unregister_pm_notifier(&thermal_pm_nb);
1506 	of_thermal_destroy_zones();
1507 	genetlink_exit();
1508 	class_unregister(&thermal_class);
1509 	thermal_unregister_governors();
1510 	ida_destroy(&thermal_tz_ida);
1511 	ida_destroy(&thermal_cdev_ida);
1512 	mutex_destroy(&thermal_list_lock);
1513 	mutex_destroy(&thermal_governor_lock);
1514 }
1515 
1516 fs_initcall(thermal_init);
1517 module_exit(thermal_exit);
1518