summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/dev/eve.c
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310/eos/dev/eve.c')
-rw-r--r--fw/fe310/eos/dev/eve.c90
1 files changed, 61 insertions, 29 deletions
diff --git a/fw/fe310/eos/dev/eve.c b/fw/fe310/eos/dev/eve.c
index dad7dfe..25a3558 100644
--- a/fw/fe310/eos/dev/eve.c
+++ b/fw/fe310/eos/dev/eve.c
@@ -2,6 +2,7 @@
#include <stdint.h>
#include "eos.h"
+#include "log.h"
#include "event.h"
#include "soc/pwr.h"
@@ -11,15 +12,12 @@
#include "eve/eve_touch_engine.h"
#include "egpio.h"
+#include "egpio_priv.h"
#include "spi.h"
#include "aon.h"
-#include "pwr.h"
#include "eve.h"
-
-#ifdef EOS_DEBUG
-#include <stdio.h>
-#endif
+#include "eve_priv.h"
static void handle_time(unsigned char type) {
int rv;
@@ -36,13 +34,12 @@ int eos_eve_handle_intr(void) {
int rv;
rv = eve_select();
- if (rv) return 0;
+ if (rv) return rv;
intr_flags = eve_handle_intr();
eve_deselect();
- if (intr_flags == 0) return 0;
- return 1;
+ return intr_flags;
}
int eos_eve_init(void) {
@@ -64,15 +61,12 @@ int eos_eve_init(void) {
eve_touch_init_engine(eos_egpio_get_val(EGPIO_PIN_CTP_SEL) ? EVE_TOUCH_ENGINE_HOST : EVE_TOUCH_ENGINE_GOODIX);
gpio_reg = EVE_GPIO_DEFAULT;
} else {
- uint8_t pwr_state;
-
- pwr_state = eos_aon_load4eve();
- eve_pwr_set_state(pwr_state);
+ eve_pwr_set_state(eos_aon_load4eve());
eve_activate();
gpio_reg = eve_gpio_read();
eve_cmd_set_offset();
- if (gpio_reg & EVE_GPIO_DISP) {
+ if (gpio_reg & (1 << EVE_GPIO_DISP)) {
eve_pwr_set_state(EVE_PSTATE_ACTIVE);
}
eve_deactivate();
@@ -92,9 +86,19 @@ eve_init_fin:
}
int eos_eve_run(void) {
- int rv;
+ uint8_t wakeup_cause;
+ int rst, rv;
+
+ wakeup_cause = eos_pwr_wakeup_cause();
+ rst = (wakeup_cause == EOS_PWR_WAKE_RST);
- if (eve_pwr_state() != EVE_PSTATE_ACTIVE) return EOS_ERR_BUSY;
+ if (!rst) {
+ /* was active before sleep */
+ if (eos_aon_load4eve() == EVE_PSTATE_ACTIVE) return EOS_OK;
+
+ /* DISP pin is off */
+ if (eve_pwr_state() != EVE_PSTATE_ACTIVE) return EOS_ERR_BUSY;
+ }
rv = eve_select();
if (rv) return rv;
@@ -111,10 +115,12 @@ int eos_eve_run(void) {
int eos_eve_sleep(void) {
int rv;
+ if (eve_pwr_state() != EVE_PSTATE_ACTIVE) return EOS_ERR;
+
rv = eve_select();
if (rv) return rv;
- eos_aon_save4eve(eve_pwr_state());
+ eve_brightness(0);
eve_clk_stop();
eve_intr_disable();
eve_touch_stop();
@@ -125,16 +131,46 @@ int eos_eve_sleep(void) {
return EOS_OK;
}
+int eos_eve_wake(void) {
+ int disp, rv;
+
+ if (eve_pwr_state() == EVE_PSTATE_ACTIVE) return EOS_ERR;
+
+ rv = eve_select();
+ if (rv) return rv;
+
+ eve_activate();
+ disp = eve_gpio_get(EVE_GPIO_DISP);
+ if (disp) {
+ eve_pwr_set_state(EVE_PSTATE_ACTIVE);
+ }
+ eve_deactivate();
+
+ if (eve_pwr_state() != EVE_PSTATE_ACTIVE) {
+ rv = EOS_ERR_BUSY;
+ goto eve_wake_fin;
+ }
+
+ eve_touch_intr_enable();
+ eve_touch_start();
+ eve_intr_enable();
+ eve_clk_start();
+eve_wake_fin:
+ eve_deselect();
+
+ return rv;
+}
+
+void eos_eve_save2aon(void) {
+ eos_aon_save4eve(eve_pwr_state());
+}
+
void eve_calibrate(void) {
int rv, d;
-#ifdef EOS_DEBUG
uint32_t matrix[6];
-#endif
if (!eve_selected()) {
-#ifdef EOS_DEBUG
- printf("EVE CALIBRATE: NOT SELECTED\n");
-#endif
+ EOS_LOG(EOS_LOG_ERR, "EVE CALIBRATE: NOT SELECTED\n");
return;
}
@@ -155,25 +191,21 @@ void eve_calibrate(void) {
eos_evtq_exec();
rv = eve_select();
if (rv) {
-#ifdef EOS_DEBUG
- printf("EVE CALIBRATE ERR:%d\n", rv);
-#endif
+ EOS_LOG(EOS_LOG_ERR, "EVE CALIBRATE ERR:%d\n", rv);
return;
}
} while (!d);
eve_touch_set_extended(1);
-#ifdef EOS_DEBUG
if (rv) {
- printf("EVE CALIBRATE ERR:%d\n", rv);
+ EOS_LOG(EOS_LOG_ERR, "EVE CALIBRATE ERR:%d\n", rv);
return;
}
eve_touch_get_matrix(matrix);
- printf("TOUCH MATRIX:\n");
- printf("uint32_t touch_matrix[6] = {0x%x,0x%x,0x%x,0x%x,0x%x,0x%x}\n", matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
-#endif
+ EOS_LOG(EOS_LOG_INFO, "TOUCH MATRIX:\n");
+ EOS_LOG(EOS_LOG_INFO, "uint32_t touch_matrix[6] = {0x%x,0x%x,0x%x,0x%x,0x%x,0x%x}\n", matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
}
int eve_select(void) {