diff mbox

of: thermal: Introduce "hwmon" optional property

Message ID 20170710115146.27313-1-kukabu@gmail.com (mailing list archive)
State Changes Requested
Delegated to: Eduardo Valentin
Headers show

Commit Message

Michael Tatarinov July 10, 2017, 11:51 a.m. UTC
Introduce an optional property called, hwmon, which enable
registration in hwmon subsystems.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: Eduardo Valentin <edubezval@gmail.com>
Signed-off-by: Michael Tatarinov <kukabu@gmail.com>
---
 Documentation/devicetree/bindings/thermal/thermal.txt | 6 ++++++
 drivers/thermal/of-thermal.c                          | 3 +--
 2 files changed, 7 insertions(+), 2 deletions(-)

Comments

Michael Tatarinov July 12, 2017, 7:49 a.m. UTC | #1
Hello

Some clarifications for this patch.
I uses CONFIG_THERMAL_HWMON feature on Raspberry PI. It works ok with
the downstream thermal driver because it uses
thermal_zone_device_register(). After I switches to the upstream
driver this feature doesn't work because it uses
thermal_zone_of_sensor_register().
I would like to use this opportunity and in the future.

2017-07-10 15:51 GMT+04:00, Michael Tatarinov <kukabu@gmail.com>:
> Introduce an optional property called, hwmon, which enable
> registration in hwmon subsystems.
>
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: Eduardo Valentin <edubezval@gmail.com>
> Signed-off-by: Michael Tatarinov <kukabu@gmail.com>
> ---
>  Documentation/devicetree/bindings/thermal/thermal.txt | 6 ++++++
>  drivers/thermal/of-thermal.c                          | 3 +--
>  2 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/thermal/thermal.txt
> b/Documentation/devicetree/bindings/thermal/thermal.txt
> index 88b6ea1ad290..4e51fbd4efa2 100644
> --- a/Documentation/devicetree/bindings/thermal/thermal.txt
> +++ b/Documentation/devicetree/bindings/thermal/thermal.txt
> @@ -175,6 +175,10 @@ Optional property:
>  			2000mW, while on a 10'' tablet is around
>  			4500mW.
>
> +- hwmon:		Register the thermal zone in hwmon subsystems
> +  Type: boolean 	(requires CONFIG_THERMAL_HWMON).
> +  Size: one cell
> +
>  Note: The delay properties are bound to the maximum dT/dt (temperature
>  derivative over time) in two situations for a thermal zone:
>  (i)  - when passive cooling is activated (polling-delay-passive); and
> @@ -556,6 +560,8 @@ thermal-zones {
>
>  		sustainable-power = <2500>;
>
> +		hwmon;
> +
>  		trips {
>  			/* Trips are based on resulting linear equation */
>  			cpu_trip: cpu-trip {
> diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
> index d04ec3b9e5ff..ce580a57313b 100644
> --- a/drivers/thermal/of-thermal.c
> +++ b/drivers/thermal/of-thermal.c
> @@ -994,8 +994,7 @@ int __init of_parse_thermal_zones(void)
>  			goto exit_free;
>  		}
>
> -		/* No hwmon because there might be hwmon drivers registering */
> -		tzp->no_hwmon = true;
> +		tzp->no_hwmon = !of_property_read_bool(child, "hwmon");
>
>  		if (!of_property_read_u32(child, "sustainable-power", &prop))
>  			tzp->sustainable_power = prop;
> --
> 2.9.4
>
>
Guenter Roeck Aug. 31, 2017, 3:08 p.m. UTC | #2
On Mon, Jul 10, 2017 at 03:51:46PM +0400, Michael Tatarinov wrote:
> Introduce an optional property called, hwmon, which enable
> registration in hwmon subsystems.
> 
> Cc: Zhang Rui <rui.zhang@intel.com>
> Cc: Eduardo Valentin <edubezval@gmail.com>
> Signed-off-by: Michael Tatarinov <kukabu@gmail.com>
> ---
>  Documentation/devicetree/bindings/thermal/thermal.txt | 6 ++++++
>  drivers/thermal/of-thermal.c                          | 3 +--
>  2 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/thermal/thermal.txt b/Documentation/devicetree/bindings/thermal/thermal.txt
> index 88b6ea1ad290..4e51fbd4efa2 100644
> --- a/Documentation/devicetree/bindings/thermal/thermal.txt
> +++ b/Documentation/devicetree/bindings/thermal/thermal.txt
> @@ -175,6 +175,10 @@ Optional property:
>  			2000mW, while on a 10'' tablet is around
>  			4500mW.
>  
> +- hwmon:		Register the thermal zone in hwmon subsystems
> +  Type: boolean 	(requires CONFIG_THERMAL_HWMON).
> +  Size: one cell
> +

That will probably be unacceptable since it is not a hardware description
or configuration flag but an implementation problem.

What might be acceptable is to use a device property such as "linux,no-hwmon",
set it in hwmon drivers prior to calling the registration function, then use
device_property_present() in the thermal code to check it and assign the flag
to no_hwmon. An alternative might be to add a "no_hwmon" parameter to the
thermal registration function, but that would be much more invasive and,
in my opinion, much less desirable.

Rui, Eduardo, any thoughts ?

Thanks,
Guenter

>  Note: The delay properties are bound to the maximum dT/dt (temperature
>  derivative over time) in two situations for a thermal zone:
>  (i)  - when passive cooling is activated (polling-delay-passive); and
> @@ -556,6 +560,8 @@ thermal-zones {
>  
>  		sustainable-power = <2500>;
>  
> +		hwmon;
> +
>  		trips {
>  			/* Trips are based on resulting linear equation */
>  			cpu_trip: cpu-trip {
> diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
> index d04ec3b9e5ff..ce580a57313b 100644
> --- a/drivers/thermal/of-thermal.c
> +++ b/drivers/thermal/of-thermal.c
> @@ -994,8 +994,7 @@ int __init of_parse_thermal_zones(void)
>  			goto exit_free;
>  		}
>  
> -		/* No hwmon because there might be hwmon drivers registering */
> -		tzp->no_hwmon = true;
> +		tzp->no_hwmon = !of_property_read_bool(child, "hwmon");
>  
>  		if (!of_property_read_u32(child, "sustainable-power", &prop))
>  			tzp->sustainable_power = prop;
Michael Tatarinov Sept. 2, 2017, 5:53 a.m. UTC | #3
Hello
Thanks for you comments.

2017-08-31 19:08 GMT+04:00, Guenter Roeck <linux@roeck-us.net>:
> On Mon, Jul 10, 2017 at 03:51:46PM +0400, Michael Tatarinov wrote:
>> Introduce an optional property called, hwmon, which enable
>> registration in hwmon subsystems.
>>
>> Cc: Zhang Rui <rui.zhang@intel.com>
>> Cc: Eduardo Valentin <edubezval@gmail.com>
>> Signed-off-by: Michael Tatarinov <kukabu@gmail.com>
>> ---
>>  Documentation/devicetree/bindings/thermal/thermal.txt | 6 ++++++
>>  drivers/thermal/of-thermal.c                          | 3 +--
>>  2 files changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/Documentation/devicetree/bindings/thermal/thermal.txt
>> b/Documentation/devicetree/bindings/thermal/thermal.txt
>> index 88b6ea1ad290..4e51fbd4efa2 100644
>> --- a/Documentation/devicetree/bindings/thermal/thermal.txt
>> +++ b/Documentation/devicetree/bindings/thermal/thermal.txt
>> @@ -175,6 +175,10 @@ Optional property:
>>  			2000mW, while on a 10'' tablet is around
>>  			4500mW.
>>
>> +- hwmon:		Register the thermal zone in hwmon subsystems
>> +  Type: boolean 	(requires CONFIG_THERMAL_HWMON).
>> +  Size: one cell
>> +
>
> That will probably be unacceptable since it is not a hardware description
> or configuration flag but an implementation problem.

I didn't know it. I agree with change "hwmon" to "linux,hwmon".

> What might be acceptable is to use a device property such as "linux,no-hwmon",
> set it in hwmon drivers prior to calling the registration function, then use
> device_property_present() in the thermal code to check it and assign the flag
> to no_hwmon. An alternative might be to add a "no_hwmon" parameter to the
> thermal registration function, but that would be much more invasive and,
> in my opinion, much less desirable.

I think it should be a thermal driver option. Comment says that the
registration is disabled to prevent dual registration (native hwmon
driver and imported thermal driver).

> Rui, Eduardo, any thoughts ?
>
> Thanks,
> Guenter
>
>>  Note: The delay properties are bound to the maximum dT/dt (temperature
>>  derivative over time) in two situations for a thermal zone:
>>  (i)  - when passive cooling is activated (polling-delay-passive); and
>> @@ -556,6 +560,8 @@ thermal-zones {
>>
>>  		sustainable-power = <2500>;
>>
>> +		hwmon;
>> +
>>  		trips {
>>  			/* Trips are based on resulting linear equation */
>>  			cpu_trip: cpu-trip {
>> diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
>> index d04ec3b9e5ff..ce580a57313b 100644
>> --- a/drivers/thermal/of-thermal.c
>> +++ b/drivers/thermal/of-thermal.c
>> @@ -994,8 +994,7 @@ int __init of_parse_thermal_zones(void)
>>  			goto exit_free;
>>  		}
>>
>> -		/* No hwmon because there might be hwmon drivers registering */
>> -		tzp->no_hwmon = true;
>> +		tzp->no_hwmon = !of_property_read_bool(child, "hwmon");
>>
>>  		if (!of_property_read_u32(child, "sustainable-power", &prop))
>>  			tzp->sustainable_power = prop;
>
Eduardo Valentin Dec. 5, 2017, 1:46 a.m. UTC | #4
On Wed, Jul 12, 2017 at 11:49:10AM +0400, Michael Tatarinov wrote:
> Hello
> 
> Some clarifications for this patch.
> I uses CONFIG_THERMAL_HWMON feature on Raspberry PI. It works ok with
> the downstream thermal driver because it uses
> thermal_zone_device_register(). After I switches to the upstream
> driver this feature doesn't work because it uses
> thermal_zone_of_sensor_register().
> I would like to use this opportunity and in the future.

I would be OK with the linux,no-hwmon flag, but that needs to be acked
by the DT folks.

> 
> 2017-07-10 15:51 GMT+04:00, Michael Tatarinov <kukabu@gmail.com>:
> > Introduce an optional property called, hwmon, which enable
> > registration in hwmon subsystems.
> >
> > Cc: Zhang Rui <rui.zhang@intel.com>
> > Cc: Eduardo Valentin <edubezval@gmail.com>
> > Signed-off-by: Michael Tatarinov <kukabu@gmail.com>
> > ---
> >  Documentation/devicetree/bindings/thermal/thermal.txt | 6 ++++++
> >  drivers/thermal/of-thermal.c                          | 3 +--
> >  2 files changed, 7 insertions(+), 2 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/thermal/thermal.txt
> > b/Documentation/devicetree/bindings/thermal/thermal.txt
> > index 88b6ea1ad290..4e51fbd4efa2 100644
> > --- a/Documentation/devicetree/bindings/thermal/thermal.txt
> > +++ b/Documentation/devicetree/bindings/thermal/thermal.txt
> > @@ -175,6 +175,10 @@ Optional property:
> >  			2000mW, while on a 10'' tablet is around
> >  			4500mW.
> >
> > +- hwmon:		Register the thermal zone in hwmon subsystems
> > +  Type: boolean 	(requires CONFIG_THERMAL_HWMON).
> > +  Size: one cell
> > +
> >  Note: The delay properties are bound to the maximum dT/dt (temperature
> >  derivative over time) in two situations for a thermal zone:
> >  (i)  - when passive cooling is activated (polling-delay-passive); and
> > @@ -556,6 +560,8 @@ thermal-zones {
> >
> >  		sustainable-power = <2500>;
> >
> > +		hwmon;
> > +
> >  		trips {
> >  			/* Trips are based on resulting linear equation */
> >  			cpu_trip: cpu-trip {
> > diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
> > index d04ec3b9e5ff..ce580a57313b 100644
> > --- a/drivers/thermal/of-thermal.c
> > +++ b/drivers/thermal/of-thermal.c
> > @@ -994,8 +994,7 @@ int __init of_parse_thermal_zones(void)
> >  			goto exit_free;
> >  		}
> >
> > -		/* No hwmon because there might be hwmon drivers registering */
> > -		tzp->no_hwmon = true;
> > +		tzp->no_hwmon = !of_property_read_bool(child, "hwmon");
> >
> >  		if (!of_property_read_u32(child, "sustainable-power", &prop))
> >  			tzp->sustainable_power = prop;
> > --
> > 2.9.4
> >
> >
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/thermal/thermal.txt b/Documentation/devicetree/bindings/thermal/thermal.txt
index 88b6ea1ad290..4e51fbd4efa2 100644
--- a/Documentation/devicetree/bindings/thermal/thermal.txt
+++ b/Documentation/devicetree/bindings/thermal/thermal.txt
@@ -175,6 +175,10 @@  Optional property:
 			2000mW, while on a 10'' tablet is around
 			4500mW.
 
+- hwmon:		Register the thermal zone in hwmon subsystems
+  Type: boolean 	(requires CONFIG_THERMAL_HWMON).
+  Size: one cell
+
 Note: The delay properties are bound to the maximum dT/dt (temperature
 derivative over time) in two situations for a thermal zone:
 (i)  - when passive cooling is activated (polling-delay-passive); and
@@ -556,6 +560,8 @@  thermal-zones {
 
 		sustainable-power = <2500>;
 
+		hwmon;
+
 		trips {
 			/* Trips are based on resulting linear equation */
 			cpu_trip: cpu-trip {
diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
index d04ec3b9e5ff..ce580a57313b 100644
--- a/drivers/thermal/of-thermal.c
+++ b/drivers/thermal/of-thermal.c
@@ -994,8 +994,7 @@  int __init of_parse_thermal_zones(void)
 			goto exit_free;
 		}
 
-		/* No hwmon because there might be hwmon drivers registering */
-		tzp->no_hwmon = true;
+		tzp->no_hwmon = !of_property_read_bool(child, "hwmon");
 
 		if (!of_property_read_u32(child, "sustainable-power", &prop))
 			tzp->sustainable_power = prop;