lede/package/lean/cpufreq/files/cpufreq.init
2024-06-21 20:45:27 +08:00

59 lines
1.6 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
START=15
USE_PROCD=1
NAME="cpufreq"
CPUFREQ_PATH="/sys/devices/system/cpu/cpufreq"
extra_command "get_policies" "Get CPU scaling governors and frequencies"
get_policies() {
json_init
for policy in $(ls -d "$CPUFREQ_PATH"/policy[0-9]* 2>"/dev/null"); do
[ -s "$policy/scaling_available_frequencies" ] || continue
json_add_object "$(basename "$policy")"
json_add_string "index" "$(basename "$policy" | grep -Eo "[0-9]*$")"
json_add_string "cpus" "$(cat "$policy/affected_cpus")"
json_add_array "freqs"
for freq in $(cat "$policy/scaling_available_frequencies"); do
json_add_string "" "$freq"
done
json_close_array
json_add_array "governors"
for governor in $(cat "$policy/scaling_available_governors"); do
json_add_string "" "$governor"
done
json_close_array
json_close_object
done
json_dump
}
write_cpufreq_config() {
local value
config_get value "$NAME" "$1"
[ -z "$value" ] || echo -n "$value" > "$2"
}
start_service() {
config_load "$NAME"
for i in $(ls -d "$CPUFREQ_PATH"/policy[0-9]* 2>"/dev/null" | grep -Eo "[0-9]*$")
do
[ -z "$(config_get "$NAME" "governor$i")" ] && return
write_cpufreq_config "governor$i" "$CPUFREQ_PATH/policy$i/scaling_governor"
write_cpufreq_config "minfreq$i" "$CPUFREQ_PATH/policy$i/scaling_min_freq"
write_cpufreq_config "maxfreq$i" "$CPUFREQ_PATH/policy$i/scaling_max_freq"
if [ "$(config_get "$NAME" "governor$i")" = "ondemand" ]; then
write_cpufreq_config "sdfactor$i" "$CPUFREQ_PATH/ondemand/sampling_down_factor"
write_cpufreq_config "upthreshold$i" "$CPUFREQ_PATH/ondemand/up_threshold"
fi
done
}
service_triggers() {
procd_add_reload_trigger "$NAME"
}