123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- From 6bd64bbc79b7a86224dea328dee07fa27f2cc06b Mon Sep 17 00:00:00 2001
- From: Lawrence-Tang <[email protected]>
- Date: Wed, 20 Oct 2021 15:00:23 +0800
- Subject: [PATCH] rockchip: add fan control for r2s/r4s
- ---
- .../armv8/base-files/etc/init.d/fa-fancontrol | 16 ++++
- .../armv8/base-files/usr/bin/cputemp.sh | 14 ++++
- .../usr/bin/fa-fancontrol-direct.sh | 69 +++++++++++++++++++
- .../armv8/base-files/usr/bin/fa-fancontrol.sh | 36 ++++++++++
- 4 files changed, 127 insertions(+)
- create mode 100755 target/linux/rockchip/armv8/base-files/etc/init.d/fa-fancontrol
- create mode 100755 target/linux/rockchip/armv8/base-files/usr/bin/cputemp.sh
- create mode 100755 target/linux/rockchip/armv8/base-files/usr/bin/fa-fancontrol-direct.sh
- create mode 100755 target/linux/rockchip/armv8/base-files/usr/bin/fa-fancontrol.sh
- diff --git a/target/linux/rockchip/armv8/base-files/etc/init.d/fa-fancontrol b/target/linux/rockchip/armv8/base-files/etc/init.d/fa-fancontrol
- new file mode 100755
- index 0000000000000..dd848927101b0
- --- /dev/null
- +++ b/target/linux/rockchip/armv8/base-files/etc/init.d/fa-fancontrol
- @@ -0,0 +1,16 @@
- +#!/bin/sh /etc/rc.common
- +
- +START=21
- +start() {
- + /usr/bin/fa-fancontrol.sh &
- +}
- +
- +stop() {
- +kill -9 $(ps -w | grep fa-fancontrol | grep -v grep | awk '{print$1}') 2>/dev/null
- +}
- +
- +restart() {
- +stop
- +start
- +}
- +
- diff --git a/target/linux/rockchip/armv8/base-files/usr/bin/cputemp.sh b/target/linux/rockchip/armv8/base-files/usr/bin/cputemp.sh
- new file mode 100755
- index 0000000000000..e497269bccdcd
- --- /dev/null
- +++ b/target/linux/rockchip/armv8/base-files/usr/bin/cputemp.sh
- @@ -0,0 +1,14 @@
- +#!/bin/bash
- +
- +while true
- +do
- +echo "-----------------"
- +echo "Curr freq: `cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq`,`cat /sys/devices/system/cpu/cpu4/cpufreq/cpuinfo_cur_freq`"
- +echo "Temp: `cat /sys/class/thermal/thermal_zone0/temp`"
- +if [ -d /sys/devices/platform/pwm-fan ]; then
- + CUR=`cat /sys/devices/virtual/thermal/cooling_device0/cur_state`
- + MAX=`cat /sys/devices/virtual/thermal/cooling_device0/max_state`
- + echo "Fan Level: ${CUR}/${MAX}"
- +fi
- +sleep 5
- +done
- diff --git a/target/linux/rockchip/armv8/base-files/usr/bin/fa-fancontrol-direct.sh b/target/linux/rockchip/armv8/base-files/usr/bin/fa-fancontrol-direct.sh
- new file mode 100755
- index 0000000000000..b16c994d66955
- --- /dev/null
- +++ b/target/linux/rockchip/armv8/base-files/usr/bin/fa-fancontrol-direct.sh
- @@ -0,0 +1,69 @@
- +#!/bin/bash
- +
- +# determine fan controller
- +if [ -d /sys/devices/platform/pwm-fan ]; then
- + echo "pls use /usr/bin/fa-fancontrol.sh."
- + exit 1
- +fi
- +
- +if [ ! -d /sys/class/pwm/pwmchip1 ]; then
- + echo "this model does not support pwm."
- + exit 1
- +fi
- +if [ ! -d /sys/class/pwm/pwmchip1/pwm0 ]; then
- + echo 0 > /sys/class/pwm/pwmchip1/export
- +fi
- +sleep 1
- +while [ ! -d /sys/class/pwm/pwmchip1/pwm0 ];
- +do
- + sleep 1
- +done
- +ISENABLE=`cat /sys/class/pwm/pwmchip1/pwm0/enable`
- +if [ $ISENABLE -eq 1 ]; then
- + echo 0 > /sys/class/pwm/pwmchip1/pwm0/enable
- +fi
- +echo 50000 > /sys/class/pwm/pwmchip1/pwm0/period
- +echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
- +
- +# max speed run 5s
- +echo 46990 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
- +sleep 5
- +echo 25000 > /sys/class/pwm/pwmchip1/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=(25000 35000 45000 46990)
- +
- +declare -a Percents=(100 75 50 25)
- +DefaultDuty=49990
- +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 $DUTY > /sys/class/pwm/pwmchip1/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/target/linux/rockchip/armv8/base-files/usr/bin/fa-fancontrol.sh b/target/linux/rockchip/armv8/base-files/usr/bin/fa-fancontrol.sh
- new file mode 100755
- index 0000000000000..e7c14054c80e9
- --- /dev/null
- +++ b/target/linux/rockchip/armv8/base-files/usr/bin/fa-fancontrol.sh
- @@ -0,0 +1,36 @@
- +#!/bin/bash
- +
- +# determine fan controller
- +if [ -d /sys/devices/platform/pwm-fan ]; then
- + (cd /sys/devices/virtual/thermal/thermal_zone0 && {
- + logger -p user.info -t "pwmfan" "set the conditions for fan"
- + [ -f trip_point_3_temp ] && {
- + # select fan level 1
- + echo 50000 > trip_point_3_temp
- + }
- + [ -f trip_point_4_temp ] && {
- + # select fan level 2-4
- + echo 55000 > trip_point_4_temp
- + }
- + })
- +
- + (cd /sys/devices/virtual/thermal/cooling_device0 && {
- + TYPE=`cat type`
- + if [ $TYPE = 'pwm-fan' ]; then
- + # run 5s
- + for i in `seq 1 5`; do
- + logger -p user.info -t "pwmfan" "start to spin ${i}/5"
- + echo 3 > cur_state
- + sleep 1
- + done
- + logger -p user.info -t "pwmfan" "set to auto"
- + echo 0 > cur_state
- + fi
- + })
- +else
- + logger -p user.info -t "pwmfan" "not found cooling device"
- + if [ -d /sys/class/pwm ]; then
- + nohup /usr/bin/fa-fancontrol-direct.sh&
- + fi
- +fi
- +
|