raster pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=6601c09f82e2496754a9e54ad6867cb77e38bf01
commit 6601c09f82e2496754a9e54ad6867cb77e38bf01 Author: Takeshi Banse <[email protected]> Date: Sat Nov 29 16:39:41 2014 +0900 cpufreq: teach cpuinfo_{min,max}_freq as available frequencies Summary: The intel_pstate scaling driver exposes the `scaling_cur_freq` since kernel 3.17 [*], it would be fine that the min and max frequencies are known even without the `scaling_available_frequencie`. This commit teaches to use the cpuinfo_{min,max}_freq as fallback in case the `scaling_available_frequencies` is not available within intel pstate. [*] https://lkml.org/lkml/2014/11/11/1060 Signed-off-by: Takeshi Banse <[email protected]> Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D1686 --- src/modules/cpufreq/e_mod_main.c | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/src/modules/cpufreq/e_mod_main.c b/src/modules/cpufreq/e_mod_main.c index 7ffdcbe..ea09eea 100644 --- a/src/modules/cpufreq/e_mod_main.c +++ b/src/modules/cpufreq/e_mod_main.c @@ -301,7 +301,8 @@ _button_cb_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED_ } if ((cpufreq_config->status->frequencies) && - (cpufreq_config->status->can_set_frequency)) + (cpufreq_config->status->can_set_frequency) && + (!cpufreq_config->status->pstate)) { mo = e_menu_new(); cpufreq_config->menu_frequency = mo; @@ -766,6 +767,42 @@ _cpufreq_status_check_available(Cpu_Status *s) eina_list_count(s->frequencies), _cpufreq_cb_sort); } + else + do + { +#define CPUFREQ_SYSFSDIR "/sys/devices/system/cpu/cpu0/cpufreq" + f = fopen(CPUFREQ_SYSFSDIR "/scaling_cur_freq", "r"); + if (!f) break; + fclose(f); + + f = fopen(CPUFREQ_SYSFSDIR "/scaling_driver", "r"); + if (!f) break; + if (fgets(buf, sizeof(buf), f) == NULL) + { + fclose(f); + break; + } + fclose(f); + if (strcmp(buf, "intel_pstate\n")) break; + + if (s->frequencies) + { + eina_list_free(s->frequencies); + s->frequencies = NULL; + } +#define CPUFREQ_ADDF(filename) \ + f = fopen(CPUFREQ_SYSFSDIR filename, "r"); \ + if (f) \ + { \ + if (fgets(buf, sizeof(buf), f) != NULL) \ + s->frequencies = eina_list_append(s->frequencies, \ + (void *)(long)(atoi(buf))); \ + fclose(f); \ + } + CPUFREQ_ADDF("/cpuinfo_min_freq"); + CPUFREQ_ADDF("/cpuinfo_max_freq"); + } + while (0); f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors", "r"); if (f) --
