diff options
author | Udo Schläpfer <rockbox-2014.10@desktopwarrior.net> | 2015-01-30 22:47:30 +0100 |
---|---|---|
committer | Udo Schläpfer <rockbox-2014.10@desktopwarrior.net> | 2015-02-02 21:58:25 +0100 |
commit | 040306a71663d98f1ca568b61010ee125d1e6501 (patch) | |
tree | 369840173d587df590ce9674cfd0f62163034105 | |
parent | dbabd0d9c34a33bc0c51243ec37f230d117db955 (diff) | |
download | rockbox-040306a71663d98f1ca568b61010ee125d1e6501.tar.gz rockbox-040306a71663d98f1ca568b61010ee125d1e6501.zip |
iBasso DX50/DX90: User selectable freq scaling governor.
Depends on http://gerrit.rockbox.org/r/#/c/1043/.
This patch adds a new setting in Settings -> General
-> System: Freq Scaling Governor
Usable in Quickscreen and Shortcuts.
Possible settings are:
- Conservative: Slow frequency switching.
- Ondemand or Interactive: Fast frequency switching.
- Powersave: Allways lowest frequency.
- Performance: Allways highest frequency.
German translation provided.
This may be genric for Android kernel based devices but is only enabled
for iBasso Devices. Other maintainers may choose do adopt this.
Change-Id: I10296f5be9586ad3a409105db0cd03682a30e9c1
-rw-r--r-- | apps/lang/deutsch.lang | 21 | ||||
-rw-r--r-- | apps/lang/english.lang | 20 | ||||
-rw-r--r-- | apps/menus/settings_menu.c | 12 | ||||
-rw-r--r-- | apps/settings.c | 9 | ||||
-rw-r--r-- | apps/settings.h | 4 | ||||
-rw-r--r-- | apps/settings_list.c | 20 | ||||
-rw-r--r-- | firmware/SOURCES | 1 | ||||
-rw-r--r-- | firmware/target/hosted/ibasso/governor-ibasso.c | 90 | ||||
-rw-r--r-- | firmware/target/hosted/ibasso/governor-ibasso.h | 54 | ||||
-rw-r--r-- | firmware/target/hosted/ibasso/system-ibasso.c | 4 |
10 files changed, 232 insertions, 3 deletions
diff --git a/apps/lang/deutsch.lang b/apps/lang/deutsch.lang index 55377c2ca1..6d9c025bd2 100644 --- a/apps/lang/deutsch.lang +++ b/apps/lang/deutsch.lang | |||
@@ -33,6 +33,7 @@ | |||
33 | # - Kaspar Rothenfußer | 33 | # - Kaspar Rothenfußer |
34 | # - Johannes Linke | 34 | # - Johannes Linke |
35 | # - Kai Posadowsky | 35 | # - Kai Posadowsky |
36 | # - Udo Schläpfer | ||
36 | <phrase> | 37 | <phrase> |
37 | id: LANG_SET_BOOL_YES | 38 | id: LANG_SET_BOOL_YES |
38 | desc: bool true representation | 39 | desc: bool true representation |
@@ -13054,3 +13055,23 @@ | |||
13054 | *: "Beschränke automatischen Verzeichniswechsel" | 13055 | *: "Beschränke automatischen Verzeichniswechsel" |
13055 | </voice> | 13056 | </voice> |
13056 | </phrase> | 13057 | </phrase> |
13058 | <phrase> | ||
13059 | id: LANG_IBASSO_FREQ_SCALING_GOVERNOR | ||
13060 | desc: in Settings -> General -> System -> Freq Scaling Governor | ||
13061 | user: core | ||
13062 | <source> | ||
13063 | *: none | ||
13064 | ibassodx50: "Freq Scaling Governor" | ||
13065 | ibassodx90: "Freq Scaling Governor" | ||
13066 | </source> | ||
13067 | <dest> | ||
13068 | *: none | ||
13069 | ibassodx50: "Freq Scaling Governor" | ||
13070 | ibassodx90: "Freq Scaling Governor" | ||
13071 | </dest> | ||
13072 | <voice> | ||
13073 | *: none | ||
13074 | ibassodx50: "Freq Scaling Governor" | ||
13075 | ibassodx90: "Freq Scaling Governor" | ||
13076 | </voice> | ||
13077 | </phrase> | ||
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index ca5e687ea8..081e33d32c 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang | |||
@@ -13373,3 +13373,23 @@ | |||
13373 | swcodec: "Dry / Wet Mix" | 13373 | swcodec: "Dry / Wet Mix" |
13374 | </voice> | 13374 | </voice> |
13375 | </phrase> | 13375 | </phrase> |
13376 | <phrase> | ||
13377 | id: LANG_IBASSO_FREQ_SCALING_GOVERNOR | ||
13378 | desc: in Settings -> General -> System -> Freq Scaling Governor | ||
13379 | user: core | ||
13380 | <source> | ||
13381 | *: none | ||
13382 | ibassodx50: "Freq Scaling Governor" | ||
13383 | ibassodx90: "Freq Scaling Governor" | ||
13384 | </source> | ||
13385 | <dest> | ||
13386 | *: none | ||
13387 | ibassodx50: "Freq Scaling Governor" | ||
13388 | ibassodx90: "Freq Scaling Governor" | ||
13389 | </dest> | ||
13390 | <voice> | ||
13391 | *: none | ||
13392 | ibassodx50: "Freq Scaling Governor" | ||
13393 | ibassodx90: "Freq Scaling Governor" | ||
13394 | </voice> | ||
13395 | </phrase> | ||
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c index 130f5be1a2..6fcc3e91a9 100644 --- a/apps/menus/settings_menu.c +++ b/apps/menus/settings_menu.c | |||
@@ -50,6 +50,10 @@ | |||
50 | #endif | 50 | #endif |
51 | #include "folder_select.h" | 51 | #include "folder_select.h" |
52 | 52 | ||
53 | #if defined(DX50) || defined(DX90) | ||
54 | #include "governor-ibasso.h" | ||
55 | #endif | ||
56 | |||
53 | /***********************************/ | 57 | /***********************************/ |
54 | /* TAGCACHE MENU */ | 58 | /* TAGCACHE MENU */ |
55 | #ifdef HAVE_TAGCACHE | 59 | #ifdef HAVE_TAGCACHE |
@@ -325,6 +329,10 @@ MENUITEM_SETTING(touchpad_deadzone, &global_settings.touchpad_deadzone, NULL); | |||
325 | MENUITEM_SETTING(shortcuts_replaces_quickscreen, &global_settings.shortcuts_replaces_qs, NULL); | 329 | MENUITEM_SETTING(shortcuts_replaces_quickscreen, &global_settings.shortcuts_replaces_qs, NULL); |
326 | #endif | 330 | #endif |
327 | 331 | ||
332 | #if defined(DX50) || defined(DX90) | ||
333 | MENUITEM_SETTING(governor, &global_settings.governor, NULL); | ||
334 | #endif | ||
335 | |||
328 | MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), | 336 | MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), |
329 | 0, Icon_System_menu, | 337 | 0, Icon_System_menu, |
330 | #if (BATTERY_CAPACITY_INC > 0) || (BATTERY_TYPES_COUNT > 1) | 338 | #if (BATTERY_CAPACITY_INC > 0) || (BATTERY_TYPES_COUNT > 1) |
@@ -377,6 +385,10 @@ MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), | |||
377 | #if defined(USB_ENABLE_STORAGE) && defined(HAVE_MULTIDRIVE) | 385 | #if defined(USB_ENABLE_STORAGE) && defined(HAVE_MULTIDRIVE) |
378 | &usb_skip_first_drive, | 386 | &usb_skip_first_drive, |
379 | #endif | 387 | #endif |
388 | |||
389 | #if defined(DX50) || defined(DX90) | ||
390 | &governor, | ||
391 | #endif | ||
380 | ); | 392 | ); |
381 | 393 | ||
382 | /* SYSTEM MENU */ | 394 | /* SYSTEM MENU */ |
diff --git a/apps/settings.c b/apps/settings.c index f144a4af03..be7b7c30e6 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -105,6 +105,11 @@ struct system_status global_status; | |||
105 | #include "lcd-remote.h" | 105 | #include "lcd-remote.h" |
106 | #endif | 106 | #endif |
107 | 107 | ||
108 | #if defined(DX50) || defined(DX90) | ||
109 | #include "governor-ibasso.h" | ||
110 | #endif | ||
111 | |||
112 | |||
108 | long lasttime = 0; | 113 | long lasttime = 0; |
109 | 114 | ||
110 | /** NVRAM stuff, if the target doesnt have NVRAM it is saved in ROCKBOX_DIR /nvram.bin **/ | 115 | /** NVRAM stuff, if the target doesnt have NVRAM it is saved in ROCKBOX_DIR /nvram.bin **/ |
@@ -1081,6 +1086,10 @@ void settings_apply(bool read_disk) | |||
1081 | memcpy(&calibration_parameters, &global_settings.ts_calibration_data, sizeof(struct touchscreen_parameter)); | 1086 | memcpy(&calibration_parameters, &global_settings.ts_calibration_data, sizeof(struct touchscreen_parameter)); |
1082 | #endif | 1087 | #endif |
1083 | 1088 | ||
1089 | #if defined(DX50) || defined(DX90) | ||
1090 | ibasso_set_governor(global_settings.governor); | ||
1091 | #endif | ||
1092 | |||
1084 | /* This should stay last */ | 1093 | /* This should stay last */ |
1085 | #if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC | 1094 | #if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC |
1086 | enc_global_settings_apply(); | 1095 | enc_global_settings_apply(); |
diff --git a/apps/settings.h b/apps/settings.h index 4ea56d273e..5d25dc7ab0 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -850,6 +850,10 @@ struct user_settings | |||
850 | int pbe_precut; | 850 | int pbe_precut; |
851 | 851 | ||
852 | int afr_enabled; | 852 | int afr_enabled; |
853 | |||
854 | #if defined(DX50) || defined(DX90) | ||
855 | int governor; | ||
856 | #endif | ||
853 | }; | 857 | }; |
854 | 858 | ||
855 | /** global variables **/ | 859 | /** global variables **/ |
diff --git a/apps/settings_list.c b/apps/settings_list.c index abdb512a42..2c3f360cea 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c | |||
@@ -62,6 +62,10 @@ | |||
62 | #include "onplay.h" | 62 | #include "onplay.h" |
63 | #endif | 63 | #endif |
64 | 64 | ||
65 | #if defined(DX50) || defined(DX90) | ||
66 | #include "governor-ibasso.h" | ||
67 | #endif | ||
68 | |||
65 | #define NVRAM(bytes) (bytes<<F_NVRAM_MASK_SHIFT) | 69 | #define NVRAM(bytes) (bytes<<F_NVRAM_MASK_SHIFT) |
66 | /** NOTE: NVRAM_CONFIG_VERSION is in settings_list.h | 70 | /** NOTE: NVRAM_CONFIG_VERSION is in settings_list.h |
67 | and you may need to update it if you edit this file */ | 71 | and you may need to update it if you edit this file */ |
@@ -2193,6 +2197,22 @@ const struct settings_list settings[] = { | |||
2193 | NULL, "root menu order", | 2197 | NULL, "root menu order", |
2194 | root_menu_load_from_cfg, root_menu_write_to_cfg, | 2198 | root_menu_load_from_cfg, root_menu_write_to_cfg, |
2195 | root_menu_is_changed, root_menu_set_default), | 2199 | root_menu_is_changed, root_menu_set_default), |
2200 | |||
2201 | #if defined(DX50) || defined(DX90) | ||
2202 | CHOICE_SETTING(0, | ||
2203 | governor, | ||
2204 | LANG_IBASSO_FREQ_SCALING_GOVERNOR, | ||
2205 | GOVERNOR_POWERSAVE, | ||
2206 | "freq scaling governor", | ||
2207 | "conservative,ondemand,interactive,powersave,performance", | ||
2208 | ibasso_set_governor, | ||
2209 | 5, | ||
2210 | "Conservative", | ||
2211 | "Ondemand", | ||
2212 | "Interactive", | ||
2213 | "Powersave", | ||
2214 | "Performance"), | ||
2215 | #endif | ||
2196 | }; | 2216 | }; |
2197 | 2217 | ||
2198 | const int nb_settings = sizeof(settings)/sizeof(*settings); | 2218 | const int nb_settings = sizeof(settings)/sizeof(*settings); |
diff --git a/firmware/SOURCES b/firmware/SOURCES index a67f866dcc..1bb8563f24 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES | |||
@@ -1841,6 +1841,7 @@ target/hosted/ibasso/button-ibasso.c | |||
1841 | #ifdef DEBUG | 1841 | #ifdef DEBUG |
1842 | target/hosted/ibasso/debug-ibasso.c | 1842 | target/hosted/ibasso/debug-ibasso.c |
1843 | #endif | 1843 | #endif |
1844 | target/hosted/ibasso/governor-ibasso.c | ||
1844 | target/hosted/ibasso/hostfs-ibasso.c | 1845 | target/hosted/ibasso/hostfs-ibasso.c |
1845 | target/hosted/ibasso/lcd-ibasso.c | 1846 | target/hosted/ibasso/lcd-ibasso.c |
1846 | target/hosted/ibasso/pcm-ibasso.c | 1847 | target/hosted/ibasso/pcm-ibasso.c |
diff --git a/firmware/target/hosted/ibasso/governor-ibasso.c b/firmware/target/hosted/ibasso/governor-ibasso.c new file mode 100644 index 0000000000..b2d3cdf336 --- /dev/null +++ b/firmware/target/hosted/ibasso/governor-ibasso.c | |||
@@ -0,0 +1,90 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___ | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2014 by Ilia Sergachev: Initial Rockbox port to iBasso DX50 | ||
10 | * Copyright (C) 2014 by Mario Basister: iBasso DX90 port | ||
11 | * Copyright (C) 2014 by Simon Rothen: Initial Rockbox repository submission, additional features | ||
12 | * Copyright (C) 2014 by Udo Schläpfer: Code clean up, additional features | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or | ||
15 | * modify it under the terms of the GNU General Public License | ||
16 | * as published by the Free Software Foundation; either version 2 | ||
17 | * of the License, or (at your option) any later version. | ||
18 | * | ||
19 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
20 | * KIND, either express or implied. | ||
21 | * | ||
22 | ****************************************************************************/ | ||
23 | |||
24 | |||
25 | #include <stdio.h> | ||
26 | |||
27 | #include "config.h" | ||
28 | #include "cpufreq-linux.h" | ||
29 | #include "debug.h" | ||
30 | |||
31 | #include "debug-ibasso.h" | ||
32 | #include "governor-ibasso.h" | ||
33 | #include "sysfs-ibasso.h" | ||
34 | |||
35 | |||
36 | /* Default governor at boot. */ | ||
37 | static int _last_governor = GOVERNOR_INTERACTIVE; | ||
38 | |||
39 | |||
40 | void ibasso_set_governor(int governor) | ||
41 | { | ||
42 | DEBUGF("DEBUG %s: _last_governor: %d, governor: %d.", __func__, _last_governor, governor); | ||
43 | |||
44 | if(_last_governor != governor) | ||
45 | { | ||
46 | switch(governor) | ||
47 | { | ||
48 | case GOVERNOR_CONSERVATIVE: | ||
49 | { | ||
50 | _last_governor = governor; | ||
51 | cpufreq_set_governor("conservative", CPUFREQ_ALL_CPUS); | ||
52 | break; | ||
53 | } | ||
54 | |||
55 | case GOVERNOR_ONDEMAND: | ||
56 | { | ||
57 | _last_governor = governor; | ||
58 | cpufreq_set_governor("ondemand", CPUFREQ_ALL_CPUS); | ||
59 | break; | ||
60 | } | ||
61 | |||
62 | case GOVERNOR_POWERSAVE: | ||
63 | { | ||
64 | _last_governor = governor; | ||
65 | cpufreq_set_governor("powersave", CPUFREQ_ALL_CPUS); | ||
66 | break; | ||
67 | } | ||
68 | |||
69 | case GOVERNOR_INTERACTIVE: | ||
70 | { | ||
71 | _last_governor = governor; | ||
72 | cpufreq_set_governor("interactive", CPUFREQ_ALL_CPUS); | ||
73 | break; | ||
74 | } | ||
75 | |||
76 | case GOVERNOR_PERFORMANCE: | ||
77 | { | ||
78 | _last_governor = governor; | ||
79 | cpufreq_set_governor("performance", CPUFREQ_ALL_CPUS); | ||
80 | break; | ||
81 | } | ||
82 | |||
83 | default: | ||
84 | { | ||
85 | DEBUGF("ERROR %s: Unknown governor: %d.", __func__, governor); | ||
86 | break; | ||
87 | } | ||
88 | } | ||
89 | } | ||
90 | } | ||
diff --git a/firmware/target/hosted/ibasso/governor-ibasso.h b/firmware/target/hosted/ibasso/governor-ibasso.h new file mode 100644 index 0000000000..34781fde0b --- /dev/null +++ b/firmware/target/hosted/ibasso/governor-ibasso.h | |||
@@ -0,0 +1,54 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___ | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * | ||
9 | * Copyright (C) 2014 by Ilia Sergachev: Initial Rockbox port to iBasso DX50 | ||
10 | * Copyright (C) 2014 by Mario Basister: iBasso DX90 port | ||
11 | * Copyright (C) 2014 by Simon Rothen: Initial Rockbox repository submission, additional features | ||
12 | * Copyright (C) 2014 by Udo Schläpfer: Code clean up, additional features | ||
13 | * | ||
14 | * This program is free software; you can redistribute it and/or | ||
15 | * modify it under the terms of the GNU General Public License | ||
16 | * as published by the Free Software Foundation; either version 2 | ||
17 | * of the License, or (at your option) any later version. | ||
18 | * | ||
19 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
20 | * KIND, either express or implied. | ||
21 | * | ||
22 | ****************************************************************************/ | ||
23 | |||
24 | |||
25 | #ifndef _GOVERNOR_IBASSO_H_ | ||
26 | #define _GOVERNOR_IBASSO_H_ | ||
27 | |||
28 | |||
29 | /* Supported freq scaling governors. */ | ||
30 | enum ibasso_governors | ||
31 | { | ||
32 | /* Slow frequency switching. */ | ||
33 | GOVERNOR_CONSERVATIVE = 0, | ||
34 | |||
35 | /* Fast frequency switching. */ | ||
36 | GOVERNOR_ONDEMAND, | ||
37 | GOVERNOR_INTERACTIVE, | ||
38 | |||
39 | /* Allways lowest frequency. */ | ||
40 | GOVERNOR_POWERSAVE, | ||
41 | |||
42 | /* Allways highest frequency. */ | ||
43 | GOVERNOR_PERFORMANCE | ||
44 | }; | ||
45 | |||
46 | |||
47 | /* | ||
48 | Set the active freq scaling governor. | ||
49 | governor: ibasso_governors | ||
50 | */ | ||
51 | void ibasso_set_governor(int governor); | ||
52 | |||
53 | |||
54 | #endif | ||
diff --git a/firmware/target/hosted/ibasso/system-ibasso.c b/firmware/target/hosted/ibasso/system-ibasso.c index 00f8669ae0..a107af7a7f 100644 --- a/firmware/target/hosted/ibasso/system-ibasso.c +++ b/firmware/target/hosted/ibasso/system-ibasso.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <sys/reboot.h> | 27 | #include <sys/reboot.h> |
28 | 28 | ||
29 | #include "config.h" | 29 | #include "config.h" |
30 | #include "cpufreq-linux.h" | ||
31 | #include "debug.h" | 30 | #include "debug.h" |
32 | 31 | ||
33 | #include "button-ibasso.h" | 32 | #include "button-ibasso.h" |
@@ -50,8 +49,7 @@ void system_init(void) | |||
50 | volatile uintptr_t stack = 0; | 49 | volatile uintptr_t stack = 0; |
51 | stackbegin = stackend = (uintptr_t*) &stack; | 50 | stackbegin = stackend = (uintptr_t*) &stack; |
52 | 51 | ||
53 | cpufreq_set_governor("powersave", CPUFREQ_ALL_CPUS); | 52 | vold_monitor_start(); |
54 | vold_monitor_start(); | ||
55 | ibasso_set_usb_mode(USB_MODE_MASS_STORAGE); | 53 | ibasso_set_usb_mode(USB_MODE_MASS_STORAGE); |
56 | 54 | ||
57 | /* | 55 | /* |