Message ID | 20220111103346.2660639-2-abailon@baylibre.com |
---|---|
State | New |
Headers | show |
Series | Add a generic virtual thermal sensor | expand |
On 11/01/2022 11:33, Alexandre Bailon wrote: > This adds the DT bindings for the DT-based virtual sensor driver. > This driver provides a way, using DT, to aggregate the temperature > of multiple thermal zones and get some useful data from it. > > Signed-off-by: Alexandre Bailon <abailon@baylibre.com> > --- [ ... ] > +description: | > + The virtual thermal sensor device provides a way to aggregate the temperature > + from multiple thermal zones. Basically, this could be used to get the > + maximum, minimum or average temperature. > + > +allOf: > + - $ref: thermal-sensor.yaml# > + > +properties: > + compatible: > + const: virtual,thermal-sensor > + > + aggregation-function: > + $ref: /schemas/types.yaml#/definitions/uint32 > + description: > + Used to select the operations to perform on the sensors to get the virtual > + sensor temperature. > + enum: > + - VIRTUAL_THERMAL_SENSOR_MIN_VAL > + - VIRTUAL_THERMAL_SENSOR_MAX_VAL > + - VIRTUAL_THERMAL_SENSOR_AVG_VAL > + > + thermal-sensors: > + $ref: /schemas/types.yaml#/definitions/string-array > + description: > + The names of the thermal zone to aggregate. IMO this is not correct. We are dealing with virtual sensor in order to aggregate a group of sensors in a thermal zone. But actually this description aggregates the thermal zones. I recalled a detail about the binding from the old 'txt' format from [1]. "- thermal-sensors: A list of thermal sensor phandles and sensor specifier Type: list of phandles + sensor specifier used while monitoring the thermal zone." This information was lost in the conversion to yaml with commit 1202a442a31fd In addition, the "coefficients" property tells the 'thermal-sensors' property can have multiple sensors. So actually, the bindings should be fixed as part of the information was lost during of the txt -> yaml conversion. And the multiple sensors per thermal zone could be implemented as that was something planned since a while. I realize we initially asked to create a virtual sensor but that is not the most adequate ATM. Doing the multiple sensors support makes more sense to me, especially it does not require any extra binding except an attribute tell what kind of temperature aggregation we do. Defaulting to max should suffice when no aggregation method is set. -- Daniel [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/thermal/thermal.txt?h=v4.5#n147
diff --git a/Documentation/devicetree/bindings/thermal/virtual,thermal-sensor.yaml b/Documentation/devicetree/bindings/thermal/virtual,thermal-sensor.yaml new file mode 100644 index 000000000000..b404fd4b2b38 --- /dev/null +++ b/Documentation/devicetree/bindings/thermal/virtual,thermal-sensor.yaml @@ -0,0 +1,86 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright 2021 BayLibre +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/thermal/virtual,thermal-sensor.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Virtual thermal sensor binding + +maintainers: + - Alexandre Bailon <abailon@baylibre.com> + +description: | + The virtual thermal sensor device provides a way to aggregate the temperature + from multiple thermal zones. Basically, this could be used to get the + maximum, minimum or average temperature. + +allOf: + - $ref: thermal-sensor.yaml# + +properties: + compatible: + const: virtual,thermal-sensor + + aggregation-function: + $ref: /schemas/types.yaml#/definitions/uint32 + description: + Used to select the operations to perform on the sensors to get the virtual + sensor temperature. + enum: + - VIRTUAL_THERMAL_SENSOR_MIN_VAL + - VIRTUAL_THERMAL_SENSOR_MAX_VAL + - VIRTUAL_THERMAL_SENSOR_AVG_VAL + + thermal-sensors: + $ref: /schemas/types.yaml#/definitions/string-array + description: + The names of the thermal zone to aggregate. + +required: + - aggregation-function + - thermal-sensors + +additionalProperties: true + +examples: + - | + #include <dt-bindings/thermal/thermal.h> + #include <dt-bindings/thermal/virtual-sensor.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/clock/mt8192-clk.h> + + lvts: lvts@1100b000 { + compatible = "mediatek,mt6873-lvts"; + reg = <0x1100b000 0x1000>; + clocks = <&infracfg CLK_INFRA_THERM>; + clock-names = "lvts_clk"; + #thermal-sensor-cells = <1>; + interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>; + }; + + cpu_max_sensor: cpu_max_sensor { + compatible = "virtual,thermal-sensor"; + #thermal-sensor-cells = <1>; + aggregation-function = <VIRTUAL_THERMAL_SENSOR_MAX_VAL>; + thermal-sensors = "cpu1", "cpu2"; + }; + + thermal_zones: thermal-zones { + cpu1 { + polling-delay = <0>; /* milliseconds */ + polling-delay-passive = <0>; /* milliseconds */ + thermal-sensors = <&lvts 0>; + }; + cpu2 { + polling-delay = <0>; /* milliseconds */ + polling-delay-passive = <0>; /* milliseconds */ + thermal-sensors = <&lvts 1>; + }; + cpu_max { + polling-delay = <0>; /* milliseconds */ + polling-delay-passive = <0>; /* milliseconds */ + thermal-sensors = <&cpu_max_sensor 0>; + }; + }; +... diff --git a/include/dt-bindings/thermal/virtual-sensor.h b/include/dt-bindings/thermal/virtual-sensor.h new file mode 100644 index 000000000000..6254b2aa8f5c --- /dev/null +++ b/include/dt-bindings/thermal/virtual-sensor.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * This header provides constants for virtual thermal sensor bindings. + * + * Copyright (C) 2021 BayLibre + */ + +#ifndef _DT_BINDINGS_THERMAL_VIRTUAL_SENSOR_H +#define _DT_BINDINGS_THERMAL_VIRTUAL_SENSOR_H + +#define VIRTUAL_THERMAL_SENSOR_MIN_VAL 0 +#define VIRTUAL_THERMAL_SENSOR_MAX_VAL 1 +#define VIRTUAL_THERMAL_SENSOR_AVG_VAL 2 + +#endif /* _DT_BINDINGS_THERMAL_VIRTUAL_SENSOR_H */
This adds the DT bindings for the DT-based virtual sensor driver. This driver provides a way, using DT, to aggregate the temperature of multiple thermal zones and get some useful data from it. Signed-off-by: Alexandre Bailon <abailon@baylibre.com> --- .../thermal/virtual,thermal-sensor.yaml | 86 +++++++++++++++++++ include/dt-bindings/thermal/virtual-sensor.h | 15 ++++ 2 files changed, 101 insertions(+) create mode 100644 Documentation/devicetree/bindings/thermal/virtual,thermal-sensor.yaml create mode 100644 include/dt-bindings/thermal/virtual-sensor.h