Index: firmware/target/arm/s5l8700/ipodnano2g/power-nano2g.c =================================================================== --- firmware/target/arm/s5l8700/ipodnano2g/power-nano2g.c (revision 22914) +++ firmware/target/arm/s5l8700/ipodnano2g/power-nano2g.c (working copy) @@ -23,7 +23,11 @@ #include "inttypes.h" #include "s5l8700.h" #include "power.h" +#include "ftl-target.h" +#include +#include "panic.h" + /* Power handling for S5L8700 based Meizu players The M3 and M6 players appear to use the same pins for power, USB detection @@ -32,7 +36,8 @@ void power_off(void) { - /* TODO */ + if (ftl_sync() != 0) panicf("Failed to unmount flash!"); + panicf("Poweroff not implemented yet."); while(1); } Index: firmware/target/arm/s5l8700/system-s5l8700.c =================================================================== --- firmware/target/arm/s5l8700/system-s5l8700.c (revision 22914) +++ firmware/target/arm/s5l8700/system-s5l8700.c (working copy) @@ -22,6 +22,9 @@ #include "kernel.h" #include "system.h" #include "panic.h" +#ifdef IPOD_NANO2G +#include "ftl-target.h" +#endif #define default_interrupt(name) \ extern __attribute__((weak,alias("UIRQ"))) void name (void) @@ -151,6 +154,21 @@ void system_reboot(void) { +#ifdef IPODNANO2G + if (ftl_sync() != 0) panicf("Failed to unmount flash!"); + /* Reset the SoC */ + asm volatile(" \ + MSR CPSR_c, #0xD3 \ + MOV R5, #0x110000 \ + ADD R5, R5, #0xFF \ + ADD R6, R5, #0xA00 \ + MOV R10, #0x3C800000 \ + STR R6, [R10] \ + MOV R6, #0xFF0 \ + STR R6, [R10,#4] \ + STR R5, [R10] \ + hang: B hang"); +#endif } void system_exception_wait(void)