Эх сурвалжийг харах

drivers: thermal: make usage of CONFIG_THERMAL_HWMON optional

When registering a new thermal_device, the thermal framework
will always add a hwmon sysfs interface.

This patch adds a flag to make this behavior optional. Now
when registering a new thermal device, the caller can
optionally inform if hwmon interface is desirable. This can
be done by means of passing a thermal_zone_params.no_hwmon == true.

In order to keep same behavior as of today, all current
calls will by default create the hwmon interface.

Cc: David Woodhouse <dwmw2@infradead.org>
Cc: linux-acpi@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-pm@vger.kernel.org
Cc: Zhang Rui <rui.zhang@intel.com>
Suggested-by: Wei Ni <wni@nvidia.com>
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>
Eduardo Valentin 12 жил өмнө
parent
commit
ccba4ffd9e

+ 5 - 0
Documentation/thermal/sysfs-api.txt

@@ -142,6 +142,11 @@ temperature) and throttle appropriate devices.
     This is an optional feature where some platforms can choose not to
     This is an optional feature where some platforms can choose not to
     provide this data.
     provide this data.
     .governor_name: Name of the thermal governor used for this zone
     .governor_name: Name of the thermal governor used for this zone
+    .no_hwmon: a boolean to indicate if the thermal to hwmon sysfs interface
+               is required. when no_hwmon == false, a hwmon sysfs interface
+               will be created. when no_hwmon == true, nothing will be done.
+               In case the thermal_zone_params is NULL, the hwmon interface
+               will be created (for backward compatibility).
     .num_tbps: Number of thermal_bind_params entries for this zone
     .num_tbps: Number of thermal_bind_params entries for this zone
     .tbp: thermal_bind_params entries
     .tbp: thermal_bind_params entries
 
 

+ 5 - 3
drivers/thermal/thermal_core.c

@@ -1462,9 +1462,11 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type,
 
 
 	mutex_unlock(&thermal_governor_lock);
 	mutex_unlock(&thermal_governor_lock);
 
 
-	result = thermal_add_hwmon_sysfs(tz);
-	if (result)
-		goto unregister;
+	if (!tz->tzp || !tz->tzp->no_hwmon) {
+		result = thermal_add_hwmon_sysfs(tz);
+		if (result)
+			goto unregister;
+	}
 
 
 	mutex_lock(&thermal_list_lock);
 	mutex_lock(&thermal_list_lock);
 	list_add_tail(&tz->node, &thermal_tz_list);
 	list_add_tail(&tz->node, &thermal_tz_list);

+ 8 - 0
include/linux/thermal.h

@@ -214,6 +214,14 @@ struct thermal_bind_params {
 /* Structure to define Thermal Zone parameters */
 /* Structure to define Thermal Zone parameters */
 struct thermal_zone_params {
 struct thermal_zone_params {
 	char governor_name[THERMAL_NAME_LENGTH];
 	char governor_name[THERMAL_NAME_LENGTH];
+
+	/*
+	 * a boolean to indicate if the thermal to hwmon sysfs interface
+	 * is required. when no_hwmon == false, a hwmon sysfs interface
+	 * will be created. when no_hwmon == true, nothing will be done
+	 */
+	bool no_hwmon;
+
 	int num_tbps;	/* Number of tbp entries */
 	int num_tbps;	/* Number of tbp entries */
 	struct thermal_bind_params *tbp;
 	struct thermal_bind_params *tbp;
 };
 };