From 3d01bee02309933f696c5d704343357e155c72c6 Mon Sep 17 00:00:00 2001 From: Martin Kepplinger Date: Sun, 29 Mar 2020 13:06:49 +0200 Subject: [PATCH] power_key.py: make compatible with all our kernels devfreq is being handled differently on our kernels. This implements the various logics, with 5.7+ not needing the script anymore, for devfreq, when the powersave governor is set by udev. --- usr/bin/power_key.py | 57 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/usr/bin/power_key.py b/usr/bin/power_key.py index 25c65bd..263874e 100755 --- a/usr/bin/power_key.py +++ b/usr/bin/power_key.py @@ -8,6 +8,26 @@ import sys import evdev +# 5.X +kernel_version = 3 + + +def get_kernel_version(): + with open("/proc/version") as f: + global kernel_version + if 'version 5.6.' in f.read(): + kernel_version = 6 + elif 'version 5.7.' in f.read(): + kernel_version = 7 + else: + kernel_version = 8 + + +# devfreq logic: +# for 5.6+ new sysfs paths +# for 5.7+ check for powersave governor only (interconnect solution) + + def check_screen(): with open("/sys/class/leds/lm36922:white:backlight_cluster/brightness") as ledf: state = ledf.read() @@ -28,20 +48,25 @@ def find_dram_devfreq(): return dram -set_freq = os.path.join(find_dram_devfreq(), 'userspace/set_freq') - - def set_dram_freq(freq): - with open(set_freq, "w+") as f: + with open(os.path.join(find_dram_devfreq(), 'userspace/set_freq'), "w+") as f: f.write(freq + "\n") -def get_low_freq(): - with open("/proc/version") as f: - return ["25000000", "100000000"]['version 5.3.' in f.read()] +# different on the devkit and the phone +def get_low_freq_dram(): + if kernel_version == 3: + return "100000000" + else: + with open(os.path.join(find_dram_devfreq(), 'min_freq')) as f: + freq = f.read() + return freq def main(args): + get_kernel_version() + print("for kernel version 5.%d" % (kernel_version)) + powerkeyname = '30370000.snvs:snvs-powerkey' hi_speed = "800000000" @@ -50,9 +75,14 @@ def main(args): dev = InputDevice(foundpath) with open(os.path.join(find_dram_devfreq(), 'governor'), "w+") as f: - f.write("userspace\n") + if kernel_version < 7: + f.write("userspace\n") + else: + # should be set by udev already + f.write("powersave\n") - set_dram_freq(hi_speed) + if kernel_version < 7: + set_dram_freq(hi_speed) power_wait_time = 1.5 @@ -60,7 +90,8 @@ def main(args): blank = False else: blank = True - set_dram_freq(get_low_freq()) + if kernel_version < 7: + set_dram_freq(get_low_freq_dram()) # wait for the key release event so that we can differentiate # between long and short press @@ -78,7 +109,8 @@ def main(args): if event.code == ecodes.KEY_POWER and blank: print("screen wakeup") blank = False - set_dram_freq(hi_speed) + if kernel_version < 7: + set_dram_freq(hi_speed) else: state[event.code] = event.timestamp(), event print("Key: %s %d %d pressed" % (ecodes.KEY[event.code], event.code, ecodes.KEY_POWER)) @@ -90,7 +122,8 @@ def main(args): if event.code == ecodes.KEY_POWER and delta < power_wait_time: # short power key press blanks the screen so change the DDR freq blank = True - set_dram_freq(get_low_freq()) + if kernel_version < 7: + set_dram_freq(get_low_freq_dram()) # os.system("systemctl suspend -q") del state[event.code] -- GitLab