On 10 Nov 24, Yong Shen wrote:
Hi there,
In power management group, we have a working item of exposing thermal information to user space through sysfs. However, so far, the thermal sensor drivers under 'drivers/hwmon' expose their information in various nodes under sysfs, which makes information collection difficult. Intel's thermal framework is located under 'drivers/thermal', but all the thermal drivers under hwmon don't make use of it due to some reason (part of the reason for this situation may be that intel's thermal framework is comparatively new therefore when those sensor drivers were implemented they did not have a framework to register themselves.)
It is not that new (after checking)
$ git describe 203d3d4aa482339b4816f131f713e1b8ee37f6dd v2.6.24-6482-g203d3d4
We like to find out a simple and unified way to expose thermal related information, intel's thermal interface could be a choice. Using thermal framework is straightforward, below is a sample driver for this purpose. Thus all the information goes to /sys/class/thermal, like temperature, mode...
... #include <linux/module.h> #include <linux/device.h> #include <linux/thermal.h> #include <linux/hwmon.h> static int thermal_get_temp(struct thermal_zone_device *thermal, unsigned long *temp) { *temp = xxx; return 0; } static struct device *hwmon; static struct thermal_zone_device *thermal; static struct thermal_zone_device_ops ops = { .get_temp = thermal_get_temp, }; static int __init sensor_init(void) { ... thermal = thermal_zone_device_register("sample", 0, 0, &ops, 0, 0, 0, 0); } static void __exit sensor_cleanup(void) { ... } module_init(sensor_init); module_exit(sensor_cleanup);
Are there any better ideas about this? Your comments are highly appreciated.
What is important is not just a user-space interface (in /sys), but also a in-kernel interface that drivers can call.
I had a brief look at the thermal API. There are two types of devices: * Thermal Zone (a sensor) * Cooling device (fan, processor, perhaps even a policy manager?)
You can bind cooling devices with thermal zones.
Can the thermal_zone_bind_cooling_device() function be used by external drivers for registering call-backs for thermal trip conditions?
/Amit