[RFC PATCH 5/9] Thermal: Support using dt node to get sensor
Wei Ni
wni at nvidia.com
Mon Feb 18 06:30:27 EST 2013
Add functions to support using dt node with args to get sensor.
Signed-off-by: Wei Ni <wni at nvidia.com>
---
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
More information about the linux-arm-kernel
mailing list