cpufreq - fix powersave cpufreq restore to normal governor

@fix
This commit is contained in:
Carsten Haitzler 2021-04-17 12:30:59 +01:00
parent 00b2f0f5f7
commit c92f75b52d
1 changed files with 31 additions and 12 deletions

View File

@ -1181,12 +1181,15 @@ _cpufreq_event_cb_powersave(void *data EINA_UNUSED, int type EINA_UNUSED, void *
Eina_List *l; Eina_List *l;
Eina_Bool has_powersave = EINA_FALSE; Eina_Bool has_powersave = EINA_FALSE;
Eina_Bool has_conservative = EINA_FALSE; Eina_Bool has_conservative = EINA_FALSE;
// don't use these at this point...
// Eina_Bool has_ondemand = EINA_FALSE;
// Eina_Bool has_interactive = EINA_FALSE;
const char *gov;
printf("PWSV: auto=%i\n", cpufreq_config->auto_powersave);
if (!cpufreq_config->auto_powersave) return ECORE_CALLBACK_PASS_ON; if (!cpufreq_config->auto_powersave) return ECORE_CALLBACK_PASS_ON;
ev = event; ev = event;
if (!cpufreq_config->status->orig_governor)
cpufreq_config->status->orig_governor = eina_stringshare_add(cpufreq_config->status->cur_governor);
for (l = cpufreq_config->status->governors; l; l = l->next) for (l = cpufreq_config->status->governors; l; l = l->next)
{ {
@ -1194,34 +1197,50 @@ _cpufreq_event_cb_powersave(void *data EINA_UNUSED, int type EINA_UNUSED, void *
has_conservative = EINA_TRUE; has_conservative = EINA_TRUE;
else if (!strcmp(l->data, "powersave")) else if (!strcmp(l->data, "powersave"))
has_powersave = EINA_TRUE; has_powersave = EINA_TRUE;
else if (!strcmp(l->data, "interactive")) // don't use these at this point...
has_powersave = EINA_TRUE; // else if (!strcmp(l->data, "ondemand"))
// has_ondemand = EINA_TRUE;
// else if (!strcmp(l->data, "interactive"))
// has_interactive = EINA_TRUE;
} }
switch (ev->mode) switch (ev->mode)
{ {
case E_POWERSAVE_MODE_NONE: case E_POWERSAVE_MODE_NONE:
printf("PWSV: none\n");
case E_POWERSAVE_MODE_LOW: case E_POWERSAVE_MODE_LOW:
_cpufreq_set_governor(cpufreq_config->status->orig_governor); printf("PWSV: low - orig=%s\n", cpufreq_config->governor);
eina_stringshare_del(cpufreq_config->status->orig_governor); gov = cpufreq_config->status->orig_governor;
cpufreq_config->status->orig_governor = NULL; if (!gov) gov = cpufreq_config->governor;
eina_stringshare_replace(&(cpufreq_config->status->orig_governor), NULL);
if (gov) _cpufreq_set_governor(gov);
break; break;
case E_POWERSAVE_MODE_MEDIUM: case E_POWERSAVE_MODE_MEDIUM:
printf("PWSV: med\n");
case E_POWERSAVE_MODE_HIGH: case E_POWERSAVE_MODE_HIGH:
if ((cpufreq_config->powersave_governor) || (has_conservative)) printf("PWSV: hi\n");
eina_stringshare_replace(&(cpufreq_config->status->orig_governor),
cpufreq_config->status->cur_governor);
if (cpufreq_config->powersave_governor)
{ {
if (cpufreq_config->powersave_governor) _cpufreq_set_governor(cpufreq_config->powersave_governor);
_cpufreq_set_governor(cpufreq_config->powersave_governor); break;
else }
_cpufreq_set_governor("conservative"); else if (has_conservative)
{
_cpufreq_set_governor("conservative");
break; break;
} }
EINA_FALLTHROUGH; EINA_FALLTHROUGH;
/* no break */ /* no break */
case E_POWERSAVE_MODE_EXTREME: case E_POWERSAVE_MODE_EXTREME:
printf("PWSV: extreme\n");
case E_POWERSAVE_MODE_FREEZE: case E_POWERSAVE_MODE_FREEZE:
printf("PWSV: freeze\n");
eina_stringshare_replace(&(cpufreq_config->status->orig_governor),
cpufreq_config->status->cur_governor);
if (has_powersave) if (has_powersave)
_cpufreq_set_governor("powersave"); _cpufreq_set_governor("powersave");
break; break;