]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: dts: rockchip: hook up the MCU on the QNAP TS433
authorHeiko Stuebner <heiko@sntech.de>
Thu, 7 Nov 2024 11:47:11 +0000 (12:47 +0100)
committerHeiko Stuebner <heiko@sntech.de>
Fri, 3 Jan 2025 14:24:21 +0000 (15:24 +0100)
The MCU is an important part of the device functionality. It provides
functionality like fan-control, more leds, etc and even more important
without it, the NAS-device cannot even fully turned off.

Hook up the serial device to its uart and hook into the thermal
management to control the fan according to the cpu temperature.

While the MCU also provides a temperature sensor for the case, this one
is just polled and does not provide functionality for handling trip
points in hardware, so a lot of polling would be involved.
As the cpu is only cooled passively in these devices, it's temperature
rising will indicate the temperature level of the system just earlier.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20241107114712.538976-9-heiko@sntech.de
arch/arm64/boot/dts/rockchip/rk3568-qnap-ts433.dts

index e601d9271ba8985eb28e918a9408af72742d86ed..4bc5f5691d45b9e8f310484b0e9d68f0e04ba9d5 100644 (file)
        };
 };
 
+/*
+ * The MCU can provide system temperature too, but only by polling and of
+ * course also cannot set trip points. So attach to the cpu thermal-zone
+ * instead to control the fan.
+ */
+&cpu_thermal {
+       trips {
+               case_fan0: case-fan0 {
+                       hysteresis = <2000>;
+                       temperature = <35000>;
+                       type = "active";
+               };
+
+               case_fan1: case-fan1 {
+                       hysteresis = <2000>;
+                       temperature = <45000>;
+                       type = "active";
+               };
+
+               case_fan2: case-fan2 {
+                       hysteresis = <2000>;
+                       temperature = <65000>;
+                       type = "active";
+               };
+       };
+
+       cooling-maps {
+               /*
+                * Always provide some air movement, due to small case
+                * full of harddrives.
+                */
+               map1 {
+                       cooling-device = <&fan THERMAL_NO_LIMIT 1>;
+                       trip = <&case_fan0>;
+               };
+
+               map2 {
+                       cooling-device = <&fan 2 3>;
+                       trip = <&case_fan1>;
+               };
+
+               map3 {
+                       cooling-device = <&fan 4 THERMAL_NO_LIMIT>;
+                       trip = <&case_fan2>;
+               };
+       };
+};
+
 &pcie30phy {
        data-lanes = <1 2>;
        status = "okay";
  */
 &uart0 {
        status = "okay";
+
+       mcu {
+               compatible = "qnap,ts433-mcu";
+
+               fan: fan-0 {
+                       #cooling-cells = <2>;
+                       cooling-levels = <0 64 89 128 166 204 221 238>;
+               };
+       };
 };
 
 /*