@@ -740,8 +740,9 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
sprintf(dev->attr_name, "cdev%d_trip_point", dev->id);
sysfs_attr_init(&dev->attr.attr);
dev->attr.attr.name = dev->attr_name;
- dev->attr.attr.mode = 0444;
+ dev->attr.attr.mode = 0644;
dev->attr.show = trip_point_show;
+ dev->attr.store = trip_point_store;
result = device_create_file(&tz->device, &dev->attr);
if (result)
goto remove_symbol_link;
@@ -76,6 +76,8 @@ void thermal_cooling_device_setup_sysfs(struct thermal_cooling_device *);
void thermal_cooling_device_destroy_sysfs(struct thermal_cooling_device *cdev);
/* used only at binding time */
ssize_t trip_point_show(struct device *, struct device_attribute *, char *);
+ssize_t trip_point_store(struct device *, struct device_attribute *,
+ const char *, size_t);
ssize_t weight_show(struct device *, struct device_attribute *, char *);
ssize_t weight_store(struct device *, struct device_attribute *, const char *,
size_t);
@@ -977,6 +977,26 @@ trip_point_show(struct device *dev, struct device_attribute *attr, char *buf)
return sprintf(buf, "%d\n", instance->trip);
}
+ssize_t trip_point_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct thermal_instance *instance;
+ int ret, trip;
+
+ ret = kstrtoint(buf, 0, &trip);
+ if (ret)
+ return ret;
+
+ instance = container_of(attr, struct thermal_instance, attr);
+
+ if (trip >= instance->tz->trips || trip < THERMAL_TRIPS_NONE)
+ return -EINVAL;
+
+ instance->trip = trip;
+
+ return count;
+}
+
ssize_t
weight_show(struct device *dev, struct device_attribute *attr, char *buf)
{