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.c64
1 files changed, 27 insertions, 37 deletions
diff --git a/fw/fe310/eos/dev/eve.c b/fw/fe310/eos/dev/eve.c
index 25a3558..873cd7a 100644
--- a/fw/fe310/eos/dev/eve.c
+++ b/fw/fe310/eos/dev/eve.c
@@ -61,14 +61,9 @@ 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 {
- eve_pwr_set_state(eos_aon_load4eve());
-
eve_activate();
gpio_reg = eve_gpio_read();
eve_cmd_set_offset();
- if (gpio_reg & (1 << EVE_GPIO_DISP)) {
- eve_pwr_set_state(EVE_PSTATE_ACTIVE);
- }
eve_deactivate();
}
@@ -94,24 +89,32 @@ int eos_eve_run(void) {
if (!rst) {
/* was active before sleep */
- if (eos_aon_load4eve() == EVE_PSTATE_ACTIVE) return EOS_OK;
+ if (eve_pwr_state() == EVE_PSTATE_ACTIVE) return EOS_OK;
- /* DISP pin is off */
- if (eve_pwr_state() != EVE_PSTATE_ACTIVE) return EOS_ERR_BUSY;
+ /* Display is attached to app module */
+ if (!eos_egpio_get_val(EGPIO_PIN_DISP_SEL)) return EOS_ERR_BUSY;
}
rv = eve_select();
if (rv) return rv;
- eve_touch_intr_enable();
- eve_touch_start();
- eve_intr_enable();
- eve_clk_start();
+ if (!rst) eve_pwr_wake();
+ _eos_eve_wake();
+ if (rst) eve_set_brightness(0x40);
eve_deselect();
return EOS_OK;
}
+void _eos_eve_sleep(void) {
+ eos_aon_save4eve_pwm(eve_get_brightness());
+ eve_set_brightness(0);
+ eve_clk_stop();
+ eve_intr_disable();
+ eve_touch_stop();
+ eve_touch_intr_disable();
+}
+
int eos_eve_sleep(void) {
int rv;
@@ -120,51 +123,38 @@ int eos_eve_sleep(void) {
rv = eve_select();
if (rv) return rv;
- eve_brightness(0);
- eve_clk_stop();
- eve_intr_disable();
- eve_touch_stop();
- eve_touch_intr_disable();
+ _eos_eve_sleep();
eve_pwr_sleep();
eve_deselect();
return EOS_OK;
}
+void _eos_eve_wake(void) {
+ eve_touch_intr_enable();
+ eve_touch_start();
+ eve_intr_enable();
+ eve_clk_start();
+ eve_set_brightness(eos_aon_load4eve_pwm());
+}
+
int eos_eve_wake(void) {
int disp, rv;
if (eve_pwr_state() == EVE_PSTATE_ACTIVE) return EOS_ERR;
+ if (!eos_egpio_get_val(EGPIO_PIN_DISP_SEL)) return EOS_ERR_BUSY;
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();
+ eve_pwr_wake();
+ _eos_eve_wake();
- 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;
uint32_t matrix[6];