On 09-01-2014 06:37, Wei Ni wrote: > The thermal framework start to support device tree, this > patch adds a helper function to get a reference of a > thermal zone, based on the zone's device node. I would prefer if you could provide a better justification why we need this API. Think of the scope of this API: would it be used only by the of-thermal code? only by the drivers/thermal code? or any driver? So far you have provided only one user, and that user can already work with existing APIs. As I mention, DT does not support name duplications. Unless you enlighten me with better uses of this API, I would prefer not to have it. > > It will add a device_node *np member in the struct > thermal_zone_device, and initialize it when create a thermal > zone. This funciton perform a zone device node lookup and > return a reference to a thermal zone device that matches > the device node requested. > In case the zone is not found or if the required parameters > are invalid, it will return the corresponding error code (ERR_PTR). > > Change-Id: I4d65f849e84425dddd387f70886a9c7c4c2002f2 For your next patches, please done include gerrit change IDs. Linux Kernel does not need to be linked to your inhouse development history via gerrit IDs. > Signed-off-by: Wei Ni <wni@xxxxxxxxxx> > --- > drivers/thermal/of-thermal.c | 2 ++ > drivers/thermal/thermal_core.c | 33 +++++++++++++++++++++++++++++++++ > include/linux/thermal.h | 3 +++ > 3 files changed, 38 insertions(+) > > diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c > index 04b1be7..53f2d3a 100644 > --- a/drivers/thermal/of-thermal.c > +++ b/drivers/thermal/of-thermal.c > @@ -804,6 +804,8 @@ int __init of_parse_thermal_zones(void) > of_thermal_free_zone(tz); > /* attempting to build remaining zones still */ > } > + > + zone->np = child; > } > > return 0; > diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c > index 338a88b..eeddb94 100644 > --- a/drivers/thermal/thermal_core.c > +++ b/drivers/thermal/thermal_core.c > @@ -1672,6 +1672,39 @@ exit: > } > EXPORT_SYMBOL_GPL(thermal_zone_get_zone_by_name); > > +/** > +* thermal_zone_get_zone_by_node() - search for a zone and returns its ref > +* @node: device node of the thermal zone > +* > +* When thermal zone is found with the passed device node, returns a reference > +* to it. > +* > +* Return: On success returns a reference to an unique thermal zone with > +* matching device node, an ERR_PTR otherwise (-EINVAL for invalid > +* paramenters, -ENODEV for not found). > +*/ > +struct thermal_zone_device * > +thermal_zone_get_zone_by_node(struct device_node *node) > +{ > + struct thermal_zone_device *pos = NULL, *ref = ERR_PTR(-ENODEV); > + bool found = false; > + > + if (!node) > + return ERR_PTR(-EINVAL); > + > + mutex_lock(&thermal_list_lock); > + list_for_each_entry(pos, &thermal_tz_list, node) > + if (node == pos->np) { > + ref = pos; > + found = true; > + break; > + } > + mutex_unlock(&thermal_list_lock); > + > + return ref; > +} > +EXPORT_SYMBOL_GPL(thermal_zone_get_zone_by_node); > + > #ifdef CONFIG_NET > static const struct genl_multicast_group thermal_event_mcgrps[] = { > { .name = THERMAL_GENL_MCAST_GROUP_NAME, }, > diff --git a/include/linux/thermal.h b/include/linux/thermal.h > index f7e11c7..288d272 100644 > --- a/include/linux/thermal.h > +++ b/include/linux/thermal.h > @@ -162,6 +162,7 @@ struct thermal_zone_device { > int id; > char type[THERMAL_NAME_LENGTH]; > struct device device; > + struct device_node *np; > struct thermal_attr *trip_temp_attrs; > struct thermal_attr *trip_type_attrs; > struct thermal_attr *trip_hyst_attrs; > @@ -286,6 +287,8 @@ thermal_of_cooling_device_register(struct device_node *np, 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); > +struct thermal_zone_device * > +thermal_zone_get_zone_by_node(struct device_node *node); > int thermal_zone_get_temp(struct thermal_zone_device *tz, unsigned long *temp); > > int get_tz_trend(struct thermal_zone_device *, int); > -- You have got to be excited about what you are doing. (L. Lamport) Eduardo Valentin
Attachment:
signature.asc
Description: OpenPGP digital signature