diff options
author | Uros Majstorovic <majstor@majstor.org> | 2020-05-17 04:48:51 +0200 |
---|---|---|
committer | Uros Majstorovic <majstor@majstor.org> | 2020-05-17 04:48:51 +0200 |
commit | 51453315e18632c00e4a43407ec63a4b69b17e80 (patch) | |
tree | 6d9fceebd172a9c3d02d8806e5a749223fdbfdca /code/fe310/eos/power.c | |
parent | d4ceadf1afc2b3c8120d65ea1f03203df5714d7a (diff) |
power management fix
Diffstat (limited to 'code/fe310/eos/power.c')
-rw-r--r-- | code/fe310/eos/power.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/code/fe310/eos/power.c b/code/fe310/eos/power.c index 9a96689..3cc3462 100644 --- a/code/fe310/eos/power.c +++ b/code/fe310/eos/power.c @@ -16,6 +16,7 @@ #define PWR_RTC_SFREQ (EOS_TIMER_RTC_FREQ >> PWR_RTC_SCALE) static eos_evt_handler_t evt_handler[EOS_PWR_MAX_MTYPE]; +static unsigned char power_btn_down; static void power_handle_evt(unsigned char type, unsigned char *buffer, uint16_t len) { if ((buffer == NULL) || (len < 1)) { @@ -32,8 +33,16 @@ static void power_handle_evt(unsigned char type, unsigned char *buffer, uint16_t } static void power_handle_btn(unsigned char type, unsigned char *buffer, uint16_t len) { - // Do nothing + unsigned char level = buffer[1]; + eos_net_free(buffer, 0); + if (!level) { + power_btn_down = 1; + return; + } + if (!power_btn_down) return; + + eos_power_sleep(); } void eos_power_init(void) { @@ -63,6 +72,11 @@ uint8_t eos_power_cause_rst(void) { } void eos_power_sleep(void) { + eos_spi_dev_start(EOS_DEV_DISP); + eve_sleep(); + eos_spi_dev_stop(); + eos_net_sleep(1000); + AON_REG(AON_PMUKEY) = 0x51F15E; AON_REG(AON_PMUSLEEP) = 1; } |