diff options
author | Zhang Rui <rui.zhang@intel.com> | 2012-06-27 02:11:52 -0400 |
---|---|---|
committer | Zhang Rui <rui.zhang@intel.com> | 2012-09-24 02:44:37 -0400 |
commit | b5e4ae620b06274981781aeadc2aea50b507f7fb (patch) | |
tree | 2b0175b36cafe5b753510e6c05cb41ec301f35fc /drivers | |
parent | cddf31b3b293fd20358ea506f22445611425811f (diff) |
Thermal: List thermal_instance in thermal_cooling_device.
List thermal_instance in thermal_cooling_device so that
cooling device can know the cooling state requirement
of all the thermal instances.
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Reviewed-by: Rafael J. Wysocki <rjw@sisk.pl>
Reviewed-by: Eduardo Valentin <eduardo.valentin@ti.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/thermal/thermal_sys.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c index 288437651da5..70045c12d7df 100644 --- a/drivers/thermal/thermal_sys.c +++ b/drivers/thermal/thermal_sys.c | |||
@@ -57,6 +57,7 @@ struct thermal_instance { | |||
57 | char attr_name[THERMAL_NAME_LENGTH]; | 57 | char attr_name[THERMAL_NAME_LENGTH]; |
58 | struct device_attribute attr; | 58 | struct device_attribute attr; |
59 | struct list_head tz_node; /* node in tz->thermal_instances */ | 59 | struct list_head tz_node; /* node in tz->thermal_instances */ |
60 | struct list_head cdev_node; /* node in cdev->thermal_instances */ | ||
60 | }; | 61 | }; |
61 | 62 | ||
62 | static DEFINE_IDR(thermal_tz_idr); | 63 | static DEFINE_IDR(thermal_tz_idr); |
@@ -878,8 +879,10 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz, | |||
878 | result = -EEXIST; | 879 | result = -EEXIST; |
879 | break; | 880 | break; |
880 | } | 881 | } |
881 | if (!result) | 882 | if (!result) { |
882 | list_add_tail(&dev->tz_node, &tz->thermal_instances); | 883 | list_add_tail(&dev->tz_node, &tz->thermal_instances); |
884 | list_add_tail(&dev->cdev_node, &cdev->thermal_instances); | ||
885 | } | ||
883 | mutex_unlock(&tz->lock); | 886 | mutex_unlock(&tz->lock); |
884 | 887 | ||
885 | if (!result) | 888 | if (!result) |
@@ -915,6 +918,7 @@ int thermal_zone_unbind_cooling_device(struct thermal_zone_device *tz, | |||
915 | list_for_each_entry_safe(pos, next, &tz->thermal_instances, tz_node) { | 918 | list_for_each_entry_safe(pos, next, &tz->thermal_instances, tz_node) { |
916 | if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) { | 919 | if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) { |
917 | list_del(&pos->tz_node); | 920 | list_del(&pos->tz_node); |
921 | list_del(&pos->cdev_node); | ||
918 | mutex_unlock(&tz->lock); | 922 | mutex_unlock(&tz->lock); |
919 | goto unbind; | 923 | goto unbind; |
920 | } | 924 | } |
@@ -984,6 +988,7 @@ thermal_cooling_device_register(char *type, void *devdata, | |||
984 | } | 988 | } |
985 | 989 | ||
986 | strcpy(cdev->type, type); | 990 | strcpy(cdev->type, type); |
991 | INIT_LIST_HEAD(&cdev->thermal_instances); | ||
987 | cdev->ops = ops; | 992 | cdev->ops = ops; |
988 | cdev->device.class = &thermal_class; | 993 | cdev->device.class = &thermal_class; |
989 | cdev->devdata = devdata; | 994 | cdev->devdata = devdata; |