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;
|
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 */
|
/* sys I/F for thermal zone */
|
||||||
|
|
||||||
#define to_thermal_zone(_dev) \
|
#define to_thermal_zone(_dev) \
|
||||||
|
@ -922,7 +959,6 @@ passive_store(struct device *dev, struct device_attribute *attr,
|
||||||
const char *buf, size_t count)
|
const char *buf, size_t count)
|
||||||
{
|
{
|
||||||
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
||||||
struct thermal_cooling_device *cdev = NULL;
|
|
||||||
int state;
|
int state;
|
||||||
|
|
||||||
if (!sscanf(buf, "%d\n", &state))
|
if (!sscanf(buf, "%d\n", &state))
|
||||||
|
@ -935,30 +971,14 @@ passive_store(struct device *dev, struct device_attribute *attr,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (state && !tz->forced_passive) {
|
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)
|
if (!tz->passive_delay)
|
||||||
tz->passive_delay = 1000;
|
tz->passive_delay = 1000;
|
||||||
|
thermal_zone_device_rebind_exception(tz, "Processor",
|
||||||
|
sizeof("Processor"));
|
||||||
} else if (!state && tz->forced_passive) {
|
} 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;
|
tz->passive_delay = 0;
|
||||||
|
thermal_zone_device_unbind_exception(tz, "Processor",
|
||||||
|
sizeof("Processor"));
|
||||||
}
|
}
|
||||||
|
|
||||||
tz->forced_passive = state;
|
tz->forced_passive = state;
|
||||||
|
|
|
@ -56,6 +56,10 @@ struct thermal_instance {
|
||||||
|
|
||||||
int thermal_register_governor(struct thermal_governor *);
|
int thermal_register_governor(struct thermal_governor *);
|
||||||
void thermal_unregister_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
|
#ifdef CONFIG_THERMAL_GOV_STEP_WISE
|
||||||
int thermal_gov_step_wise_register(void);
|
int thermal_gov_step_wise_register(void);
|
||||||
|
|
Loading…
Reference in New Issue