path: root/firmware/target/arm/ipod/power-ipod.c
diff options
authorTorne Wuff <>2010-05-02 09:41:28 +0000
committerTorne Wuff <>2010-05-02 09:41:28 +0000
commit5b4a84a4cec889e31b04157e40d17cebadb04a39 (patch)
tree5e679e568b8fca4070755763ad6ff8c08ab62c87 /firmware/target/arm/ipod/power-ipod.c
parent9f157ad584f50402e44a8055c2dd42b9839d9f2f (diff)
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:// a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/ipod/power-ipod.c')
1 files changed, 10 insertions, 19 deletions
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"
void power_init(void)
@@ -167,26 +164,20 @@ void power_off(void)
-#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);
-#if defined(IPOD_1G2G)
+#ifdef IPOD_1G2G
/* we cannot turn off the 1st gen/ 2nd gen yet. Need to figure out sleep mode. */
-#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();
/* 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);