[v5,1/5] dt-bindings: thermal: sun8i: Add A523 THS0/1 controllers
Commit Message
Add dt-bindings description of the thermal sensors in the A523 processor.
The controllers require activation of the additional frequency of the
associated gpadc controller, so a mod clock property required.
The calibration data for both thermal controllers (THS0, THS1) is split
across two nvmem cells at different offsets, requiring the two cells
to be read and merged. To maintain backward compatibility, the name of
the old cell remains "calibration" and the new cell is named
"calibration-second-part".
Signed-off-by: Mikhail Kalashnikov <iuncuim@gmail.com>
Reviewed-by: Chen-Yu Tsai <wens@kernel.org>
---
.../thermal/allwinner,sun8i-a83t-ths.yaml | 54 +++++++++++++++++--
1 file changed, 51 insertions(+), 3 deletions(-)
Comments
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Low] The fallback `else` branch fails to explicitly restrict `nvmem-cell-names` to `maxItems: 1` for legacy devices.
- [Low] The `clocks: minItems: 2` constraint in the new `allOf` block for A523 devices is redundant.
--
commit 3b55695ed8b61c3a70dec40b0b70e9958c234bfc
Author: Mikhail Kalashnikov <iuncuim@gmail.com>
dt-bindings: thermal: sun8i: Add A523 THS0/1 controllers
This commit adds device tree binding descriptions for the thermal sensors
in the A523 processor. It updates the schema to require an additional
clock for these variants and supports split calibration data across two
nvmem cells.
> diff --git a/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml b/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
> index 3e61689f6dd41..6f5b2f3b94f80 100644
> --- a/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
> +++ b/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
[ ... ]
> @@ -132,6 +140,29 @@ allOf:
> - clock-names
> - resets
>
> + - if:
> + properties:
> + compatible:
> + contains:
> + enum:
> + - allwinner,sun55i-a523-ths0
> + - allwinner,sun55i-a523-ths1
> + then:
> + properties:
> + clocks:
> + minItems: 2
[Severity: Low]
Is this constraint redundant? The first allOf block in this file checks
for single-clock devices and its else branch already applies minItems: 2
for clocks and clock-names to all other devices. Since the A523 variant
is not in that single-clock list, shouldn't it already be constrained to
2 clocks?
> + nvmem-cells:
> + minItems: 2
> + nvmem-cell-names:
> + minItems: 2
> + else:
> + properties:
> + nvmem-cells:
> + maxItems: 1
> + nvmem-cell-names:
> + items:
> + - const: calibration
[Severity: Low]
Does this else block also need to specify maxItems: 1 for
nvmem-cell-names?
Redefining items as a tuple only validates the specified elements but
does not restrict the total array length. Without maxItems: 1, legacy
device trees could erroneously define two nvmem-cell-names and still
pass validation.
> +
> required:
> - compatible
> - reg
On Sun, Jul 05, 2026 at 01:14:07AM +0800, Mikhail Kalashnikov wrote:
> Add dt-bindings description of the thermal sensors in the A523 processor.
>
> The controllers require activation of the additional frequency of the
> associated gpadc controller, so a mod clock property required.
>
> The calibration data for both thermal controllers (THS0, THS1) is split
> across two nvmem cells at different offsets, requiring the two cells
> to be read and merged. To maintain backward compatibility, the name of
> the old cell remains "calibration" and the new cell is named
> "calibration-second-part".
>
> Signed-off-by: Mikhail Kalashnikov <iuncuim@gmail.com>
> Reviewed-by: Chen-Yu Tsai <wens@kernel.org>
> ---
> .../thermal/allwinner,sun8i-a83t-ths.yaml | 54 +++++++++++++++++--
> 1 file changed, 51 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml b/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
> index 3e61689f6..6f5b2f3b9 100644
> --- a/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
> +++ b/Documentation/devicetree/bindings/thermal/allwinner,sun8i-a83t-ths.yaml
> @@ -24,6 +24,8 @@ properties:
> - allwinner,sun50i-h5-ths
> - allwinner,sun50i-h6-ths
> - allwinner,sun50i-h616-ths
> + - allwinner,sun55i-a523-ths0
> + - allwinner,sun55i-a523-ths1
>
> clocks:
> minItems: 1
> @@ -47,11 +49,16 @@ properties:
> maxItems: 1
>
> nvmem-cells:
> - maxItems: 1
> - description: Calibration data for thermal sensors
> + minItems: 1
> + items:
> + - description: Calibration data for thermal sensors
> + - description: Additional cell in case of separate calibration data
>
> nvmem-cell-names:
> - const: calibration
> + minItems: 1
> + items:
> + - const: calibration
> + - const: calibration-second-part
>
> allwinner,sram:
> maxItems: 1
> @@ -107,6 +114,7 @@ allOf:
> enum:
> - allwinner,sun8i-h3-ths
> - allwinner,sun20i-d1-ths
> + - allwinner,sun55i-a523-ths0
>
> then:
> properties:
> @@ -132,6 +140,29 @@ allOf:
> - clock-names
> - resets
>
> + - if:
> + properties:
> + compatible:
> + contains:
> + enum:
> + - allwinner,sun55i-a523-ths0
> + - allwinner,sun55i-a523-ths1
> + then:
> + properties:
> + clocks:
> + minItems: 2
Missing clock-names
Look at other variants here, how they did it.
> + nvmem-cells:
> + minItems: 2
> + nvmem-cell-names:
> + minItems: 2
> + else:
> + properties:
> + nvmem-cells:
> + maxItems: 1
> + nvmem-cell-names:
maxItems instead
> + items:
> + - const: calibration
> +
> required:
> - compatible
> - reg
> @@ -176,4 +207,21 @@ examples:
> #thermal-sensor-cells = <1>;
> };
>
> + - |
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/clock/sun55i-a523-ccu.h>
> + #include <dt-bindings/reset/sun55i-a523-ccu.h>
> +
> + thermal-sensor@2009400 {
You already have three examples, it is enough. Drop. Actually two would be
enough already...
Best regards,
Krzysztof
@@ -24,6 +24,8 @@ properties:
- allwinner,sun50i-h5-ths
- allwinner,sun50i-h6-ths
- allwinner,sun50i-h616-ths
+ - allwinner,sun55i-a523-ths0
+ - allwinner,sun55i-a523-ths1
clocks:
minItems: 1
@@ -47,11 +49,16 @@ properties:
maxItems: 1
nvmem-cells:
- maxItems: 1
- description: Calibration data for thermal sensors
+ minItems: 1
+ items:
+ - description: Calibration data for thermal sensors
+ - description: Additional cell in case of separate calibration data
nvmem-cell-names:
- const: calibration
+ minItems: 1
+ items:
+ - const: calibration
+ - const: calibration-second-part
allwinner,sram:
maxItems: 1
@@ -107,6 +114,7 @@ allOf:
enum:
- allwinner,sun8i-h3-ths
- allwinner,sun20i-d1-ths
+ - allwinner,sun55i-a523-ths0
then:
properties:
@@ -132,6 +140,29 @@ allOf:
- clock-names
- resets
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - allwinner,sun55i-a523-ths0
+ - allwinner,sun55i-a523-ths1
+ then:
+ properties:
+ clocks:
+ minItems: 2
+ nvmem-cells:
+ minItems: 2
+ nvmem-cell-names:
+ minItems: 2
+ else:
+ properties:
+ nvmem-cells:
+ maxItems: 1
+ nvmem-cell-names:
+ items:
+ - const: calibration
+
required:
- compatible
- reg
@@ -176,4 +207,21 @@ examples:
#thermal-sensor-cells = <1>;
};
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/clock/sun55i-a523-ccu.h>
+ #include <dt-bindings/reset/sun55i-a523-ccu.h>
+
+ thermal-sensor@2009400 {
+ compatible = "allwinner,sun55i-a523-ths1";
+ reg = <0x02009400 0x400>;
+ interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&ccu CLK_BUS_THS>, <&ccu CLK_GPADC1>;
+ clock-names = "bus", "mod";
+ resets = <&ccu RST_BUS_THS>;
+ nvmem-cells = <&ths_calibration0>, <&ths_calibration1>;
+ nvmem-cell-names = "calibration",
+ "calibration-second-part";
+ #thermal-sensor-cells = <1>;
+ };
...