[openwrt/openwrt] mediatek: fix pwn fan settings for sinovoip bpi-r3 (v3)

LEDE Commits lede-commits at lists.infradead.org
Mon Dec 22 01:33:48 PST 2025


robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/095151b2354752be6b4be81e6b22b65227c59746

commit 095151b2354752be6b4be81e6b22b65227c59746
Author: Mikhail Kshevetskiy <mikhail.kshevetskiy at gmail.com>
AuthorDate: Fri Nov 22 01:29:06 2024 +0300

    mediatek: fix pwn fan settings for sinovoip bpi-r3 (v3)
    
    Popular cheap PWM fans for this machine, like the ones coming in
    heatsink+fan combos will not work properly at the currently defined
    medium speed. Trying different pwm setting using a command
    
      echo $value > /sys/devices/platform/pwm-fan/hwmon/hwmon1/pwm1
    
    I found:
    
      pwm1 value     fan rotation speed   cpu temperature     notes
      -----------------------------------------------------------------
        0            maximal              31.5 Celsius        too noisy
       40            optimal              35.2 Celsius        no noise hearable
       95            minimal
       above 95      does not rotate      55.5 Celsius
      -----------------------------------------------------------------
    
    Current cooling levels are:
    
            cooling-levels = <255 96 0>;
    
    Thus only cpu-active-high and cpu-active-low modes are usable.
    This patch fixes cpu-active-medium settings for bpi-r3 board.
    
    This patch may not be enough. Users may wants to tweak their thermal_zone0
    trip points, thus tuning fan rotation speed depending on cpu temperature.
    That can be done on the base of the following example:
    
      === example =========
      # cpu temperature below 25 Celsius degrees, no rotation
      echo 25000 > /sys/class/thermal/thermal_zone0/trip_point_4_temp
      # cpu temperature in [25..32] Celsius degrees, normal rotation speed
      echo 32000 > /sys/class/thermal/thermal_zone0/trip_point_3_temp
      # cpu temperature above 50 Celsius degrees, max rotation speed
      echo 50000 > /sys/class/thermal/thermal_zone0/trip_point_2_temp
      =====================
    
    Changes v2:
    * put patch to a proper directory
    * updated patch description
    * tested with latest openwrt based on linux-6.6
    
    Changes v3:
    * use upstream linux patch
    * update patch description
    
    Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy at gmail.com>
    Link: https://github.com/openwrt/openwrt/pull/17130
    Signed-off-by: Robert Marko <robimarko at gmail.com>
---
 ...ediatek-mt7986-bpi-r3-Change-fan-PWM-valu.patch | 72 ++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/target/linux/mediatek/patches-6.12/061-v6.19-arm64-dts-mediatek-mt7986-bpi-r3-Change-fan-PWM-valu.patch b/target/linux/mediatek/patches-6.12/061-v6.19-arm64-dts-mediatek-mt7986-bpi-r3-Change-fan-PWM-valu.patch
new file mode 100644
index 0000000000..4b27031d11
--- /dev/null
+++ b/target/linux/mediatek/patches-6.12/061-v6.19-arm64-dts-mediatek-mt7986-bpi-r3-Change-fan-PWM-valu.patch
@@ -0,0 +1,72 @@
+From 5f271fe1365b63f67fc384ca8d50d473d09de0d1 Mon Sep 17 00:00:00 2001
+From: Mikhail Kshevetskiy <mikhail.kshevetskiy at iopsys.eu>
+Date: Tue, 3 Dec 2024 07:33:55 +0300
+Subject: [PATCH] arm64: dts: mediatek: mt7986-bpi-r3: Change fan PWM value for
+ mid speed
+
+Popular cheap PWM fans for this machine, like the ones coming in
+heatsink+fan combos will not work properly at the currently defined
+medium speed. Trying different pwm setting using a command
+
+  echo $value > /sys/devices/platform/pwm-fan/hwmon/hwmon1/pwm1
+
+I found:
+
+  pwm1 value     fan rotation speed   cpu temperature     notes
+  -----------------------------------------------------------------
+    0            maximal              31.5 Celsius        too noisy
+   40            optimal              35.2 Celsius        no noise hearable
+   95            minimal
+   above 95      does not rotate      55.5 Celsius
+  -----------------------------------------------------------------
+
+Thus only cpu-active-high and cpu-active-low modes are usable.
+I think this is wrong.
+
+This patch fixes cpu-active-medium settings for bpi-r3 board.
+
+I know, the patch is not ideal as it can break pwm fan for some users.
+Likely this is the only official mt7986-bpi-r3 heatsink+fan solution
+available on the market.
+
+This patch may not be enough. Users may wants to tweak their thermal_zone0
+trip points, thus tuning fan rotation speed depending on cpu temperature.
+That can be done on the base of the following example:
+
+  === example =========
+  # cpu temperature below 25 Celsius degrees, no rotation
+  echo 25000 > /sys/class/thermal/thermal_zone0/trip_point_4_temp
+  # cpu temperature in [25..32] Celsius degrees, normal rotation speed
+  echo 32000 > /sys/class/thermal/thermal_zone0/trip_point_3_temp
+  # cpu temperature above 50 Celsius degrees, max rotation speed
+  echo 50000 > /sys/class/thermal/thermal_zone0/trip_point_2_temp
+  =====================
+
+Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy at iopsys.eu>
+Acked-by: Frank Wunderlich <frank-w at public-files.de>
+Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
+
+---
+Changes from v1 to v2:
+ * improve patch description
+
+Changes from v2 to v3:
+ * added question to Frank Wunderlich
+
+Changes from v3 to v4:
+ * Acked by Frank Wunderlich
+---
+ arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
++++ b/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
+@@ -42,7 +42,7 @@
+ 		compatible = "pwm-fan";
+ 		#cooling-cells = <2>;
+ 		/* cooling level (0, 1, 2) - pwm inverted */
+-		cooling-levels = <255 96 0>;
++		cooling-levels = <255 40 0>;
+ 		pwms = <&pwm 0 10000>;
+ 		status = "okay";
+ 	};




More information about the lede-commits mailing list