summaryrefslogtreecommitdiff
path: root/apps/screens.c
diff options
context:
space:
mode:
authorBoris Gjenero <dreamlayers@rockbox.org>2011-12-31 18:31:47 +0000
committerBoris Gjenero <dreamlayers@rockbox.org>2011-12-31 18:31:47 +0000
commit5cd8aec39a05a78c6ae7b9c81d2c0f8acf0aac48 (patch)
tree86f77e720f5ed3d97aec0c8e31e64da0676d1a5c /apps/screens.c
parenta5e44591c24260d0411bfe8e6de9a9c683dd1534 (diff)
downloadrockbox-5cd8aec39a05a78c6ae7b9c81d2c0f8acf0aac48.zip
rockbox-5cd8aec39a05a78c6ae7b9c81d2c0f8acf0aac48.tar.gz
rockbox-5cd8aec39a05a78c6ae7b9c81d2c0f8acf0aac48.tar.bz2
rockbox-5cd8aec39a05a78c6ae7b9c81d2c0f8acf0aac48.tar.xz
Fix FS#7631 : Archos V2 and FM Recorder charging screen problems
ATA power is off in the charging screen to avoid problems when the battery is deeply discharged. Without ATA power, Archos FM and V2 Recorders measure battery voltage as 0V, leading to an unwanted low battery shutdown. This change delays powermgmt_init() on those targets until after ATA power is turned on by storage_init(). The charging screen displays input current, so there is some visible feedback on charging progress. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31484 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/screens.c')
-rw-r--r--apps/screens.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/apps/screens.c b/apps/screens.c
index b261a2d..8d4585f 100644
--- a/apps/screens.c
+++ b/apps/screens.c
@@ -59,6 +59,10 @@
#include "dsp.h"
#endif
+#if defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2)
+#include "adc.h"
+#endif
+
#if (CONFIG_STORAGE & STORAGE_MMC) && (defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM))
int mmc_remove_request(void)
{
@@ -94,14 +98,17 @@ static void charging_display_info(bool animate)
static unsigned phase = 3;
unsigned i;
-#ifdef NEED_ATA_POWER_BATT_MEASURE
- if (ide_powered()) /* FM and V2 can only measure when ATA power is on */
-#endif
+#if !defined(NEED_ATA_POWER_BATT_MEASURE)
{
int battv = battery_voltage();
lcd_putsf(0, 7, " Batt: %d.%02dV %d%% ", battv / 1000,
(battv % 1000) / 10, battery_level());
}
+#elif defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2)
+ /* IDE power is normally off here, so display input current instead */
+ lcd_putsf(7, 7, "%dmA ",
+ (adc_read(ADC_EXT_POWER) * EXT_SCALE_FACTOR) / 10000);
+#endif
#ifdef ARCHOS_RECORDER
lcd_puts(0, 2, "Charge mode:");
@@ -263,7 +270,8 @@ int charging_screen(void)
rc = 2;
else if (usb_detect() == USB_INSERTED)
rc = 3;
- else if (!charger_inserted())
+ /* do not depend on power management thread here */
+ else if (!(power_input_status() & POWER_INPUT_MAIN_CHARGER))
rc = 1;
} while (!rc);