From 5b4a84a4cec889e31b04157e40d17cebadb04a39 Mon Sep 17 00:00:00 2001 From: Torne Wuff Date: Sun, 2 May 2010 09:41:28 +0000 Subject: FS#11149: alternative fix for ipod startup/shutdown issue Instead of using the OF's low-battery handler to force a shutdown which appears to have numerous unwanted side effects, just clear the end of IRAM before shutting down which appears to solve the original "ipod sometimes needs hard reset to turn on" issue. If you experience the "need hard reset" issue after this commit, please let us know. It has been tested on several models but we still don't know for sure what the original problem was. ;) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25772 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/ipod/power-ipod.c | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) (limited to 'firmware/target/arm') diff --git a/firmware/target/arm/ipod/power-ipod.c b/firmware/target/arm/ipod/power-ipod.c index 14c8bf21e1..4266aad896 100644 --- a/firmware/target/arm/ipod/power-ipod.c +++ b/firmware/target/arm/ipod/power-ipod.c @@ -29,9 +29,6 @@ #include "usb.h" #include "lcd.h" #include "string.h" -#if CONFIG_CPU == PP5022 || CONFIG_CPU == PP5020 -#include "rtc.h" -#endif void power_init(void) { @@ -167,26 +164,20 @@ void power_off(void) #endif #ifndef BOOTLOADER -#if CONFIG_CPU == PP5022 || CONFIG_CPU == PP5020 - /* When shut down by OF, wakeup via alarm is enabled. This resets the - alarm time so an unintended wakeup does not occur. */ - if (!(pcf50605_wakeup_flags & 0x10)) - rtc_enable_alarm(false); -#endif -#if defined(IPOD_1G2G) +#ifdef IPOD_1G2G /* we cannot turn off the 1st gen/ 2nd gen yet. Need to figure out sleep mode. */ system_reboot(); -#elif CONFIG_CPU == PP5022 - /* The OF in flash assumes boot failed because the battery is low. - If there is no charger connected, this leads to a shutdown. - */ - memcpy((void *)(0x4001ff00+8), "booting!", 8); - system_reboot(); -#elif CONFIG_CPU == PP5020 - memcpy((void *)(0x40017f00+8), "booting!", 8); - system_reboot(); #else /* We don't turn off the ipod, we put it in a deep sleep */ + /* Clear latter part of iram (the part used by plugins/codecs) to ensure + * that the OF behaves properly on boot. There is some kind of boot + * failure flag there which otherwise may not be cleared. + */ +#if CONFIG_CPU == PP5022 + memset((void*)0x4000c000, 0, 0x14000); +#elif CONFIG_CPU == PP5020 + memset((void*)0x4000c000, 0, 0xc000); +#endif pcf50605_standby_mode(); #endif #endif -- cgit v1.2.3