Add functions to support using dt node with args to get sensor. Signed-off-by: Wei Ni <wni@xxxxxxxxxx> --- drivers/thermal/thermal_sys.c | 30 ++++++++++++++++++++++++++++++ include/linux/thermal.h | 9 +++++++++ 2 files changed, 39 insertions(+) diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c index e284b67..b5bedab 100644 --- a/drivers/thermal/thermal_sys.c +++ b/drivers/thermal/thermal_sys.c @@ -2183,6 +2183,28 @@ struct thermal_sensor *get_sensor_by_name(const char *name) } EXPORT_SYMBOL(get_sensor_by_name); +struct thermal_sensor *get_sensor_by_node(struct node_args *np_args) +{ + struct thermal_sensor *pos; + struct thermal_sensor *ts = NULL; + struct node_args *args; + + mutex_lock(&sensor_list_lock); + for_each_thermal_sensor(pos) { + args = &pos->np_args; + if (args->np) { + if ((args->np == np_args->np) && + (args->index == np_args->index)) { + ts = pos; + break; + } + } + } + mutex_unlock(&sensor_list_lock); + return ts; +} +EXPORT_SYMBOL(get_sensor_by_node); + static int create_map_attrs(struct thermal_zone *tz, int indx) { int ret, i; @@ -2368,6 +2390,7 @@ EXPORT_SYMBOL(add_sensor_trip_info); * @devdata: private device data */ struct thermal_sensor *thermal_sensor_register(const char *name, int count, + struct node_args *np_args, struct thermal_sensor_ops *ops, void *devdata) { struct thermal_sensor *ts; @@ -2412,6 +2435,13 @@ struct thermal_sensor *thermal_sensor_register(const char *name, int count, goto exit_temp; } + if (np_args) { + ts->np_args.np = np_args->np; + ts->np_args.index = np_args->index; + } else { + ts->np_args.np = NULL; + } + /* Add this sensor to the global list of sensors */ mutex_lock(&sensor_list_lock); list_add_tail(&ts->node, &thermal_sensor_list); diff --git a/include/linux/thermal.h b/include/linux/thermal.h index 4389599..b560ffa 100644 --- a/include/linux/thermal.h +++ b/include/linux/thermal.h @@ -113,6 +113,12 @@ enum { }; #define THERMAL_GENL_CMD_MAX (__THERMAL_GENL_CMD_MAX - 1) +/* support to parse node with args to get sensor or cooling device */ +struct node_args { + struct device_node *np; + int index; +}; + struct thermal_zone_device_ops { int (*bind) (struct thermal_zone_device *, struct thermal_cooling_device *); @@ -223,6 +229,7 @@ struct thermal_sensor { void *devdata; struct idr idr; struct device device; + struct node_args np_args; struct list_head node; struct thermal_sensor_ops *ops; struct thermal_attr *thresh_attrs; @@ -350,6 +357,7 @@ int thermal_register_governor(struct thermal_governor *); void thermal_unregister_governor(struct thermal_governor *); struct thermal_sensor *thermal_sensor_register(const char *, int, + struct node_args *, struct thermal_sensor_ops *, void *); void thermal_sensor_unregister(struct thermal_sensor *); @@ -357,6 +365,7 @@ struct thermal_zone *create_thermal_zone(const char *, void *); void remove_thermal_zone(struct thermal_zone *); int add_sensor_to_zone(struct thermal_zone *, struct thermal_sensor *); struct thermal_sensor *get_sensor_by_name(const char *); +struct thermal_sensor *get_sensor_by_node(struct node_args *); int add_cdev_to_zone(struct thermal_zone *, struct thermal_cooling_device *); struct thermal_cooling_device *get_cdev_by_name(const char *); -- 1.7.9.5 _______________________________________________ lm-sensors mailing list lm-sensors@xxxxxxxxxxxxxx http://lists.lm-sensors.org/mailman/listinfo/lm-sensors