From 498aa5782a9859ca39f05e04dd9ec9d6abd7207e Mon Sep 17 00:00:00 2001 From: baiywt Date: Tue, 28 Dec 2021 16:58:37 +0800 Subject: [PATCH] Add pwm-fan.sh for Orange Pi R1 Plus LTS --- .../config/sources/families/rockchip64.conf | 1 + external/packages/blobs/rockchip/pwm-fan.sh | 64 +++++++++++++++++++ .../orangepi/orangepi-hardware-optimization | 3 + 3 files changed, 68 insertions(+) create mode 100755 external/packages/blobs/rockchip/pwm-fan.sh diff --git a/external/config/sources/families/rockchip64.conf b/external/config/sources/families/rockchip64.conf index 5bef67b..ce5e507 100644 --- a/external/config/sources/families/rockchip64.conf +++ b/external/config/sources/families/rockchip64.conf @@ -8,6 +8,7 @@ family_tweaks_bsp() if [[ $BOARD =~ orangepir1plus|orangepir1plus-lts ]]; then install -m 755 $EXTER/packages/blobs/rockchip/set_r1plus_lan_mac.sh $destination/usr/bin/ + install -m 755 $EXTER/packages/blobs/rockchip/pwm-fan.sh $destination/usr/bin/ fi } diff --git a/external/packages/blobs/rockchip/pwm-fan.sh b/external/packages/blobs/rockchip/pwm-fan.sh new file mode 100755 index 0000000..251c61a --- /dev/null +++ b/external/packages/blobs/rockchip/pwm-fan.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +if [ ! -d /sys/class/pwm/pwmchip0 ]; then + echo "this model does not support pwm." + exit 1 +fi + +if [ ! -d /sys/class/pwm/pwmchip0/pwm0 ]; then + echo -n 0 > /sys/class/pwm/pwmchip0/export +fi +sleep 1 +while [ ! -d /sys/class/pwm/pwmchip0/pwm0 ]; +do + sleep 1 +done +ISENABLE=`cat /sys/class/pwm/pwmchip0/pwm0/enable` +if [ $ISENABLE -eq 1 ]; then + echo -n 0 > /sys/class/pwm/pwmchip0/pwm0/enable +fi +echo -n 1000000 > /sys/class/pwm/pwmchip0/pwm0/period +echo -n 1 > /sys/class/pwm/pwmchip0/pwm0/enable + +# max speed run 5s +echo -n 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle +sleep 5 +echo -n 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle + +# declare -a CpuTemps=(55000 43000 38000 32000) +# declare -a PwmDutyCycles=(1000 20000 30000 45000) + +declare -a CpuTemps=(75000 63000 58000 52000) +declare -a PwmDutyCycles=(500000 650000 800000 950000) + +declare -a Percents=(100 75 50 25) +DefaultDuty=999990 +DefaultPercents=0 + +while true +do + temp=$(cat /sys/class/thermal/thermal_zone0/temp) + INDEX=0 + FOUNDTEMP=0 + DUTY=$DefaultDuty + PERCENT=$DefaultPercents + + for i in 0 1 2 3; do + if [ $temp -gt ${CpuTemps[$i]} ]; then + INDEX=$i + FOUNDTEMP=1 + break + fi + done + if [ ${FOUNDTEMP} == 1 ]; then + DUTY=${PwmDutyCycles[$i]} + PERCENT=${Percents[$i]} + fi + + echo -n $DUTY > /sys/class/pwm/pwmchip0/pwm0/duty_cycle; + + # echo "temp: $temp, duty: $DUTY, ${PERCENT}%" + # cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq + + sleep 2s; +done diff --git a/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization b/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization index 07a8afa..12b25fa 100755 --- a/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization +++ b/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization @@ -95,6 +95,9 @@ prepare_board() { rfkill unblock all /usr/bin/hciattach_opi -n -s 1500000 /dev/ttyBT0 sprd & ;; + orangepir1plus|orangepir1plus-lts) + /usr/bin/pwm-fan.sh & + ;; orangepizero2|orangepizero2-lts|orangepizero2-b) if [[ $BRANCH == current ]]; then # Initial hdmi audio