From cb2db20a32b1bdb81803c11c7a3133e94c10a560 Mon Sep 17 00:00:00 2001 From: Rob Purchase Date: Tue, 20 Oct 2009 20:38:35 +0000 Subject: Cleanup and expand D2 charger detection (not yet implemented for D2+). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23297 a1c6a512-1295-4272-9138-f99709370657 --- .../target/arm/tcc780x/cowond2/power-cowond2.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/firmware/target/arm/tcc780x/cowond2/power-cowond2.c b/firmware/target/arm/tcc780x/cowond2/power-cowond2.c index dfd692ecab..7e8f066c58 100644 --- a/firmware/target/arm/tcc780x/cowond2/power-cowond2.c +++ b/firmware/target/arm/tcc780x/cowond2/power-cowond2.c @@ -110,8 +110,26 @@ void EXT3(void) #if CONFIG_CHARGING unsigned int power_input_status(void) { - return ((GPIOC & (1<<26)) == 0) ? - POWER_INPUT_MAIN_CHARGER : POWER_INPUT_NONE; + /* Players with a PCF50606 can use GPIOs to determine whether AC is inserted + and whether charging is taking place. Newer players re-use C26 for the + touchscreen, so we need to monitor PCF50635 USB/adapter IRQs for this. */ + + if (get_pmu_type() == PCF50606) + { + /* Check AC adapter */ + if (GPIOD & (1<<23)) + return POWER_INPUT_MAIN_CHARGER; + + /* C26 indicates charging, without AC connected it implies USB power */ + if ((GPIOC & (1<<26)) == 0) + return POWER_INPUT_USB_CHARGER; + } + else + { + /* TODO: use adapter/usb connection state from PCF50635 driver */ + } + + return POWER_INPUT_NONE; } #endif -- cgit v1.2.3