summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Gmeiner <christian.gmeiner@gmail.com>2008-02-16 12:44:15 +0000
committerChristian Gmeiner <christian.gmeiner@gmail.com>2008-02-16 12:44:15 +0000
commit868fcce96cf0a131daa615afe87ea8a2287304bd (patch)
tree2ad39351b1e0bc537f68a057f652ddf634652f22
parentb650bc592aa09f8ba74bdfb420ef869b97fbaaf8 (diff)
downloadrockbox-868fcce96cf0a131daa615afe87ea8a2287304bd.tar.gz
rockbox-868fcce96cf0a131daa615afe87ea8a2287304bd.zip
Shutdown needs about 2 seconds, but it seems to work :)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16317 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--bootloader/telechips.c8
-rw-r--r--firmware/target/arm/tcc780x/cowond2/power-cowond2.c18
2 files changed, 18 insertions, 8 deletions
diff --git a/bootloader/telechips.c b/bootloader/telechips.c
index 1918465aa2..e1b80f9be6 100644
--- a/bootloader/telechips.c
+++ b/bootloader/telechips.c
@@ -197,12 +197,8 @@ void* main(void)
line = 0;
printf("POWER-OFF");
-#if defined(COWON_D2)
- lcd_enable(false);
-#endif
-
- /* TODO: Power-off */
- while(1);
+ /* Power-off */
+ power_off();
return 0;
}
diff --git a/firmware/target/arm/tcc780x/cowond2/power-cowond2.c b/firmware/target/arm/tcc780x/cowond2/power-cowond2.c
index d8a58570e4..2439676acc 100644
--- a/firmware/target/arm/tcc780x/cowond2/power-cowond2.c
+++ b/firmware/target/arm/tcc780x/cowond2/power-cowond2.c
@@ -16,9 +16,7 @@
* KIND, either express or implied.
*
****************************************************************************/
-#include "config.h"
#include "cpu.h"
-#include <stdbool.h>
#include "kernel.h"
#include "system.h"
#include "power.h"
@@ -61,6 +59,22 @@ void charger_enable(bool on)
void power_off(void)
{
+ /* Disable interrupts on this core */
+ set_interrupt_status(IRQ_FIQ_DISABLED, IRQ_FIQ_STATUS);
+
+ /* Mask them on both cores */
+ CPU_INT_CLR = -1;
+ COP_INT_CLR = -1;
+
+ /* Shutdown: stop XIN oscillator */
+ CLKCTRL &= ~(1 << 31);
+
+ /* Halt everything and wait for device to power off */
+ while (1)
+ {
+ CPU_CTL = PROC_SLEEP;
+ COP_CTL = PROC_SLEEP;
+ }
}
void ide_power_enable(bool on)