thermal: rcar_gen3_thermal: Register hwmon sysfs interface
diff mbox series

Message ID 20190211195620.32753-1-marek.vasut@gmail.com
State Accepted
Delegated to: Geert Uytterhoeven
Headers show
Series
  • thermal: rcar_gen3_thermal: Register hwmon sysfs interface
Related show

Commit Message

Marek Vasut Feb. 11, 2019, 7:56 p.m. UTC
From: Marek Vasut <marek.vasut+renesas@gmail.com>

Register the hwmon sysfs interface on R-Car Gen3 thermal driver to
align it with Gen2 driver. Use devm_add_action() to unregister the
hwmon interface automatically.

Cc: Eduardo Valentin <edubezval@gmail.com>
Cc: Wolfram Sang <wsa+renesas@sang-engineering.com>
Cc: linux-renesas-soc@vger.kernel.org
To: linux-pm@vger.kernel.org
From: Marek Vasut <marek.vasut+renesas@gmail.com>
Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
---
 drivers/thermal/rcar_gen3_thermal.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

Comments

Wolfram Sang Feb. 21, 2019, 8:49 a.m. UTC | #1
> +static void rcar_gen3_hwmon_action(void *data)
> +{
> +	struct thermal_zone_device *zone = data;
> +
> +	thermal_remove_hwmon_sysfs(zone);
> +}
> +
>  static int rcar_gen3_thermal_probe(struct platform_device *pdev)
>  {
>  	struct rcar_gen3_thermal_priv *priv;
> @@ -429,6 +437,17 @@ static int rcar_gen3_thermal_probe(struct platform_device *pdev)
>  		if (ret < 0)
>  			goto error_unregister;
>  
> +		tsc->zone->tzp->no_hwmon = false;
> +		ret = thermal_add_hwmon_sysfs(tsc->zone);
> +		if (ret)
> +			goto error_unregister;
> +
> +		ret = devm_add_action(dev, rcar_gen3_hwmon_action, zone);
> +		if (ret) {
> +			rcar_gen3_hwmon_action(zone);
> +			goto error_unregister;
> +		}
> +
>  		dev_info(dev, "TSC%d: Loaded %d trip points\n", i, ret);
>  	}

This slipped through the cracks for me, I am sorry about that. I know it
is applied by now but I still wonder if the above functionality couldn't
be moved into the core as a generic helper? There is nothing R-Car
specific in here. From what I see it could be something like:

	devm_thermal_activate_hwmon_sysfs(dev, zone);

?
Marek Vasut Feb. 21, 2019, 9:14 a.m. UTC | #2
On 2/21/19 9:49 AM, Wolfram Sang wrote:
> 
>> +static void rcar_gen3_hwmon_action(void *data)
>> +{
>> +	struct thermal_zone_device *zone = data;
>> +
>> +	thermal_remove_hwmon_sysfs(zone);
>> +}
>> +
>>  static int rcar_gen3_thermal_probe(struct platform_device *pdev)
>>  {
>>  	struct rcar_gen3_thermal_priv *priv;
>> @@ -429,6 +437,17 @@ static int rcar_gen3_thermal_probe(struct platform_device *pdev)
>>  		if (ret < 0)
>>  			goto error_unregister;
>>  
>> +		tsc->zone->tzp->no_hwmon = false;
>> +		ret = thermal_add_hwmon_sysfs(tsc->zone);
>> +		if (ret)
>> +			goto error_unregister;
>> +
>> +		ret = devm_add_action(dev, rcar_gen3_hwmon_action, zone);
>> +		if (ret) {
>> +			rcar_gen3_hwmon_action(zone);
>> +			goto error_unregister;
>> +		}
>> +
>>  		dev_info(dev, "TSC%d: Loaded %d trip points\n", i, ret);
>>  	}
> 
> This slipped through the cracks for me, I am sorry about that. I know it
> is applied by now but I still wonder if the above functionality couldn't
> be moved into the core as a generic helper? There is nothing R-Car
> specific in here. From what I see it could be something like:
> 
> 	devm_thermal_activate_hwmon_sysfs(dev, zone);
> 
> ?

Do you want to grow function name for each parameter to be changed ?
I don't think that scales. However, I don't have any better idea how to
deal with the hwmon thus far.

Patch
diff mbox series

diff --git a/drivers/thermal/rcar_gen3_thermal.c b/drivers/thermal/rcar_gen3_thermal.c
index 75786cc8e2f9..88fa41cf16e8 100644
--- a/drivers/thermal/rcar_gen3_thermal.c
+++ b/drivers/thermal/rcar_gen3_thermal.c
@@ -19,6 +19,7 @@ 
 #include <linux/thermal.h>
 
 #include "thermal_core.h"
+#include "thermal_hwmon.h"
 
 /* Register offsets */
 #define REG_GEN3_IRQSTR		0x04
@@ -337,6 +338,13 @@  static int rcar_gen3_thermal_remove(struct platform_device *pdev)
 	return 0;
 }
 
+static void rcar_gen3_hwmon_action(void *data)
+{
+	struct thermal_zone_device *zone = data;
+
+	thermal_remove_hwmon_sysfs(zone);
+}
+
 static int rcar_gen3_thermal_probe(struct platform_device *pdev)
 {
 	struct rcar_gen3_thermal_priv *priv;
@@ -429,6 +437,17 @@  static int rcar_gen3_thermal_probe(struct platform_device *pdev)
 		if (ret < 0)
 			goto error_unregister;
 
+		tsc->zone->tzp->no_hwmon = false;
+		ret = thermal_add_hwmon_sysfs(tsc->zone);
+		if (ret)
+			goto error_unregister;
+
+		ret = devm_add_action(dev, rcar_gen3_hwmon_action, zone);
+		if (ret) {
+			rcar_gen3_hwmon_action(zone);
+			goto error_unregister;
+		}
+
 		dev_info(dev, "TSC%d: Loaded %d trip points\n", i, ret);
 	}