@@ -472,22 +472,14 @@ def get_load():
472472def display_system_load_avg (): print (" (load average: {:.2f}, {:.2f}, {:.2f})" .format (* os .getloadavg ()))
473473
474474# set minimum and maximum CPU frequencies
475- def set_frequencies ():
475+ def set_frequencies (power_supply ):
476476 """
477477 Sets frequencies:
478478 - if option is used in auto-cpufreq.conf: use configured value
479479 - if option is disabled/no conf file used: set default frequencies
480- Frequency setting is performed only once on power supply change
480+ Frequency setting is validated on each run and only applied when needed
481+ Caller passes the active profile ("battery" or "charger").
481482 """
482- power_supply = "charger" if charging () else "battery"
483-
484- # don't do anything if the power supply hasn't changed
485- if (
486- hasattr (set_frequencies , "prev_power_supply" )
487- and power_supply == set_frequencies .prev_power_supply
488- ): return
489- else : set_frequencies .prev_power_supply = power_supply
490-
491483 frequency = {
492484 "scaling_max_freq" : {
493485 "cmdargs" : "--frequency-max" ,
@@ -498,28 +490,27 @@ def set_frequencies():
498490 "minmax" : "minimum" ,
499491 },
500492 }
501- if not hasattr (set_frequencies , "max_limit" ):
502- set_frequencies .max_limit = int (getoutput (f"cpufreqctl.auto-cpufreq --frequency-max-limit" ))
503- if not hasattr (set_frequencies , "min_limit" ):
504- set_frequencies .min_limit = int (getoutput (f"cpufreqctl.auto-cpufreq --frequency-min-limit" ))
493+ set_frequencies .max_limit = int (getoutput (f"cpufreqctl.auto-cpufreq --frequency-max-limit" ))
494+ set_frequencies .min_limit = int (getoutput (f"cpufreqctl.auto-cpufreq --frequency-min-limit" ))
505495
506496 conf = config .get_config ()
507497
508498 for freq_type in frequency .keys ():
509- value = None
510- if not conf .has_option (power_supply , freq_type ):
511- # fetch and use default frequencies
512- if freq_type == "scaling_max_freq" :
513- curr_freq = int (getoutput (f"cpufreqctl.auto-cpufreq --frequency-max" ))
514- value = set_frequencies .max_limit
515- else :
516- curr_freq = int (getoutput (f"cpufreqctl.auto-cpufreq --frequency-min" ))
517- value = set_frequencies .min_limit
518- if curr_freq == value : continue
499+ if freq_type == "scaling_max_freq" :
500+ curr_freq = int (getoutput (f"cpufreqctl.auto-cpufreq --frequency-max" ))
501+ value = set_frequencies .max_limit
502+ else :
503+ curr_freq = int (getoutput (f"cpufreqctl.auto-cpufreq --frequency-min" ))
504+ value = set_frequencies .min_limit
519505
520- try : frequency [freq_type ]["value" ] = value if value else int (conf [power_supply ][freq_type ].strip ())
506+ try :
507+ if conf .has_option (power_supply , freq_type ):
508+ raw_value = conf [power_supply ][freq_type ].strip ()
509+ frequency [freq_type ]["value" ] = int (raw_value )
510+ else :
511+ frequency [freq_type ]["value" ] = value
521512 except ValueError :
522- print (f"Invalid value for '{ freq_type } ': { frequency [ freq_type ][ 'value' ] } " )
513+ print (f"Invalid value for '{ freq_type } ': { raw_value } " )
523514 exit (1 )
524515
525516 if not set_frequencies .min_limit <= frequency [freq_type ]["value" ] <= set_frequencies .max_limit :
@@ -528,6 +519,8 @@ def set_frequencies():
528519 )
529520 exit (1 )
530521
522+ if curr_freq == frequency [freq_type ]["value" ]: continue
523+
531524 print (f'Setting { frequency [freq_type ]["minmax" ]} CPU frequency to { round (frequency [freq_type ]["value" ]/ 1000 )} Mhz' )
532525 # set the frequency
533526 run (f"cpufreqctl.auto-cpufreq { frequency [freq_type ]['cmdargs' ]} --set={ frequency [freq_type ]['value' ]} " , shell = True )
@@ -582,7 +575,6 @@ def set_powersave():
582575
583576 set_energy_perf_bias (conf , "battery" )
584577 set_platform_profile (conf , "battery" )
585- set_frequencies ()
586578
587579 cpuload , load1m = get_load ()
588580
@@ -610,6 +602,7 @@ def set_powersave():
610602 print (f"Optimal total CPU usage: { cpuload } %, high average core temp: { SystemInfo .avg_temp ()} °C" )
611603 set_turbo (False )
612604
605+ set_frequencies ("battery" )
613606 footer ()
614607
615608def mon_powersave ():
@@ -695,7 +688,6 @@ def set_performance():
695688
696689 set_energy_perf_bias (conf , "charger" )
697690 set_platform_profile (conf , "charger" )
698- set_frequencies ()
699691
700692 cpuload , load1m = get_load ()
701693 auto = conf ["charger" ]["turbo" ] if conf .has_option ("charger" , "turbo" ) else "auto"
@@ -735,6 +727,7 @@ def set_performance():
735727 else : # set turbo state based on average of all core temperatures
736728 print (f"Optimal total CPU usage: { cpuload } %, high average core temp: { SystemInfo .avg_temp ()} °C" )
737729 set_turbo (False )
730+ set_frequencies ("charger" )
738731 footer ()
739732
740733def mon_performance ():
0 commit comments