]> rtime.felk.cvut.cz Git - frescor/frsh.git/blobdiff - frsh_api/frsh_power.c
Merge branch 'master' of git://rtime.felk.cvut.cz/frescor/frsh_forb
[frescor/frsh.git] / frsh_api / frsh_power.c
index d704f36fcee9884e3af2c653cb0727d03567d010..bd81878f0728c0b1ded1711f0b8b830d75e3b196 100644 (file)
@@ -239,6 +239,7 @@ int frsh_resource_set_power_level
                case FRSH_RT_PROCESSOR:
                {
                        int ret;
+
                        ret = fra_CPU_power_init(resource_id);
                        if (ret) return FRSH_ERR_INTERNAL_ERROR;
                        ret = fra_CPU_set_power(resource_id, power_level);
@@ -256,6 +257,7 @@ int frsh_resource_set_power_level
                case FRSH_RT_LCD:
                {
                        int ret;
+
                        ret = fra_LCD_power_init(resource_id);
                        if (ret) return FRSH_ERR_INTERNAL_ERROR;
                        ret = fra_LCD_set_power(resource_id, power_level);
@@ -281,6 +283,9 @@ int frsh_resource_get_power_level
                case FRSH_RT_PROCESSOR:
                {
                        int ret;
+
+                       ret = fra_CPU_power_init(resource_id);
+                       if (ret) return FRSH_ERR_INTERNAL_ERROR;
                        ret = fra_CPU_get_power(resource_id,
                                                (int*) power_level);
                        if (ret) return FRSH_ERR_INTERNAL_ERROR;
@@ -292,6 +297,9 @@ int frsh_resource_get_power_level
                case FRSH_RT_LCD:
                {
                        int ret;
+
+                       ret = fra_LCD_power_init(resource_id);
+                       if (ret) return FRSH_ERR_INTERNAL_ERROR;
                        ret = fra_LCD_get_power(resource_id,
                                                (int*) power_level);
                        if (ret) return FRSH_ERR_INTERNAL_ERROR;
@@ -306,6 +314,51 @@ int frsh_resource_get_power_level
        return FRSH_NO_ERROR;
 }
 
+int frsh_resource_get_speed
+  (frsh_resource_type_t resource_type,
+   frsh_resource_id_t resource_id,
+   frsh_power_level_t power_level,
+   double *speed_ratio)
+{
+       switch(resource_type)
+       {
+#ifdef CONFIG_ACPI_CPU
+               case FRSH_RT_PROCESSOR:
+               {
+                       int ret;
+
+                       ret = fra_CPU_power_init(resource_id);
+                       if (ret) return FRSH_ERR_INTERNAL_ERROR;
+                       ret = fra_CPU_get_speed(resource_id,
+                                               (int) power_level,
+                                               speed_ratio);
+                       if (ret) return FRSH_ERR_INTERNAL_ERROR;
+
+                       break;
+               }
+#endif
+#ifdef CONFIG_ACPI_LCD
+               case FRSH_RT_LCD:
+               {
+                       int ret;
+
+                       ret = fra_LCD_power_init(resource_id);
+                       if (ret) return FRSH_ERR_INTERNAL_ERROR;
+                       ret = fra_LCD_get_speed(resource_id,
+                                               (int) power_level,
+                                               speed_ratio);
+                       if (ret) return FRSH_ERR_INTERNAL_ERROR;
+
+                       break;
+               }
+#endif
+               default:
+                       return FRSH_ERR_NOT_IMPLEMENTED;
+       }
+
+       return FRSH_NO_ERROR;
+}
+
 int frsh_resource_get_num_power_levels
   (frsh_resource_type_t resource_type,
    frsh_resource_id_t resource_id,
@@ -317,14 +370,14 @@ int frsh_resource_get_num_power_levels
 
        switch(resource_type)
        {
+#ifdef CONFIG_ACPI_CPU
                case FRSH_RT_PROCESSOR:
                {
-#ifdef CONFIG_ACPI_CPU
                        ret = fra_CPU_power_init(resource_id);
                        if (ret) goto out;
-#endif
                        break;
                }
+#endif
 #ifdef CONFIG_ACPI_LCD
                case FRSH_RT_LCD:
                {
@@ -359,17 +412,12 @@ int frsh_battery_get_expiration(frsh_abs_time_t *expiration)
        if (ret) return FRSH_ERR_INTERNAL_ERROR;
 
        ret = fra_battery_expiration(&interval);
-       if (ret == EAGAIN) {
-               *expiration = fosa_msec_to_abs_time(0);
-               goto out;
-       }
-       if (ret)
-               return FRSH_ERR_INTERNAL_ERROR;
+       if (ret == EAGAIN) return ret;
+       if (ret) return FRSH_ERR_INTERNAL_ERROR;
 
        fosa_clock_get_time(FOSA_CLOCK_REALTIME, expiration);
        *expiration = fosa_abs_time_incr(*expiration, interval);
 
-out:
        return FRSH_NO_ERROR;
 #else
        return FRSH_ERR_NOT_IMPLEMENTED;