diff options
Diffstat (limited to 'fw/fe310/eos/dev/eve.c')
| -rw-r--r-- | fw/fe310/eos/dev/eve.c | 64 |
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]; |
