summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm')
-rw-r--r--firmware/target/arm/tcc780x/cowond2/button-target.h2
-rw-r--r--firmware/target/arm/tcc780x/cowond2/power-cowond2.c21
-rw-r--r--firmware/target/arm/tcc780x/debug-tcc780x.c45
3 files changed, 37 insertions, 31 deletions
diff --git a/firmware/target/arm/tcc780x/cowond2/button-target.h b/firmware/target/arm/tcc780x/cowond2/button-target.h
index 1ce602a30d..3ccf70cffd 100644
--- a/firmware/target/arm/tcc780x/cowond2/button-target.h
+++ b/firmware/target/arm/tcc780x/cowond2/button-target.h
@@ -49,6 +49,6 @@ int button_read_device(void);
/* Software power-off */
#define POWEROFF_BUTTON BUTTON_POWER
-#define POWEROFF_COUNT 40
+#define POWEROFF_COUNT 10
#endif /* _BUTTON_TARGET_H_ */
diff --git a/firmware/target/arm/tcc780x/cowond2/power-cowond2.c b/firmware/target/arm/tcc780x/cowond2/power-cowond2.c
index 96fe211a64..92969de203 100644
--- a/firmware/target/arm/tcc780x/cowond2/power-cowond2.c
+++ b/firmware/target/arm/tcc780x/cowond2/power-cowond2.c
@@ -20,33 +20,38 @@
#include "kernel.h"
#include "system.h"
#include "power.h"
+#include "pcf50606.h"
+#include "cpu.h"
#ifndef SIMULATOR
void power_init(void)
{
- #warning function not implemented
+ /* Set outputs as per OF - further investigation required. */
+ pcf50606_write(PCF5060X_DCDEC1, 0xe4);
+ pcf50606_write(PCF5060X_IOREGC, 0xf5);
+ pcf50606_write(PCF5060X_D1REGC1, 0xf5);
+ pcf50606_write(PCF5060X_D2REGC1, 0xe9);
+ pcf50606_write(PCF5060X_D3REGC1, 0xf8); /* WM8985 3.3v */
+ pcf50606_write(PCF5060X_DCUDC1, 0xe7);
+ pcf50606_write(PCF5060X_LPREGC1, 0x0);
+ pcf50606_write(PCF5060X_LPREGC2, 0x2);
}
void ide_power_enable(bool on)
{
- #warning function not implemented
(void)on;
}
bool ide_powered(void)
{
- #warning function not implemented
return true;
}
void power_off(void)
{
- /* Disable interrupts on this core */
- disable_interrupt(IRQ_FIQ_STATUS);
-
- /* Shutdown: stop XIN oscillator */
- CLKCTRL &= ~(1 << 31);
+ /* Forcibly cut power to SoC & peripherals by putting the PCF to sleep */
+ pcf50606_write(PCF5060X_OOCC1, GOSTDBY | CHGWAK | EXTONWAK);
}
#else /* SIMULATOR */
diff --git a/firmware/target/arm/tcc780x/debug-tcc780x.c b/firmware/target/arm/tcc780x/debug-tcc780x.c
index 10345ed7df..14aa8c1c10 100644
--- a/firmware/target/arm/tcc780x/debug-tcc780x.c
+++ b/firmware/target/arm/tcc780x/debug-tcc780x.c
@@ -27,19 +27,20 @@
#include "sprintf.h"
#include "font.h"
#include "debug-target.h"
+#include "adc.h"
+
+/* IRQ status registers of debug interest only */
+#define STS (*(volatile unsigned long *)0xF3001008)
+#define SRC (*(volatile unsigned long *)0xF3001010)
bool __dbg_ports(void)
{
return false;
}
-//extern char r_buffer[5];
-//extern int r_button;
-
bool __dbg_hw_info(void)
{
- int line = 0, button, oldline;
- int *address=0x0;
+ int line = 0, i, button, oldline;
bool done=false;
char buf[100];
@@ -50,8 +51,6 @@ bool __dbg_hw_info(void)
/* Put all the static text before the while loop */
lcd_puts(0, line++, "[Hardware info]");
- /* TODO: ... */
-
line++;
oldline=line;
while(!done)
@@ -61,26 +60,28 @@ bool __dbg_hw_info(void)
button &= ~BUTTON_REPEAT;
- if (button == BUTTON_MENU)
+ if (button == BUTTON_POWER)
done=true;
- if(button==BUTTON_DOWN)
- address+=0x01;
- else if (button==BUTTON_UP)
- address-=0x01;
- /*snprintf(buf, sizeof(buf), "Buffer: 0x%02x%02x%02x%02x%02x",
- r_buffer[0], r_buffer[1], r_buffer[2], r_buffer[3],r_buffer[4] ); lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "Button: 0x%08x, HWread: 0x%08x",
- (unsigned int)button, r_button); lcd_puts(0, line++, buf);*/
snprintf(buf, sizeof(buf), "current tick: %08x Seconds running: %08d",
(unsigned int)current_tick, (unsigned int)current_tick/100); lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "Address: 0x%08x Data: 0x%08x",
- (unsigned int)address, *address); lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "Address: 0x%08x Data: 0x%08x",
- (unsigned int)(address+1), *(address+1)); lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "Address: 0x%08x Data: 0x%08x",
- (unsigned int)(address+2), *(address+2)); lcd_puts(0, line++, buf);
+
+ snprintf(buf, sizeof(buf), "GPIOA: 0x%08x GPIOB: 0x%08x",
+ (unsigned int)GPIOA, (unsigned int)GPIOB); lcd_puts(0, line++, buf);
+ snprintf(buf, sizeof(buf), "GPIOC: 0x%08x GPIOD: 0x%08x",
+ (unsigned int)GPIOC, (unsigned int)GPIOD); lcd_puts(0, line++, buf);
+ snprintf(buf, sizeof(buf), "GPIOE: 0x%08x",
+ (unsigned int)GPIOE); lcd_puts(0, line++, buf);
+ for (i = 0; i<4; i++)
+ {
+ snprintf(buf, sizeof(buf), "ADC%d: 0x%04x", i, adc_read(i));
+ lcd_puts(0, line++, buf);
+ }
+
+ snprintf(buf, sizeof(buf), "STS: 0x%08x SRC: 0x%08x",
+ (unsigned int)STS, (unsigned int)SRC); lcd_puts(0, line++, buf);
+
lcd_update();
}
return false;