diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/main.c | 11 | ||||
-rw-r--r-- | apps/screens.c | 16 |
2 files changed, 23 insertions, 4 deletions
diff --git a/apps/main.c b/apps/main.c index 5715057ee2..9846f116be 100644 --- a/apps/main.c +++ b/apps/main.c | |||
@@ -506,7 +506,12 @@ static void init(void) | |||
506 | 506 | ||
507 | button_init(); | 507 | button_init(); |
508 | 508 | ||
509 | /* Don't initialize power management here if it could incorrectly | ||
510 | * measure battery voltage, and it's not needed for charging. */ | ||
511 | #if !defined(NEED_ATA_POWER_BATT_MEASURE) || \ | ||
512 | (CONFIG_CHARGING > CHARGING_MONITOR) | ||
509 | powermgmt_init(); | 513 | powermgmt_init(); |
514 | #endif | ||
510 | 515 | ||
511 | #if CONFIG_TUNER | 516 | #if CONFIG_TUNER |
512 | radio_init(); | 517 | radio_init(); |
@@ -567,6 +572,12 @@ static void init(void) | |||
567 | panicf("ata: %d", rc); | 572 | panicf("ata: %d", rc); |
568 | } | 573 | } |
569 | 574 | ||
575 | #if defined(NEED_ATA_POWER_BATT_MEASURE) && \ | ||
576 | (CONFIG_CHARGING <= CHARGING_MONITOR) | ||
577 | /* After storage_init(), ATA power must be on, so battery voltage | ||
578 | * can be measured. Initialize power management if it was delayed. */ | ||
579 | powermgmt_init(); | ||
580 | #endif | ||
570 | #ifdef HAVE_EEPROM_SETTINGS | 581 | #ifdef HAVE_EEPROM_SETTINGS |
571 | CHART(">eeprom_settings_init"); | 582 | CHART(">eeprom_settings_init"); |
572 | eeprom_settings_init(); | 583 | eeprom_settings_init(); |
diff --git a/apps/screens.c b/apps/screens.c index b261a2d3dc..8d4585f7b3 100644 --- a/apps/screens.c +++ b/apps/screens.c | |||
@@ -59,6 +59,10 @@ | |||
59 | #include "dsp.h" | 59 | #include "dsp.h" |
60 | #endif | 60 | #endif |
61 | 61 | ||
62 | #if defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) | ||
63 | #include "adc.h" | ||
64 | #endif | ||
65 | |||
62 | #if (CONFIG_STORAGE & STORAGE_MMC) && (defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM)) | 66 | #if (CONFIG_STORAGE & STORAGE_MMC) && (defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM)) |
63 | int mmc_remove_request(void) | 67 | int mmc_remove_request(void) |
64 | { | 68 | { |
@@ -94,14 +98,17 @@ static void charging_display_info(bool animate) | |||
94 | static unsigned phase = 3; | 98 | static unsigned phase = 3; |
95 | unsigned i; | 99 | unsigned i; |
96 | 100 | ||
97 | #ifdef NEED_ATA_POWER_BATT_MEASURE | 101 | #if !defined(NEED_ATA_POWER_BATT_MEASURE) |
98 | if (ide_powered()) /* FM and V2 can only measure when ATA power is on */ | ||
99 | #endif | ||
100 | { | 102 | { |
101 | int battv = battery_voltage(); | 103 | int battv = battery_voltage(); |
102 | lcd_putsf(0, 7, " Batt: %d.%02dV %d%% ", battv / 1000, | 104 | lcd_putsf(0, 7, " Batt: %d.%02dV %d%% ", battv / 1000, |
103 | (battv % 1000) / 10, battery_level()); | 105 | (battv % 1000) / 10, battery_level()); |
104 | } | 106 | } |
107 | #elif defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2) | ||
108 | /* IDE power is normally off here, so display input current instead */ | ||
109 | lcd_putsf(7, 7, "%dmA ", | ||
110 | (adc_read(ADC_EXT_POWER) * EXT_SCALE_FACTOR) / 10000); | ||
111 | #endif | ||
105 | 112 | ||
106 | #ifdef ARCHOS_RECORDER | 113 | #ifdef ARCHOS_RECORDER |
107 | lcd_puts(0, 2, "Charge mode:"); | 114 | lcd_puts(0, 2, "Charge mode:"); |
@@ -263,7 +270,8 @@ int charging_screen(void) | |||
263 | rc = 2; | 270 | rc = 2; |
264 | else if (usb_detect() == USB_INSERTED) | 271 | else if (usb_detect() == USB_INSERTED) |
265 | rc = 3; | 272 | rc = 3; |
266 | else if (!charger_inserted()) | 273 | /* do not depend on power management thread here */ |
274 | else if (!(power_input_status() & POWER_INPUT_MAIN_CHARGER)) | ||
267 | rc = 1; | 275 | rc = 1; |
268 | } while (!rc); | 276 | } while (!rc); |
269 | 277 | ||