Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754091Ab3DOBnW (ORCPT ); Sun, 14 Apr 2013 21:43:22 -0400 Received: from mga03.intel.com ([143.182.124.21]:23372 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752854Ab3DOBnU (ORCPT ); Sun, 14 Apr 2013 21:43:20 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.87,472,1363158000"; d="scan'208";a="227126608" Message-ID: <1365990196.2803.2.camel@rzhang1-mobl4> Subject: Re: [PATCHv3 1/3] thermal: introduce thermal_zone_get_zone_by_name helper function From: Zhang Rui To: Eduardo Valentin Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, durgadoss.r@intel.com Date: Mon, 15 Apr 2013 09:43:16 +0800 In-Reply-To: <1365165150-11720-2-git-send-email-eduardo.valentin@ti.com> References: <1365165150-11720-1-git-send-email-eduardo.valentin@ti.com> <1365165150-11720-2-git-send-email-eduardo.valentin@ti.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 Content-Transfer-Encoding: 7bit Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3500 Lines: 91 On Fri, 2013-04-05 at 08:32 -0400, Eduardo Valentin wrote: > This patch adds a helper function to get a reference of > a thermal zone, based on the zone type name. > > It will perform a zone name lookup and return a reference > to a thermal zone device that matches the name requested. > In case the zone is not found or when several zones match > same name or if the required parameters are invalid, it will return > the corresponding error code (ERR_PTR). > > Cc: Durgadoss R > Signed-off-by: Eduardo Valentin refreshed the patch to modify drivers/thermal/thermal_core.c instead of drivers/thermal/thermal_sys.c and applied to thermal -next. thanks, rui > --- > drivers/thermal/thermal_sys.c | 38 ++++++++++++++++++++++++++++++++++++++ > include/linux/thermal.h | 1 + > 2 files changed, 39 insertions(+), 0 deletions(-) > > diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c > index 5bd95d4..e9b636b 100644 > --- a/drivers/thermal/thermal_sys.c > +++ b/drivers/thermal/thermal_sys.c > @@ -1790,6 +1790,44 @@ void thermal_zone_device_unregister(struct thermal_zone_device *tz) > } > EXPORT_SYMBOL_GPL(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/include/linux/thermal.h b/include/linux/thermal.h > index 542a39c..0cf9eb5 100644 > --- a/include/linux/thermal.h > +++ b/include/linux/thermal.h > @@ -237,6 +237,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 thermal_zone_trend_get(struct thermal_zone_device *, int); > struct thermal_instance *thermal_instance_get(struct thermal_zone_device *, -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/