On Wed, Nov 24, 2010 at 7:02 PM, Amit Kucheria <amit.kuche...@linaro.org> wrote:
> 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
>

I meant it is newer than drivers/hwmon which was first introduced in
2005, while drivers/thermal was introduced in 2008.
>> 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?

Yes. If I understand right, you also want to let this thermal
framework communicate directly with other kernel modules or drivers.
In this case, other modules can appear as a cooling device although
they don't have to be a real one, and register themselves with a
thermal_cooling_device_ops. When thermal zone device updates its
status, it will go through all the trip points and invoke related
binding cooling devices to set their states (ops->set_cur_state).
Correct me.
>
> /Amit
>

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to