1 // SPDX-License-Identifier: GPL-2.0
3 * thermal.c - Generic Thermal Management Sysfs support.
5 * Copyright (C) 2008 Intel Corp
6 * Copyright (C) 2008 Zhang Rui <rui.zhang@intel.com>
7 * Copyright (C) 2008 Sujith Thomas <sujith.thomas@intel.com>
10 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12 #include <linux/device.h>
13 #include <linux/err.h>
14 #include <linux/export.h>
15 #include <linux/slab.h>
16 #include <linux/kdev_t.h>
17 #include <linux/idr.h>
18 #include <linux/thermal.h>
19 #include <linux/reboot.h>
20 #include <linux/string.h>
22 #include <linux/suspend.h>
24 #define CREATE_TRACE_POINTS
25 #include "thermal_trace.h"
27 #include "thermal_core.h"
28 #include "thermal_hwmon.h"
30 static DEFINE_IDA(thermal_tz_ida
);
31 static DEFINE_IDA(thermal_cdev_ida
);
33 static LIST_HEAD(thermal_tz_list
);
34 static LIST_HEAD(thermal_cdev_list
);
35 static LIST_HEAD(thermal_governor_list
);
37 static DEFINE_MUTEX(thermal_list_lock
);
38 static DEFINE_MUTEX(thermal_governor_lock
);
40 static struct thermal_governor
*def_governor
;
42 static bool thermal_pm_suspended
;
45 * Governor section: set of functions to handle thermal governors
47 * Functions to help in the life cycle of thermal governors within
48 * the thermal core and by the thermal governor code.
51 static struct thermal_governor
*__find_governor(const char *name
)
53 struct thermal_governor
*pos
;
55 if (!name
|| !name
[0])
58 list_for_each_entry(pos
, &thermal_governor_list
, governor_list
)
59 if (!strncasecmp(name
, pos
->name
, THERMAL_NAME_LENGTH
))
66 * bind_previous_governor() - bind the previous governor of the thermal zone
67 * @tz: a valid pointer to a struct thermal_zone_device
68 * @failed_gov_name: the name of the governor that failed to register
70 * Register the previous governor of the thermal zone after a new
71 * governor has failed to be bound.
73 static void bind_previous_governor(struct thermal_zone_device
*tz
,
74 const char *failed_gov_name
)
76 if (tz
->governor
&& tz
->governor
->bind_to_tz
) {
77 if (tz
->governor
->bind_to_tz(tz
)) {
79 "governor %s failed to bind and the previous one (%s) failed to bind again, thermal zone %s has no governor\n",
80 failed_gov_name
, tz
->governor
->name
, tz
->type
);
87 * thermal_set_governor() - Switch to another governor
88 * @tz: a valid pointer to a struct thermal_zone_device
89 * @new_gov: pointer to the new governor
91 * Change the governor of thermal zone @tz.
93 * Return: 0 on success, an error if the new governor's bind_to_tz() failed.
95 static int thermal_set_governor(struct thermal_zone_device
*tz
,
96 struct thermal_governor
*new_gov
)
100 if (tz
->governor
&& tz
->governor
->unbind_from_tz
)
101 tz
->governor
->unbind_from_tz(tz
);
103 if (new_gov
&& new_gov
->bind_to_tz
) {
104 ret
= new_gov
->bind_to_tz(tz
);
106 bind_previous_governor(tz
, new_gov
->name
);
112 tz
->governor
= new_gov
;
117 int thermal_register_governor(struct thermal_governor
*governor
)
121 struct thermal_zone_device
*pos
;
126 guard(mutex
)(&thermal_governor_lock
);
129 if (!__find_governor(governor
->name
)) {
133 list_add(&governor
->governor_list
, &thermal_governor_list
);
134 match_default
= !strncmp(governor
->name
,
135 DEFAULT_THERMAL_GOVERNOR
,
136 THERMAL_NAME_LENGTH
);
138 if (!def_governor
&& match_default
)
139 def_governor
= governor
;
142 guard(mutex
)(&thermal_list_lock
);
144 list_for_each_entry(pos
, &thermal_tz_list
, node
) {
146 * only thermal zones with specified tz->tzp->governor_name
147 * may run with tz->govenor unset
152 name
= pos
->tzp
->governor_name
;
154 if (!strncasecmp(name
, governor
->name
, THERMAL_NAME_LENGTH
)) {
157 ret
= thermal_set_governor(pos
, governor
);
159 dev_err(&pos
->device
,
160 "Failed to set governor %s for thermal zone %s: %d\n",
161 governor
->name
, pos
->type
, ret
);
168 void thermal_unregister_governor(struct thermal_governor
*governor
)
170 struct thermal_zone_device
*pos
;
175 guard(mutex
)(&thermal_governor_lock
);
177 if (!__find_governor(governor
->name
))
180 list_del(&governor
->governor_list
);
182 guard(mutex
)(&thermal_list_lock
);
184 list_for_each_entry(pos
, &thermal_tz_list
, node
) {
185 if (!strncasecmp(pos
->governor
->name
, governor
->name
,
186 THERMAL_NAME_LENGTH
))
187 thermal_set_governor(pos
, NULL
);
191 int thermal_zone_device_set_policy(struct thermal_zone_device
*tz
,
194 struct thermal_governor
*gov
;
197 guard(mutex
)(&thermal_governor_lock
);
198 guard(thermal_zone
)(tz
);
200 gov
= __find_governor(strim(policy
));
202 ret
= thermal_set_governor(tz
, gov
);
204 thermal_notify_tz_gov_change(tz
, policy
);
209 int thermal_build_list_of_policies(char *buf
)
211 struct thermal_governor
*pos
;
214 guard(mutex
)(&thermal_governor_lock
);
216 list_for_each_entry(pos
, &thermal_governor_list
, governor_list
) {
217 count
+= sysfs_emit_at(buf
, count
, "%s ", pos
->name
);
219 count
+= sysfs_emit_at(buf
, count
, "\n");
224 static void __init
thermal_unregister_governors(void)
226 struct thermal_governor
**governor
;
228 for_each_governor_table(governor
)
229 thermal_unregister_governor(*governor
);
232 static int __init
thermal_register_governors(void)
235 struct thermal_governor
**governor
;
237 for_each_governor_table(governor
) {
238 ret
= thermal_register_governor(*governor
);
240 pr_err("Failed to register governor: '%s'",
245 pr_info("Registered thermal governor '%s'",
250 struct thermal_governor
**gov
;
252 for_each_governor_table(gov
) {
255 thermal_unregister_governor(*gov
);
262 static int __thermal_zone_device_set_mode(struct thermal_zone_device
*tz
,
263 enum thermal_device_mode mode
)
265 if (tz
->ops
.change_mode
) {
268 ret
= tz
->ops
.change_mode(tz
, mode
);
278 static void thermal_zone_broken_disable(struct thermal_zone_device
*tz
)
280 struct thermal_trip_desc
*td
;
282 dev_err(&tz
->device
, "Unable to get temperature, disabling!\n");
284 * This function only runs for enabled thermal zones, so no need to
285 * check for the current mode.
287 __thermal_zone_device_set_mode(tz
, THERMAL_DEVICE_DISABLED
);
288 thermal_notify_tz_disable(tz
);
290 for_each_trip_desc(tz
, td
) {
291 if (td
->trip
.type
== THERMAL_TRIP_CRITICAL
&&
292 td
->trip
.temperature
> THERMAL_TEMP_INVALID
) {
293 dev_crit(&tz
->device
,
294 "Disabled thermal zone with critical trip point\n");
301 * Zone update section: main control loop applied to each zone while monitoring
302 * in polling mode. The monitoring is done using a workqueue.
303 * Same update may be done on a zone by calling thermal_zone_device_update().
306 * - Non-critical trips will invoke the governor responsible for that zone;
307 * - Hot trips will produce a notification to userspace;
308 * - Critical trip point will cause a system shutdown.
310 static void thermal_zone_device_set_polling(struct thermal_zone_device
*tz
,
314 delay
= round_jiffies_relative(delay
);
316 mod_delayed_work(system_freezable_power_efficient_wq
, &tz
->poll_queue
, delay
);
319 static void thermal_zone_recheck(struct thermal_zone_device
*tz
, int error
)
321 if (error
== -EAGAIN
) {
322 thermal_zone_device_set_polling(tz
, THERMAL_RECHECK_DELAY
);
327 * Print the message once to reduce log noise. It will be followed by
328 * another one if the temperature cannot be determined after multiple
331 if (tz
->recheck_delay_jiffies
== THERMAL_RECHECK_DELAY
)
332 dev_info(&tz
->device
, "Temperature check failed (%d)\n", error
);
334 thermal_zone_device_set_polling(tz
, tz
->recheck_delay_jiffies
);
336 tz
->recheck_delay_jiffies
+= max(tz
->recheck_delay_jiffies
>> 1, 1ULL);
337 if (tz
->recheck_delay_jiffies
> THERMAL_MAX_RECHECK_DELAY
) {
338 thermal_zone_broken_disable(tz
);
340 * Restore the original recheck delay value to allow the thermal
341 * zone to try to recover when it is reenabled by user space.
343 tz
->recheck_delay_jiffies
= THERMAL_RECHECK_DELAY
;
347 static void monitor_thermal_zone(struct thermal_zone_device
*tz
)
349 if (tz
->passive
> 0 && tz
->passive_delay_jiffies
)
350 thermal_zone_device_set_polling(tz
, tz
->passive_delay_jiffies
);
351 else if (tz
->polling_delay_jiffies
)
352 thermal_zone_device_set_polling(tz
, tz
->polling_delay_jiffies
);
355 static struct thermal_governor
*thermal_get_tz_governor(struct thermal_zone_device
*tz
)
363 void thermal_governor_update_tz(struct thermal_zone_device
*tz
,
364 enum thermal_notify_event reason
)
366 if (!tz
->governor
|| !tz
->governor
->update_tz
)
369 tz
->governor
->update_tz(tz
, reason
);
372 static void thermal_zone_device_halt(struct thermal_zone_device
*tz
, bool shutdown
)
375 * poweroff_delay_ms must be a carefully profiled positive value.
376 * Its a must for forced_emergency_poweroff_work to be scheduled.
378 int poweroff_delay_ms
= CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS
;
379 const char *msg
= "Temperature too high";
381 dev_emerg(&tz
->device
, "%s: critical temperature reached\n", tz
->type
);
384 hw_protection_shutdown(msg
, poweroff_delay_ms
);
386 hw_protection_reboot(msg
, poweroff_delay_ms
);
389 void thermal_zone_device_critical(struct thermal_zone_device
*tz
)
391 thermal_zone_device_halt(tz
, true);
393 EXPORT_SYMBOL(thermal_zone_device_critical
);
395 void thermal_zone_device_critical_reboot(struct thermal_zone_device
*tz
)
397 thermal_zone_device_halt(tz
, false);
400 static void handle_critical_trips(struct thermal_zone_device
*tz
,
401 const struct thermal_trip
*trip
)
403 trace_thermal_zone_trip(tz
, thermal_zone_trip_id(tz
, trip
), trip
->type
);
405 if (trip
->type
== THERMAL_TRIP_CRITICAL
)
406 tz
->ops
.critical(tz
);
407 else if (tz
->ops
.hot
)
411 static void move_trip_to_sorted_list(struct thermal_trip_desc
*td
,
412 struct list_head
*list
)
414 struct thermal_trip_desc
*entry
;
417 * Delete upfront and then add to make relocation within the same list
420 list_del(&td
->list_node
);
422 /* Assume that the new entry is likely to be the last one. */
423 list_for_each_entry_reverse(entry
, list
, list_node
) {
424 if (entry
->threshold
<= td
->threshold
) {
425 list_add(&td
->list_node
, &entry
->list_node
);
429 list_add(&td
->list_node
, list
);
432 static void move_to_trips_high(struct thermal_zone_device
*tz
,
433 struct thermal_trip_desc
*td
)
435 td
->threshold
= td
->trip
.temperature
;
436 move_trip_to_sorted_list(td
, &tz
->trips_high
);
439 static void move_to_trips_reached(struct thermal_zone_device
*tz
,
440 struct thermal_trip_desc
*td
)
442 td
->threshold
= td
->trip
.temperature
- td
->trip
.hysteresis
;
443 move_trip_to_sorted_list(td
, &tz
->trips_reached
);
446 static void move_to_trips_invalid(struct thermal_zone_device
*tz
,
447 struct thermal_trip_desc
*td
)
449 td
->threshold
= INT_MAX
;
450 list_move(&td
->list_node
, &tz
->trips_invalid
);
453 static void thermal_governor_trip_crossed(struct thermal_governor
*governor
,
454 struct thermal_zone_device
*tz
,
455 const struct thermal_trip
*trip
,
458 if (trip
->type
== THERMAL_TRIP_HOT
|| trip
->type
== THERMAL_TRIP_CRITICAL
)
461 if (governor
->trip_crossed
)
462 governor
->trip_crossed(tz
, trip
, crossed_up
);
465 static void thermal_trip_crossed(struct thermal_zone_device
*tz
,
466 struct thermal_trip_desc
*td
,
467 struct thermal_governor
*governor
,
470 const struct thermal_trip
*trip
= &td
->trip
;
473 if (trip
->type
== THERMAL_TRIP_PASSIVE
)
475 else if (trip
->type
== THERMAL_TRIP_CRITICAL
||
476 trip
->type
== THERMAL_TRIP_HOT
)
477 handle_critical_trips(tz
, trip
);
479 thermal_notify_tz_trip_up(tz
, trip
);
480 thermal_debug_tz_trip_up(tz
, trip
);
482 if (trip
->type
== THERMAL_TRIP_PASSIVE
) {
484 WARN_ON(tz
->passive
< 0);
486 thermal_notify_tz_trip_down(tz
, trip
);
487 thermal_debug_tz_trip_down(tz
, trip
);
489 thermal_governor_trip_crossed(governor
, tz
, trip
, crossed_up
);
492 void thermal_zone_set_trip_hyst(struct thermal_zone_device
*tz
,
493 struct thermal_trip
*trip
, int hyst
)
495 struct thermal_trip_desc
*td
= trip_to_trip_desc(trip
);
497 WRITE_ONCE(trip
->hysteresis
, hyst
);
498 thermal_notify_tz_trip_change(tz
, trip
);
500 * If the zone temperature is above or at the trip tmperature, the trip
501 * is in the trips_reached list and its threshold is equal to its low
502 * temperature. It needs to stay in that list, but its threshold needs
503 * to be updated and the list ordering may need to be restored.
505 if (tz
->temperature
>= td
->threshold
)
506 move_to_trips_reached(tz
, td
);
509 void thermal_zone_set_trip_temp(struct thermal_zone_device
*tz
,
510 struct thermal_trip
*trip
, int temp
)
512 struct thermal_trip_desc
*td
= trip_to_trip_desc(trip
);
513 int old_temp
= trip
->temperature
;
515 if (old_temp
== temp
)
518 WRITE_ONCE(trip
->temperature
, temp
);
519 thermal_notify_tz_trip_change(tz
, trip
);
521 if (old_temp
== THERMAL_TEMP_INVALID
) {
523 * The trip was invalid before the change, so move it to the
524 * trips_high list regardless of the new temperature value
525 * because there is no mitigation under way for it. If a
526 * mitigation needs to be started, the trip will be moved to the
527 * trips_reached list later.
529 move_to_trips_high(tz
, td
);
533 if (temp
== THERMAL_TEMP_INVALID
) {
535 * If the trip is in the trips_reached list, mitigation is under
536 * way for it and it needs to be stopped because the trip is
537 * effectively going away.
539 if (tz
->temperature
>= td
->threshold
)
540 thermal_trip_crossed(tz
, td
, thermal_get_tz_governor(tz
), false);
542 move_to_trips_invalid(tz
, td
);
547 * The trip stays on its current list, but its threshold needs to be
548 * updated due to the temperature change and the list ordering may need
551 if (tz
->temperature
>= td
->threshold
)
552 move_to_trips_reached(tz
, td
);
554 move_to_trips_high(tz
, td
);
556 EXPORT_SYMBOL_GPL(thermal_zone_set_trip_temp
);
558 static void thermal_zone_handle_trips(struct thermal_zone_device
*tz
,
559 struct thermal_governor
*governor
,
562 struct thermal_trip_desc
*td
, *next
;
563 LIST_HEAD(way_down_list
);
565 /* Check the trips that were below or at the zone temperature. */
566 list_for_each_entry_safe_reverse(td
, next
, &tz
->trips_reached
, list_node
) {
567 if (td
->threshold
<= tz
->temperature
)
570 thermal_trip_crossed(tz
, td
, governor
, false);
572 * The current trips_high list needs to be processed before
573 * adding new entries to it, so put them on a temporary list.
575 list_move(&td
->list_node
, &way_down_list
);
577 /* Check the trips that were previously above the zone temperature. */
578 list_for_each_entry_safe(td
, next
, &tz
->trips_high
, list_node
) {
579 if (td
->threshold
> tz
->temperature
)
582 thermal_trip_crossed(tz
, td
, governor
, true);
583 move_to_trips_reached(tz
, td
);
585 /* Move all of the trips from the temporary list to trips_high. */
586 list_for_each_entry_safe(td
, next
, &way_down_list
, list_node
)
587 move_to_trips_high(tz
, td
);
589 if (!list_empty(&tz
->trips_reached
)) {
590 td
= list_last_entry(&tz
->trips_reached
,
591 struct thermal_trip_desc
, list_node
);
593 * Set the "low" value below the current trip threshold in case
594 * the zone temperature is at that threshold and stays there,
595 * which would trigger a new interrupt immediately in vain.
597 *low
= td
->threshold
- 1;
599 if (!list_empty(&tz
->trips_high
)) {
600 td
= list_first_entry(&tz
->trips_high
,
601 struct thermal_trip_desc
, list_node
);
602 *high
= td
->threshold
;
606 void __thermal_zone_device_update(struct thermal_zone_device
*tz
,
607 enum thermal_notify_event event
)
609 struct thermal_governor
*governor
= thermal_get_tz_governor(tz
);
610 int low
= -INT_MAX
, high
= INT_MAX
;
613 if (tz
->state
!= TZ_STATE_READY
|| tz
->mode
!= THERMAL_DEVICE_ENABLED
)
616 ret
= __thermal_zone_get_temp(tz
, &temp
);
618 thermal_zone_recheck(tz
, ret
);
620 } else if (temp
<= THERMAL_TEMP_INVALID
) {
622 * Special case: No valid temperature value is available, but
623 * the zone owner does not want the core to do anything about
624 * it. Continue regular zone polling if needed, so that this
625 * function can be called again, but skip everything else.
630 tz
->recheck_delay_jiffies
= THERMAL_RECHECK_DELAY
;
632 tz
->last_temperature
= tz
->temperature
;
633 tz
->temperature
= temp
;
635 trace_thermal_temperature(tz
);
637 thermal_genl_sampling_temp(tz
->id
, temp
);
639 tz
->notify_event
= event
;
641 thermal_zone_handle_trips(tz
, governor
, &low
, &high
);
643 thermal_thresholds_handle(tz
, &low
, &high
);
645 thermal_zone_set_trips(tz
, low
, high
);
647 if (governor
->manage
)
648 governor
->manage(tz
);
650 thermal_debug_update_trip_stats(tz
);
653 monitor_thermal_zone(tz
);
656 static int thermal_zone_device_set_mode(struct thermal_zone_device
*tz
,
657 enum thermal_device_mode mode
)
661 guard(thermal_zone
)(tz
);
663 /* do nothing if mode isn't changing */
664 if (mode
== tz
->mode
)
667 ret
= __thermal_zone_device_set_mode(tz
, mode
);
671 __thermal_zone_device_update(tz
, THERMAL_EVENT_UNSPECIFIED
);
673 if (mode
== THERMAL_DEVICE_ENABLED
)
674 thermal_notify_tz_enable(tz
);
676 thermal_notify_tz_disable(tz
);
681 int thermal_zone_device_enable(struct thermal_zone_device
*tz
)
683 return thermal_zone_device_set_mode(tz
, THERMAL_DEVICE_ENABLED
);
685 EXPORT_SYMBOL_GPL(thermal_zone_device_enable
);
687 int thermal_zone_device_disable(struct thermal_zone_device
*tz
)
689 return thermal_zone_device_set_mode(tz
, THERMAL_DEVICE_DISABLED
);
691 EXPORT_SYMBOL_GPL(thermal_zone_device_disable
);
693 static bool thermal_zone_is_present(struct thermal_zone_device
*tz
)
695 return !list_empty(&tz
->node
);
698 void thermal_zone_device_update(struct thermal_zone_device
*tz
,
699 enum thermal_notify_event event
)
701 guard(thermal_zone
)(tz
);
703 if (thermal_zone_is_present(tz
))
704 __thermal_zone_device_update(tz
, event
);
706 EXPORT_SYMBOL_GPL(thermal_zone_device_update
);
708 int for_each_thermal_governor(int (*cb
)(struct thermal_governor
*, void *),
711 struct thermal_governor
*gov
;
713 guard(mutex
)(&thermal_governor_lock
);
715 list_for_each_entry(gov
, &thermal_governor_list
, governor_list
) {
726 int for_each_thermal_cooling_device(int (*cb
)(struct thermal_cooling_device
*,
729 struct thermal_cooling_device
*cdev
;
731 guard(mutex
)(&thermal_list_lock
);
733 list_for_each_entry(cdev
, &thermal_cdev_list
, node
) {
736 ret
= cb(cdev
, data
);
744 int for_each_thermal_zone(int (*cb
)(struct thermal_zone_device
*, void *),
747 struct thermal_zone_device
*tz
;
749 guard(mutex
)(&thermal_list_lock
);
751 list_for_each_entry(tz
, &thermal_tz_list
, node
) {
762 struct thermal_zone_device
*thermal_zone_get_by_id(int id
)
764 struct thermal_zone_device
*tz
;
766 guard(mutex
)(&thermal_list_lock
);
768 list_for_each_entry(tz
, &thermal_tz_list
, node
) {
770 get_device(&tz
->device
);
779 * Device management section: cooling devices, zones devices, and binding
781 * Set of functions provided by the thermal core for:
782 * - cooling devices lifecycle: registration, unregistration,
783 * binding, and unbinding.
784 * - thermal zone devices lifecycle: registration, unregistration,
785 * binding, and unbinding.
788 static int thermal_instance_add(struct thermal_instance
*new_instance
,
789 struct thermal_cooling_device
*cdev
,
790 struct thermal_trip_desc
*td
)
792 struct thermal_instance
*instance
;
794 list_for_each_entry(instance
, &td
->thermal_instances
, trip_node
) {
795 if (instance
->cdev
== cdev
)
799 list_add_tail(&new_instance
->trip_node
, &td
->thermal_instances
);
801 guard(cooling_dev
)(cdev
);
803 list_add_tail(&new_instance
->cdev_node
, &cdev
->thermal_instances
);
809 * thermal_bind_cdev_to_trip - bind a cooling device to a thermal zone
810 * @tz: pointer to struct thermal_zone_device
811 * @td: descriptor of the trip point to bind @cdev to
812 * @cdev: pointer to struct thermal_cooling_device
813 * @cool_spec: cooling specification for the trip point and @cdev
815 * This interface function bind a thermal cooling device to the certain trip
816 * point of a thermal zone device.
817 * This function is usually called in the thermal zone device .bind callback.
819 * Return: 0 on success, the proper error value otherwise.
821 static int thermal_bind_cdev_to_trip(struct thermal_zone_device
*tz
,
822 struct thermal_trip_desc
*td
,
823 struct thermal_cooling_device
*cdev
,
824 struct cooling_spec
*cool_spec
)
826 struct thermal_instance
*dev
;
830 /* lower default 0, upper default max_state */
831 if (cool_spec
->lower
== THERMAL_NO_LIMIT
)
832 cool_spec
->lower
= 0;
834 if (cool_spec
->upper
== THERMAL_NO_LIMIT
) {
835 cool_spec
->upper
= cdev
->max_state
;
836 upper_no_limit
= true;
838 upper_no_limit
= false;
841 if (cool_spec
->lower
> cool_spec
->upper
|| cool_spec
->upper
> cdev
->max_state
)
844 dev
= kzalloc(sizeof(*dev
), GFP_KERNEL
);
849 dev
->trip
= &td
->trip
;
850 dev
->upper
= cool_spec
->upper
;
851 dev
->upper_no_limit
= upper_no_limit
;
852 dev
->lower
= cool_spec
->lower
;
853 dev
->target
= THERMAL_NO_TARGET
;
854 dev
->weight
= cool_spec
->weight
;
856 result
= ida_alloc(&tz
->ida
, GFP_KERNEL
);
861 sprintf(dev
->name
, "cdev%d", dev
->id
);
863 sysfs_create_link(&tz
->device
.kobj
, &cdev
->device
.kobj
, dev
->name
);
867 snprintf(dev
->attr_name
, sizeof(dev
->attr_name
), "cdev%d_trip_point",
869 sysfs_attr_init(&dev
->attr
.attr
);
870 dev
->attr
.attr
.name
= dev
->attr_name
;
871 dev
->attr
.attr
.mode
= 0444;
872 dev
->attr
.show
= trip_point_show
;
873 result
= device_create_file(&tz
->device
, &dev
->attr
);
875 goto remove_symbol_link
;
877 snprintf(dev
->weight_attr_name
, sizeof(dev
->weight_attr_name
),
878 "cdev%d_weight", dev
->id
);
879 sysfs_attr_init(&dev
->weight_attr
.attr
);
880 dev
->weight_attr
.attr
.name
= dev
->weight_attr_name
;
881 dev
->weight_attr
.attr
.mode
= S_IWUSR
| S_IRUGO
;
882 dev
->weight_attr
.show
= weight_show
;
883 dev
->weight_attr
.store
= weight_store
;
884 result
= device_create_file(&tz
->device
, &dev
->weight_attr
);
886 goto remove_trip_file
;
888 result
= thermal_instance_add(dev
, cdev
, td
);
890 goto remove_weight_file
;
892 thermal_governor_update_tz(tz
, THERMAL_TZ_BIND_CDEV
);
897 device_remove_file(&tz
->device
, &dev
->weight_attr
);
899 device_remove_file(&tz
->device
, &dev
->attr
);
901 sysfs_remove_link(&tz
->device
.kobj
, dev
->name
);
903 ida_free(&tz
->ida
, dev
->id
);
909 static void thermal_instance_delete(struct thermal_instance
*instance
)
911 list_del(&instance
->trip_node
);
913 guard(cooling_dev
)(instance
->cdev
);
915 list_del(&instance
->cdev_node
);
919 * thermal_unbind_cdev_from_trip - unbind a cooling device from a thermal zone.
920 * @tz: pointer to a struct thermal_zone_device.
921 * @td: descriptor of the trip point to unbind @cdev from
922 * @cdev: pointer to a struct thermal_cooling_device.
924 * This interface function unbind a thermal cooling device from the certain
925 * trip point of a thermal zone device.
926 * This function is usually called in the thermal zone device .unbind callback.
928 static void thermal_unbind_cdev_from_trip(struct thermal_zone_device
*tz
,
929 struct thermal_trip_desc
*td
,
930 struct thermal_cooling_device
*cdev
)
932 struct thermal_instance
*pos
, *next
;
934 list_for_each_entry_safe(pos
, next
, &td
->thermal_instances
, trip_node
) {
935 if (pos
->cdev
== cdev
) {
936 thermal_instance_delete(pos
);
944 thermal_governor_update_tz(tz
, THERMAL_TZ_UNBIND_CDEV
);
946 device_remove_file(&tz
->device
, &pos
->weight_attr
);
947 device_remove_file(&tz
->device
, &pos
->attr
);
948 sysfs_remove_link(&tz
->device
.kobj
, pos
->name
);
949 ida_free(&tz
->ida
, pos
->id
);
953 static void thermal_release(struct device
*dev
)
955 struct thermal_zone_device
*tz
;
956 struct thermal_cooling_device
*cdev
;
958 if (!strncmp(dev_name(dev
), "thermal_zone",
959 sizeof("thermal_zone") - 1)) {
960 tz
= to_thermal_zone(dev
);
961 thermal_zone_destroy_device_groups(tz
);
962 mutex_destroy(&tz
->lock
);
963 complete(&tz
->removal
);
964 } else if (!strncmp(dev_name(dev
), "cooling_device",
965 sizeof("cooling_device") - 1)) {
966 cdev
= to_cooling_device(dev
);
967 thermal_cooling_device_destroy_sysfs(cdev
);
968 kfree_const(cdev
->type
);
969 ida_free(&thermal_cdev_ida
, cdev
->id
);
974 static struct class *thermal_class
;
977 void print_bind_err_msg(struct thermal_zone_device
*tz
,
978 const struct thermal_trip_desc
*td
,
979 struct thermal_cooling_device
*cdev
, int ret
)
981 dev_err(&tz
->device
, "binding cdev %s to trip %d failed: %d\n",
982 cdev
->type
, thermal_zone_trip_id(tz
, &td
->trip
), ret
);
985 static bool __thermal_zone_cdev_bind(struct thermal_zone_device
*tz
,
986 struct thermal_cooling_device
*cdev
)
988 struct thermal_trip_desc
*td
;
989 bool update_tz
= false;
991 if (!tz
->ops
.should_bind
)
994 for_each_trip_desc(tz
, td
) {
995 struct cooling_spec c
= {
996 .upper
= THERMAL_NO_LIMIT
,
997 .lower
= THERMAL_NO_LIMIT
,
998 .weight
= THERMAL_WEIGHT_DEFAULT
1002 if (!tz
->ops
.should_bind(tz
, &td
->trip
, cdev
, &c
))
1005 ret
= thermal_bind_cdev_to_trip(tz
, td
, cdev
, &c
);
1007 print_bind_err_msg(tz
, td
, cdev
, ret
);
1017 static void thermal_zone_cdev_bind(struct thermal_zone_device
*tz
,
1018 struct thermal_cooling_device
*cdev
)
1020 guard(thermal_zone
)(tz
);
1022 if (__thermal_zone_cdev_bind(tz
, cdev
))
1023 __thermal_zone_device_update(tz
, THERMAL_EVENT_UNSPECIFIED
);
1026 static void thermal_cooling_device_init_complete(struct thermal_cooling_device
*cdev
)
1028 struct thermal_zone_device
*tz
;
1030 guard(mutex
)(&thermal_list_lock
);
1032 list_add(&cdev
->node
, &thermal_cdev_list
);
1034 list_for_each_entry(tz
, &thermal_tz_list
, node
)
1035 thermal_zone_cdev_bind(tz
, cdev
);
1039 * __thermal_cooling_device_register() - register a new thermal cooling device
1040 * @np: a pointer to a device tree node.
1041 * @type: the thermal cooling device type.
1042 * @devdata: device private data.
1043 * @ops: standard thermal cooling devices callbacks.
1045 * This interface function adds a new thermal cooling device (fan/processor/...)
1046 * to /sys/class/thermal/ folder as cooling_device[0-*]. It tries to bind itself
1047 * to all the thermal zone devices registered at the same time.
1048 * It also gives the opportunity to link the cooling device to a device tree
1049 * node, so that it can be bound to a thermal zone created out of device tree.
1051 * Return: a pointer to the created struct thermal_cooling_device or an
1052 * ERR_PTR. Caller must check return value with IS_ERR*() helpers.
1054 static struct thermal_cooling_device
*
1055 __thermal_cooling_device_register(struct device_node
*np
,
1056 const char *type
, void *devdata
,
1057 const struct thermal_cooling_device_ops
*ops
)
1059 struct thermal_cooling_device
*cdev
;
1060 unsigned long current_state
;
1063 if (!ops
|| !ops
->get_max_state
|| !ops
->get_cur_state
||
1064 !ops
->set_cur_state
)
1065 return ERR_PTR(-EINVAL
);
1068 return ERR_PTR(-ENODEV
);
1070 cdev
= kzalloc(sizeof(*cdev
), GFP_KERNEL
);
1072 return ERR_PTR(-ENOMEM
);
1074 ret
= ida_alloc(&thermal_cdev_ida
, GFP_KERNEL
);
1076 goto out_kfree_cdev
;
1080 cdev
->type
= kstrdup_const(type
? type
: "", GFP_KERNEL
);
1083 goto out_ida_remove
;
1086 mutex_init(&cdev
->lock
);
1087 INIT_LIST_HEAD(&cdev
->thermal_instances
);
1090 cdev
->updated
= false;
1091 cdev
->device
.class = thermal_class
;
1092 cdev
->devdata
= devdata
;
1094 ret
= cdev
->ops
->get_max_state(cdev
, &cdev
->max_state
);
1099 * The cooling device's current state is only needed for debug
1100 * initialization below, so a failure to get it does not cause
1101 * the entire cooling device initialization to fail. However,
1102 * the debug will not work for the device if its initial state
1103 * cannot be determined and drivers are responsible for ensuring
1104 * that this will not happen.
1106 ret
= cdev
->ops
->get_cur_state(cdev
, ¤t_state
);
1108 current_state
= ULONG_MAX
;
1110 thermal_cooling_device_setup_sysfs(cdev
);
1112 ret
= dev_set_name(&cdev
->device
, "cooling_device%d", cdev
->id
);
1114 goto out_cooling_dev
;
1116 ret
= device_register(&cdev
->device
);
1118 /* thermal_release() handles rest of the cleanup */
1119 put_device(&cdev
->device
);
1120 return ERR_PTR(ret
);
1123 if (current_state
<= cdev
->max_state
)
1124 thermal_debug_cdev_add(cdev
, current_state
);
1126 thermal_cooling_device_init_complete(cdev
);
1131 thermal_cooling_device_destroy_sysfs(cdev
);
1133 kfree_const(cdev
->type
);
1135 ida_free(&thermal_cdev_ida
, id
);
1138 return ERR_PTR(ret
);
1142 * thermal_cooling_device_register() - register a new thermal cooling device
1143 * @type: the thermal cooling device type.
1144 * @devdata: device private data.
1145 * @ops: standard thermal cooling devices callbacks.
1147 * This interface function adds a new thermal cooling device (fan/processor/...)
1148 * to /sys/class/thermal/ folder as cooling_device[0-*]. It tries to bind itself
1149 * to all the thermal zone devices registered at the same time.
1151 * Return: a pointer to the created struct thermal_cooling_device or an
1152 * ERR_PTR. Caller must check return value with IS_ERR*() helpers.
1154 struct thermal_cooling_device
*
1155 thermal_cooling_device_register(const char *type
, void *devdata
,
1156 const struct thermal_cooling_device_ops
*ops
)
1158 return __thermal_cooling_device_register(NULL
, type
, devdata
, ops
);
1160 EXPORT_SYMBOL_GPL(thermal_cooling_device_register
);
1163 * thermal_of_cooling_device_register() - register an OF thermal cooling device
1164 * @np: a pointer to a device tree node.
1165 * @type: the thermal cooling device type.
1166 * @devdata: device private data.
1167 * @ops: standard thermal cooling devices callbacks.
1169 * This function will register a cooling device with device tree node reference.
1170 * This interface function adds a new thermal cooling device (fan/processor/...)
1171 * to /sys/class/thermal/ folder as cooling_device[0-*]. It tries to bind itself
1172 * to all the thermal zone devices registered at the same time.
1174 * Return: a pointer to the created struct thermal_cooling_device or an
1175 * ERR_PTR. Caller must check return value with IS_ERR*() helpers.
1177 struct thermal_cooling_device
*
1178 thermal_of_cooling_device_register(struct device_node
*np
,
1179 const char *type
, void *devdata
,
1180 const struct thermal_cooling_device_ops
*ops
)
1182 return __thermal_cooling_device_register(np
, type
, devdata
, ops
);
1184 EXPORT_SYMBOL_GPL(thermal_of_cooling_device_register
);
1186 static void thermal_cooling_device_release(struct device
*dev
, void *res
)
1188 thermal_cooling_device_unregister(
1189 *(struct thermal_cooling_device
**)res
);
1193 * devm_thermal_of_cooling_device_register() - register an OF thermal cooling
1195 * @dev: a valid struct device pointer of a sensor device.
1196 * @np: a pointer to a device tree node.
1197 * @type: the thermal cooling device type.
1198 * @devdata: device private data.
1199 * @ops: standard thermal cooling devices callbacks.
1201 * This function will register a cooling device with device tree node reference.
1202 * This interface function adds a new thermal cooling device (fan/processor/...)
1203 * to /sys/class/thermal/ folder as cooling_device[0-*]. It tries to bind itself
1204 * to all the thermal zone devices registered at the same time.
1206 * Return: a pointer to the created struct thermal_cooling_device or an
1207 * ERR_PTR. Caller must check return value with IS_ERR*() helpers.
1209 struct thermal_cooling_device
*
1210 devm_thermal_of_cooling_device_register(struct device
*dev
,
1211 struct device_node
*np
,
1212 const char *type
, void *devdata
,
1213 const struct thermal_cooling_device_ops
*ops
)
1215 struct thermal_cooling_device
**ptr
, *tcd
;
1217 ptr
= devres_alloc(thermal_cooling_device_release
, sizeof(*ptr
),
1220 return ERR_PTR(-ENOMEM
);
1222 tcd
= __thermal_cooling_device_register(np
, type
, devdata
, ops
);
1229 devres_add(dev
, ptr
);
1233 EXPORT_SYMBOL_GPL(devm_thermal_of_cooling_device_register
);
1235 static bool thermal_cooling_device_present(struct thermal_cooling_device
*cdev
)
1237 struct thermal_cooling_device
*pos
= NULL
;
1239 list_for_each_entry(pos
, &thermal_cdev_list
, node
) {
1248 * thermal_cooling_device_update - Update a cooling device object
1249 * @cdev: Target cooling device.
1251 * Update @cdev to reflect a change of the underlying hardware or platform.
1253 * Must be called when the maximum cooling state of @cdev becomes invalid and so
1254 * its .get_max_state() callback needs to be run to produce the new maximum
1255 * cooling state value.
1257 void thermal_cooling_device_update(struct thermal_cooling_device
*cdev
)
1259 struct thermal_instance
*ti
;
1260 unsigned long state
;
1262 if (IS_ERR_OR_NULL(cdev
))
1266 * Hold thermal_list_lock throughout the update to prevent the device
1267 * from going away while being updated.
1269 guard(mutex
)(&thermal_list_lock
);
1271 if (!thermal_cooling_device_present(cdev
))
1275 * Update under the cdev lock to prevent the state from being set beyond
1276 * the new limit concurrently.
1278 guard(cooling_dev
)(cdev
);
1280 if (cdev
->ops
->get_max_state(cdev
, &cdev
->max_state
))
1283 thermal_cooling_device_stats_reinit(cdev
);
1285 list_for_each_entry(ti
, &cdev
->thermal_instances
, cdev_node
) {
1286 if (ti
->upper
== cdev
->max_state
)
1289 if (ti
->upper
< cdev
->max_state
) {
1290 if (ti
->upper_no_limit
)
1291 ti
->upper
= cdev
->max_state
;
1296 ti
->upper
= cdev
->max_state
;
1297 if (ti
->lower
> ti
->upper
)
1298 ti
->lower
= ti
->upper
;
1300 if (ti
->target
== THERMAL_NO_TARGET
)
1303 if (ti
->target
> ti
->upper
)
1304 ti
->target
= ti
->upper
;
1307 if (cdev
->ops
->get_cur_state(cdev
, &state
) || state
> cdev
->max_state
)
1310 thermal_cooling_device_stats_update(cdev
, state
);
1312 EXPORT_SYMBOL_GPL(thermal_cooling_device_update
);
1314 static void __thermal_zone_cdev_unbind(struct thermal_zone_device
*tz
,
1315 struct thermal_cooling_device
*cdev
)
1317 struct thermal_trip_desc
*td
;
1319 for_each_trip_desc(tz
, td
)
1320 thermal_unbind_cdev_from_trip(tz
, td
, cdev
);
1323 static void thermal_zone_cdev_unbind(struct thermal_zone_device
*tz
,
1324 struct thermal_cooling_device
*cdev
)
1326 guard(thermal_zone
)(tz
);
1328 __thermal_zone_cdev_unbind(tz
, cdev
);
1331 static bool thermal_cooling_device_exit(struct thermal_cooling_device
*cdev
)
1333 struct thermal_zone_device
*tz
;
1335 guard(mutex
)(&thermal_list_lock
);
1337 if (!thermal_cooling_device_present(cdev
))
1340 list_del(&cdev
->node
);
1342 list_for_each_entry(tz
, &thermal_tz_list
, node
)
1343 thermal_zone_cdev_unbind(tz
, cdev
);
1349 * thermal_cooling_device_unregister() - removes a thermal cooling device
1350 * @cdev: Thermal cooling device to remove.
1352 void thermal_cooling_device_unregister(struct thermal_cooling_device
*cdev
)
1357 thermal_debug_cdev_remove(cdev
);
1359 if (thermal_cooling_device_exit(cdev
))
1360 device_unregister(&cdev
->device
);
1362 EXPORT_SYMBOL_GPL(thermal_cooling_device_unregister
);
1364 int thermal_zone_get_crit_temp(struct thermal_zone_device
*tz
, int *temp
)
1366 const struct thermal_trip_desc
*td
;
1369 if (tz
->ops
.get_crit_temp
)
1370 return tz
->ops
.get_crit_temp(tz
, temp
);
1372 guard(thermal_zone
)(tz
);
1374 for_each_trip_desc(tz
, td
) {
1375 const struct thermal_trip
*trip
= &td
->trip
;
1377 if (trip
->type
== THERMAL_TRIP_CRITICAL
) {
1378 *temp
= trip
->temperature
;
1386 EXPORT_SYMBOL_GPL(thermal_zone_get_crit_temp
);
1388 static void thermal_zone_device_check(struct work_struct
*work
)
1390 struct thermal_zone_device
*tz
= container_of(work
, struct
1391 thermal_zone_device
,
1393 thermal_zone_device_update(tz
, THERMAL_EVENT_UNSPECIFIED
);
1396 static void thermal_zone_device_init(struct thermal_zone_device
*tz
)
1398 struct thermal_trip_desc
*td
, *next
;
1400 INIT_DELAYED_WORK(&tz
->poll_queue
, thermal_zone_device_check
);
1402 tz
->temperature
= THERMAL_TEMP_INIT
;
1404 tz
->prev_low_trip
= -INT_MAX
;
1405 tz
->prev_high_trip
= INT_MAX
;
1406 for_each_trip_desc(tz
, td
) {
1407 struct thermal_instance
*instance
;
1409 list_for_each_entry(instance
, &td
->thermal_instances
, trip_node
)
1410 instance
->initialized
= false;
1413 * At this point, all valid trips need to be moved to trips_high so that
1414 * mitigation can be started if the zone temperature is above them.
1416 list_for_each_entry_safe(td
, next
, &tz
->trips_invalid
, list_node
) {
1417 if (td
->trip
.temperature
!= THERMAL_TEMP_INVALID
)
1418 move_to_trips_high(tz
, td
);
1420 /* The trips_reached list may not be empty during system resume. */
1421 list_for_each_entry_safe(td
, next
, &tz
->trips_reached
, list_node
) {
1422 if (td
->trip
.temperature
== THERMAL_TEMP_INVALID
)
1423 move_to_trips_invalid(tz
, td
);
1425 move_to_trips_high(tz
, td
);
1429 static int thermal_zone_init_governor(struct thermal_zone_device
*tz
)
1431 struct thermal_governor
*governor
;
1433 guard(mutex
)(&thermal_governor_lock
);
1436 governor
= __find_governor(tz
->tzp
->governor_name
);
1438 governor
= def_governor
;
1440 return thermal_set_governor(tz
, governor
);
1443 static void thermal_zone_init_complete(struct thermal_zone_device
*tz
)
1445 struct thermal_cooling_device
*cdev
;
1447 guard(mutex
)(&thermal_list_lock
);
1449 list_add_tail(&tz
->node
, &thermal_tz_list
);
1451 guard(thermal_zone
)(tz
);
1453 /* Bind cooling devices for this zone. */
1454 list_for_each_entry(cdev
, &thermal_cdev_list
, node
)
1455 __thermal_zone_cdev_bind(tz
, cdev
);
1457 tz
->state
&= ~TZ_STATE_FLAG_INIT
;
1459 * If system suspend or resume is in progress at this point, the
1460 * new thermal zone needs to be marked as suspended because
1461 * thermal_pm_notify() has run already.
1463 if (thermal_pm_suspended
)
1464 tz
->state
|= TZ_STATE_FLAG_SUSPENDED
;
1466 __thermal_zone_device_update(tz
, THERMAL_EVENT_UNSPECIFIED
);
1470 * thermal_zone_device_register_with_trips() - register a new thermal zone device
1471 * @type: the thermal zone device type
1472 * @trips: a pointer to an array of thermal trips
1473 * @num_trips: the number of trip points the thermal zone support
1474 * @devdata: private device data
1475 * @ops: standard thermal zone device callbacks
1476 * @tzp: thermal zone platform parameters
1477 * @passive_delay: number of milliseconds to wait between polls when
1478 * performing passive cooling
1479 * @polling_delay: number of milliseconds to wait between polls when checking
1480 * whether trip points have been crossed (0 for interrupt
1483 * This interface function adds a new thermal zone device (sensor) to
1484 * /sys/class/thermal folder as thermal_zone[0-*]. It tries to bind all the
1485 * thermal cooling devices registered at the same time.
1486 * thermal_zone_device_unregister() must be called when the device is no
1487 * longer needed. The passive cooling depends on the .get_trend() return value.
1489 * Return: a pointer to the created struct thermal_zone_device or an
1490 * in case of error, an ERR_PTR. Caller must check return value with
1491 * IS_ERR*() helpers.
1493 struct thermal_zone_device
*
1494 thermal_zone_device_register_with_trips(const char *type
,
1495 const struct thermal_trip
*trips
,
1496 int num_trips
, void *devdata
,
1497 const struct thermal_zone_device_ops
*ops
,
1498 const struct thermal_zone_params
*tzp
,
1499 unsigned int passive_delay
,
1500 unsigned int polling_delay
)
1502 const struct thermal_trip
*trip
= trips
;
1503 struct thermal_zone_device
*tz
;
1504 struct thermal_trip_desc
*td
;
1508 if (!type
|| strlen(type
) == 0) {
1509 pr_err("No thermal zone type defined\n");
1510 return ERR_PTR(-EINVAL
);
1513 if (strlen(type
) >= THERMAL_NAME_LENGTH
) {
1514 pr_err("Thermal zone name (%s) too long, should be under %d chars\n",
1515 type
, THERMAL_NAME_LENGTH
);
1516 return ERR_PTR(-EINVAL
);
1519 if (num_trips
< 0) {
1520 pr_err("Incorrect number of thermal trips\n");
1521 return ERR_PTR(-EINVAL
);
1524 if (!ops
|| !ops
->get_temp
) {
1525 pr_err("Thermal zone device ops not defined or invalid\n");
1526 return ERR_PTR(-EINVAL
);
1529 if (num_trips
> 0 && !trips
)
1530 return ERR_PTR(-EINVAL
);
1532 if (polling_delay
&& passive_delay
> polling_delay
)
1533 return ERR_PTR(-EINVAL
);
1536 return ERR_PTR(-ENODEV
);
1538 tz
= kzalloc(struct_size(tz
, trips
, num_trips
), GFP_KERNEL
);
1540 return ERR_PTR(-ENOMEM
);
1543 tz
->tzp
= kmemdup(tzp
, sizeof(*tzp
), GFP_KERNEL
);
1550 INIT_LIST_HEAD(&tz
->node
);
1551 INIT_LIST_HEAD(&tz
->trips_high
);
1552 INIT_LIST_HEAD(&tz
->trips_reached
);
1553 INIT_LIST_HEAD(&tz
->trips_invalid
);
1555 mutex_init(&tz
->lock
);
1556 init_completion(&tz
->removal
);
1557 init_completion(&tz
->resume
);
1558 id
= ida_alloc(&thermal_tz_ida
, GFP_KERNEL
);
1565 strscpy(tz
->type
, type
, sizeof(tz
->type
));
1568 if (!tz
->ops
.critical
)
1569 tz
->ops
.critical
= thermal_zone_device_critical
;
1571 tz
->device
.class = thermal_class
;
1572 tz
->devdata
= devdata
;
1573 tz
->num_trips
= num_trips
;
1574 for_each_trip_desc(tz
, td
) {
1576 INIT_LIST_HEAD(&td
->thermal_instances
);
1577 INIT_LIST_HEAD(&td
->list_node
);
1579 * Mark all thresholds as invalid to start with even though
1580 * this only matters for the trips that start as invalid and
1581 * become valid later.
1583 move_to_trips_invalid(tz
, td
);
1586 tz
->polling_delay_jiffies
= msecs_to_jiffies(polling_delay
);
1587 tz
->passive_delay_jiffies
= msecs_to_jiffies(passive_delay
);
1588 tz
->recheck_delay_jiffies
= THERMAL_RECHECK_DELAY
;
1590 tz
->state
= TZ_STATE_FLAG_INIT
;
1593 /* Add nodes that are always present via .groups */
1594 result
= thermal_zone_create_device_groups(tz
);
1598 result
= dev_set_name(&tz
->device
, "thermal_zone%d", tz
->id
);
1600 thermal_zone_destroy_device_groups(tz
);
1603 thermal_zone_device_init(tz
);
1604 result
= device_register(&tz
->device
);
1606 goto release_device
;
1608 result
= thermal_zone_init_governor(tz
);
1612 if (!tz
->tzp
|| !tz
->tzp
->no_hwmon
) {
1613 result
= thermal_add_hwmon_sysfs(tz
);
1618 result
= thermal_thresholds_init(tz
);
1622 thermal_zone_init_complete(tz
);
1624 thermal_notify_tz_create(tz
);
1626 thermal_debug_tz_add(tz
);
1631 thermal_remove_hwmon_sysfs(tz
);
1633 device_del(&tz
->device
);
1635 put_device(&tz
->device
);
1637 ida_free(&thermal_tz_ida
, id
);
1642 return ERR_PTR(result
);
1644 EXPORT_SYMBOL_GPL(thermal_zone_device_register_with_trips
);
1646 struct thermal_zone_device
*thermal_tripless_zone_device_register(
1649 const struct thermal_zone_device_ops
*ops
,
1650 const struct thermal_zone_params
*tzp
)
1652 return thermal_zone_device_register_with_trips(type
, NULL
, 0, devdata
,
1655 EXPORT_SYMBOL_GPL(thermal_tripless_zone_device_register
);
1657 void *thermal_zone_device_priv(struct thermal_zone_device
*tzd
)
1659 return tzd
->devdata
;
1661 EXPORT_SYMBOL_GPL(thermal_zone_device_priv
);
1663 const char *thermal_zone_device_type(struct thermal_zone_device
*tzd
)
1667 EXPORT_SYMBOL_GPL(thermal_zone_device_type
);
1669 int thermal_zone_device_id(struct thermal_zone_device
*tzd
)
1673 EXPORT_SYMBOL_GPL(thermal_zone_device_id
);
1675 struct device
*thermal_zone_device(struct thermal_zone_device
*tzd
)
1677 return &tzd
->device
;
1679 EXPORT_SYMBOL_GPL(thermal_zone_device
);
1681 static bool thermal_zone_exit(struct thermal_zone_device
*tz
)
1683 struct thermal_cooling_device
*cdev
;
1685 guard(mutex
)(&thermal_list_lock
);
1687 if (list_empty(&tz
->node
))
1690 guard(thermal_zone
)(tz
);
1692 tz
->state
|= TZ_STATE_FLAG_EXIT
;
1693 list_del_init(&tz
->node
);
1695 /* Unbind all cdevs associated with this thermal zone. */
1696 list_for_each_entry(cdev
, &thermal_cdev_list
, node
)
1697 __thermal_zone_cdev_unbind(tz
, cdev
);
1703 * thermal_zone_device_unregister - removes the registered thermal zone device
1704 * @tz: the thermal zone device to remove
1706 void thermal_zone_device_unregister(struct thermal_zone_device
*tz
)
1711 thermal_debug_tz_remove(tz
);
1713 if (!thermal_zone_exit(tz
))
1716 cancel_delayed_work_sync(&tz
->poll_queue
);
1718 thermal_set_governor(tz
, NULL
);
1720 thermal_thresholds_exit(tz
);
1721 thermal_remove_hwmon_sysfs(tz
);
1722 ida_free(&thermal_tz_ida
, tz
->id
);
1723 ida_destroy(&tz
->ida
);
1725 device_del(&tz
->device
);
1726 put_device(&tz
->device
);
1728 thermal_notify_tz_delete(tz
);
1730 wait_for_completion(&tz
->removal
);
1734 EXPORT_SYMBOL_GPL(thermal_zone_device_unregister
);
1737 * thermal_zone_get_zone_by_name() - search for a zone and returns its ref
1738 * @name: thermal zone name to fetch the temperature
1740 * When only one zone is found with the passed name, returns a reference to it.
1742 * Return: On success returns a reference to an unique thermal zone with
1743 * matching name equals to @name, an ERR_PTR otherwise (-EINVAL for invalid
1744 * paramenters, -ENODEV for not found and -EEXIST for multiple matches).
1746 struct thermal_zone_device
*thermal_zone_get_zone_by_name(const char *name
)
1748 struct thermal_zone_device
*pos
= NULL
, *ref
= ERR_PTR(-EINVAL
);
1749 unsigned int found
= 0;
1752 return ERR_PTR(-EINVAL
);
1754 guard(mutex
)(&thermal_list_lock
);
1756 list_for_each_entry(pos
, &thermal_tz_list
, node
)
1757 if (!strncasecmp(name
, pos
->type
, THERMAL_NAME_LENGTH
)) {
1763 return ERR_PTR(-ENODEV
);
1765 /* Success only when one zone is found. */
1767 return ERR_PTR(-EEXIST
);
1771 EXPORT_SYMBOL_GPL(thermal_zone_get_zone_by_name
);
1773 static void thermal_zone_device_resume(struct work_struct
*work
)
1775 struct thermal_zone_device
*tz
;
1777 tz
= container_of(work
, struct thermal_zone_device
, poll_queue
.work
);
1779 guard(thermal_zone
)(tz
);
1781 tz
->state
&= ~(TZ_STATE_FLAG_SUSPENDED
| TZ_STATE_FLAG_RESUMING
);
1783 thermal_debug_tz_resume(tz
);
1784 thermal_zone_device_init(tz
);
1785 thermal_governor_update_tz(tz
, THERMAL_TZ_RESUME
);
1786 __thermal_zone_device_update(tz
, THERMAL_TZ_RESUME
);
1788 complete(&tz
->resume
);
1791 static void thermal_zone_pm_prepare(struct thermal_zone_device
*tz
)
1793 guard(thermal_zone
)(tz
);
1795 if (tz
->state
& TZ_STATE_FLAG_RESUMING
) {
1797 * thermal_zone_device_resume() queued up for this zone has not
1798 * acquired the lock yet, so release it to let the function run
1799 * and wait util it has done the work.
1801 scoped_guard(thermal_zone_reverse
, tz
) {
1802 wait_for_completion(&tz
->resume
);
1806 tz
->state
|= TZ_STATE_FLAG_SUSPENDED
;
1809 static void thermal_pm_notify_prepare(void)
1811 struct thermal_zone_device
*tz
;
1813 guard(mutex
)(&thermal_list_lock
);
1815 thermal_pm_suspended
= true;
1817 list_for_each_entry(tz
, &thermal_tz_list
, node
)
1818 thermal_zone_pm_prepare(tz
);
1821 static void thermal_zone_pm_complete(struct thermal_zone_device
*tz
)
1823 guard(thermal_zone
)(tz
);
1825 cancel_delayed_work(&tz
->poll_queue
);
1827 reinit_completion(&tz
->resume
);
1828 tz
->state
|= TZ_STATE_FLAG_RESUMING
;
1831 * Replace the work function with the resume one, which will restore the
1832 * original work function and schedule the polling work if needed.
1834 INIT_DELAYED_WORK(&tz
->poll_queue
, thermal_zone_device_resume
);
1835 /* Queue up the work without a delay. */
1836 mod_delayed_work(system_freezable_power_efficient_wq
, &tz
->poll_queue
, 0);
1839 static void thermal_pm_notify_complete(void)
1841 struct thermal_zone_device
*tz
;
1843 guard(mutex
)(&thermal_list_lock
);
1845 thermal_pm_suspended
= false;
1847 list_for_each_entry(tz
, &thermal_tz_list
, node
)
1848 thermal_zone_pm_complete(tz
);
1851 static int thermal_pm_notify(struct notifier_block
*nb
,
1852 unsigned long mode
, void *_unused
)
1855 case PM_HIBERNATION_PREPARE
:
1856 case PM_RESTORE_PREPARE
:
1857 case PM_SUSPEND_PREPARE
:
1858 thermal_pm_notify_prepare();
1860 case PM_POST_HIBERNATION
:
1861 case PM_POST_RESTORE
:
1862 case PM_POST_SUSPEND
:
1863 thermal_pm_notify_complete();
1871 static struct notifier_block thermal_pm_nb
= {
1872 .notifier_call
= thermal_pm_notify
,
1874 * Run at the lowest priority to avoid interference between the thermal
1875 * zone resume work items spawned by thermal_pm_notify() and the other
1878 .priority
= INT_MIN
,
1881 static int __init
thermal_init(void)
1885 thermal_debug_init();
1887 result
= thermal_netlink_init();
1891 result
= thermal_register_governors();
1893 goto unregister_netlink
;
1895 thermal_class
= kzalloc(sizeof(*thermal_class
), GFP_KERNEL
);
1896 if (!thermal_class
) {
1898 goto unregister_governors
;
1901 thermal_class
->name
= "thermal";
1902 thermal_class
->dev_release
= thermal_release
;
1904 result
= class_register(thermal_class
);
1906 kfree(thermal_class
);
1907 thermal_class
= NULL
;
1908 goto unregister_governors
;
1911 result
= register_pm_notifier(&thermal_pm_nb
);
1913 pr_warn("Thermal: Can not register suspend notifier, return %d\n",
1918 unregister_governors
:
1919 thermal_unregister_governors();
1921 thermal_netlink_exit();
1923 mutex_destroy(&thermal_list_lock
);
1924 mutex_destroy(&thermal_governor_lock
);
1927 postcore_initcall(thermal_init
);