By default, it monitors CPU temperature using available CPU digital temperature sensors and maintains CPU temperature under control, before HW takes aggressive correction action.
Thermal daemon looks for thermal sensors and thermal cooling drivers in the Linux thermal sysfs (/sys/class/thermal) and builds a list of sensors and cooling drivers. Each of the thermal sensors can optionally be binded to a cooling drivers by the in kernel drivers. In this case the Linux kernel thermal core can directly take actions based on the temperature trip points, for each sensor and associated cooling device. For example a trip temperature X in a sensor can be associates a cooling driver Y. So when the sensor temperature = X, the cooling driver "Y" is activated.
Thermal daemon allows one to change this relationship or add new one via a thermal configuration file (thermal-conf.xml). This file is automatically created and used, if the platform has ACPI thermal relationship table. If not this needs to be manually configured.
When there is a sensor, which has no associate cooling device, via configuration file or thermal relationship table, then this sensor is tested for relationship with CPU load dynamically up to maximum 3 times. If there is no relationship, then it is added to a black list of unbinded sensors and not tried again.
Optionally thermal daemon can act as an exclusive thermal controller by using thermal sysfs and acting as a user space governor. In this case kernel thermal core is not active and decision is taken by thermal daemon only.
Dbus Interface: When started with dbus-enable option, dbus interface can be used to control thermal temperature at which cooling action takes place. This change is persistent. For example, to start CPU cooling at 80C, dbus-send command can be used:
# dbus-send --system --dest=org.freedesktop.thermald /org/freedesktop/thermald org.freedesktop.thermald.SetUserPassiveTemperature string:cpu uint32:80000