thermal: core: split passive_store
Split passive_store between sysfs handling and thermal core internal data handling. Cc: Zhang Rui <rui.zhang@intel.com> Cc: linux-pm@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Eduardo Valentin <edubezval@gmail.com> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
This commit is contained in:
parent
2a4806bf7a
commit
3d0055d2b2
|
@ -720,6 +720,43 @@ int power_actor_set_power(struct thermal_cooling_device *cdev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
void thermal_zone_device_rebind_exception(struct thermal_zone_device *tz,
|
||||
const char *cdev_type, size_t size)
|
||||
{
|
||||
struct thermal_cooling_device *cdev = NULL;
|
||||
|
||||
mutex_lock(&thermal_list_lock);
|
||||
list_for_each_entry(cdev, &thermal_cdev_list, node) {
|
||||
/* skip non matching cdevs */
|
||||
if (strncmp(cdev_type, cdev->type, size))
|
||||
continue;
|
||||
|
||||
/* re binding the exception matching the type pattern */
|
||||
thermal_zone_bind_cooling_device(tz, THERMAL_TRIPS_NONE, cdev,
|
||||
THERMAL_NO_LIMIT,
|
||||
THERMAL_NO_LIMIT,
|
||||
THERMAL_WEIGHT_DEFAULT);
|
||||
}
|
||||
mutex_unlock(&thermal_list_lock);
|
||||
}
|
||||
|
||||
void thermal_zone_device_unbind_exception(struct thermal_zone_device *tz,
|
||||
const char *cdev_type, size_t size)
|
||||
{
|
||||
struct thermal_cooling_device *cdev = NULL;
|
||||
|
||||
mutex_lock(&thermal_list_lock);
|
||||
list_for_each_entry(cdev, &thermal_cdev_list, node) {
|
||||
/* skip non matching cdevs */
|
||||
if (strncmp(cdev_type, cdev->type, size))
|
||||
continue;
|
||||
/* unbinding the exception matching the type pattern */
|
||||
thermal_zone_unbind_cooling_device(tz, THERMAL_TRIPS_NONE,
|
||||
cdev);
|
||||
}
|
||||
mutex_unlock(&thermal_list_lock);
|
||||
}
|
||||
|
||||
/* sys I/F for thermal zone */
|
||||
|
||||
#define to_thermal_zone(_dev) \
|
||||
|
@ -922,7 +959,6 @@ passive_store(struct device *dev, struct device_attribute *attr,
|
|||
const char *buf, size_t count)
|
||||
{
|
||||
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
||||
struct thermal_cooling_device *cdev = NULL;
|
||||
int state;
|
||||
|
||||
if (!sscanf(buf, "%d\n", &state))
|
||||
|
@ -935,30 +971,14 @@ passive_store(struct device *dev, struct device_attribute *attr,
|
|||
return -EINVAL;
|
||||
|
||||
if (state && !tz->forced_passive) {
|
||||
mutex_lock(&thermal_list_lock);
|
||||
list_for_each_entry(cdev, &thermal_cdev_list, node) {
|
||||
if (!strncmp("Processor", cdev->type,
|
||||
sizeof("Processor")))
|
||||
thermal_zone_bind_cooling_device(tz,
|
||||
THERMAL_TRIPS_NONE, cdev,
|
||||
THERMAL_NO_LIMIT,
|
||||
THERMAL_NO_LIMIT,
|
||||
THERMAL_WEIGHT_DEFAULT);
|
||||
}
|
||||
mutex_unlock(&thermal_list_lock);
|
||||
if (!tz->passive_delay)
|
||||
tz->passive_delay = 1000;
|
||||
thermal_zone_device_rebind_exception(tz, "Processor",
|
||||
sizeof("Processor"));
|
||||
} else if (!state && tz->forced_passive) {
|
||||
mutex_lock(&thermal_list_lock);
|
||||
list_for_each_entry(cdev, &thermal_cdev_list, node) {
|
||||
if (!strncmp("Processor", cdev->type,
|
||||
sizeof("Processor")))
|
||||
thermal_zone_unbind_cooling_device(tz,
|
||||
THERMAL_TRIPS_NONE,
|
||||
cdev);
|
||||
}
|
||||
mutex_unlock(&thermal_list_lock);
|
||||
tz->passive_delay = 0;
|
||||
thermal_zone_device_unbind_exception(tz, "Processor",
|
||||
sizeof("Processor"));
|
||||
}
|
||||
|
||||
tz->forced_passive = state;
|
||||
|
|
|
@ -56,6 +56,10 @@ struct thermal_instance {
|
|||
|
||||
int thermal_register_governor(struct thermal_governor *);
|
||||
void thermal_unregister_governor(struct thermal_governor *);
|
||||
void thermal_zone_device_rebind_exception(struct thermal_zone_device *,
|
||||
const char *, size_t);
|
||||
void thermal_zone_device_unbind_exception(struct thermal_zone_device *,
|
||||
const char *, size_t);
|
||||
|
||||
#ifdef CONFIG_THERMAL_GOV_STEP_WISE
|
||||
int thermal_gov_step_wise_register(void);
|
||||
|
|
Loading…
Reference in New Issue