{
struct thermal_cooling_device *cdev = cooling->cdev;
unsigned long curr_state;
+ int ret = 0;
cdev->ops->get_cur_state(cdev, &curr_state);
mutex_lock(&cdev->lock);
if (!cdev->ops->set_cur_state(cdev, target))
thermal_cooling_device_stats_update(cdev, target);
+ else
+ ret = -EINVAL;
cdev->updated = true;
mutex_unlock(&cdev->lock);
- return 0;
+ return ret;
}
static int _set_power(struct _cooling_instance *inst, struct _thermal_zone *zone,
cdev = inst->cooling->cdev;
ret = cdev->ops->power2state(cdev, tz, power, &state);
+ if (ret)
+ return ret;
pr_info("inst_weight=%u, set_power=%u, state=%lu, temp=%d\n",
inst->weight, power, state, tz->temperature);
i = 0;
list_for_each_entry(inst, &zone->cooling_list, node) {
p = &power[i];
- _set_power(inst, zone, p->requested);
+ ret = _set_power(inst, zone, p->requested);
+ if (ret) {
+ /* TODO: collect power which cannot be used for other
+ * devices */
+ extra_power += p->requested;
+ p->requested = 0;
+ }
i++;
}