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)

-- 


Reply via email to