diff options
-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 | ||