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 | |
| 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>
| -rw-r--r-- | drivers/thermal/thermal_sys.c | 7 | ||||
| -rw-r--r-- | include/linux/thermal.h | 1 |
2 files changed, 7 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; |
diff --git a/include/linux/thermal.h b/include/linux/thermal.h index cb0b0e3ffd97..9ae378a4a555 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h | |||
| @@ -94,6 +94,7 @@ struct thermal_cooling_device { | |||
| 94 | struct device device; | 94 | struct device device; |
| 95 | void *devdata; | 95 | void *devdata; |
| 96 | const struct thermal_cooling_device_ops *ops; | 96 | const struct thermal_cooling_device_ops *ops; |
| 97 | struct list_head thermal_instances; | ||
| 97 | struct list_head node; | 98 | struct list_head node; |
| 98 | }; | 99 | }; |
| 99 | 100 | ||
