From 6a15041b214c5ccc6747a21550a1cf2880e4d1ed Mon Sep 17 00:00:00 2001 From: Eduardo Valentin Date: Fri, 5 Apr 2013 12:32:28 +0000 Subject: [PATCH] --- yaml --- r: 374559 b: refs/heads/master c: 63c4d919cf66b1b3ffa7861bddb50a697914af5b h: refs/heads/master i: 374557: 72e7a45c0f2b39bb264d66964d0169c21ac7e3fe 374555: 54f1e6265ad599f2adab84bcb75de5eef7c09837 374551: 07d7778c2cbffca178023bfc0170a33a2ec41746 374543: 137e07e0a6a5b3366cee5401b820b2d8a2818d9b 374527: b49bcd960e347de504db912afa22862cab53e789 v: v3 --- [refs] | 2 +- trunk/drivers/thermal/cpu_cooling.c | 4 +-- trunk/drivers/thermal/thermal_core.c | 38 ++++++++++++++++++++++++++++ trunk/include/linux/thermal.h | 1 + 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index a2ab901b4d5b..6970f0332673 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4f89038f177462dbd2fd911297fd004226176db7 +refs/heads/master: 63c4d919cf66b1b3ffa7861bddb50a697914af5b diff --git a/trunk/drivers/thermal/cpu_cooling.c b/trunk/drivers/thermal/cpu_cooling.c index 768b508f0d69..5f5c780bcd90 100644 --- a/trunk/drivers/thermal/cpu_cooling.c +++ b/trunk/drivers/thermal/cpu_cooling.c @@ -303,12 +303,12 @@ static int cpufreq_get_max_state(struct thermal_cooling_device *cdev, struct cpufreq_cooling_device *cpufreq_device = cdev->devdata; struct cpumask *mask = &cpufreq_device->allowed_cpus; unsigned int cpu; - unsigned int count = 0; + unsigned long count = 0; int ret; cpu = cpumask_any(mask); - ret = get_property(cpu, 0, &count, GET_MAXL); + ret = get_property(cpu, 0, (unsigned int *)&count, GET_MAXL); if (count > 0) *state = count; diff --git a/trunk/drivers/thermal/thermal_core.c b/trunk/drivers/thermal/thermal_core.c index 4cdc3e327222..5045473485cf 100644 --- a/trunk/drivers/thermal/thermal_core.c +++ b/trunk/drivers/thermal/thermal_core.c @@ -1754,6 +1754,44 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz) } EXPORT_SYMBOL(thermal_zone_device_unregister); +/** + * thermal_zone_get_zone_by_name() - search for a zone and returns its ref + * @name: thermal zone name to fetch the temperature + * + * When only one zone is found with the passed name, returns a reference to it. + * + * Return: On success returns a reference to an unique thermal zone with + * matching name equals to @name, an ERR_PTR otherwise (-EINVAL for invalid + * paramenters, -ENODEV for not found and -EEXIST for multiple matches). + */ +struct thermal_zone_device *thermal_zone_get_zone_by_name(const char *name) +{ + struct thermal_zone_device *pos = NULL, *ref = ERR_PTR(-EINVAL); + unsigned int found = 0; + + if (!name) + goto exit; + + mutex_lock(&thermal_list_lock); + list_for_each_entry(pos, &thermal_tz_list, node) + if (!strnicmp(name, pos->type, THERMAL_NAME_LENGTH)) { + found++; + ref = pos; + } + mutex_unlock(&thermal_list_lock); + + /* nothing has been found, thus an error code for it */ + if (found == 0) + ref = ERR_PTR(-ENODEV); + else if (found > 1) + /* Success only when an unique zone is found */ + ref = ERR_PTR(-EEXIST); + +exit: + return ref; +} +EXPORT_SYMBOL_GPL(thermal_zone_get_zone_by_name); + #ifdef CONFIG_NET static struct genl_family thermal_event_genl_family = { .id = GENL_ID_GENERATE, diff --git a/trunk/include/linux/thermal.h b/trunk/include/linux/thermal.h index 3bda306f7a50..9af2f3a99658 100644 --- a/trunk/include/linux/thermal.h +++ b/trunk/include/linux/thermal.h @@ -239,6 +239,7 @@ void thermal_zone_device_update(struct thermal_zone_device *); struct thermal_cooling_device *thermal_cooling_device_register(char *, void *, const struct thermal_cooling_device_ops *); void thermal_cooling_device_unregister(struct thermal_cooling_device *); +struct thermal_zone_device *thermal_zone_get_zone_by_name(const char *name); int get_tz_trend(struct thermal_zone_device *, int); struct thermal_instance *get_thermal_instance(struct thermal_zone_device *,