[u-boot] charge: add pwrkey detect when cpu wakeup from wfi
By the way, as cpu can't wakeup from wfi while charger plug in or out, so it's better to define CONFIG_CHARGE_TIMER_WAKEUP if CONFIG_CHARGE_DEEP_SLEEP is defined Change-Id: Ie3133b431f95280fa75e393693eba849538edb8e Signed-off-by: Firefly <service@t-firefly.com> (cherry picked from commit 203f62bb3b6fe8d2916d834952973e661ffc70ab)
This commit is contained in:
@ -19,6 +19,9 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
extern struct fdt_gpio_state *rkkey_get_powerkey(void);
|
||||
#endif
|
||||
|
||||
extern void rkkey_set_wfi_pwrkey_state(int pressed);
|
||||
extern int rkkey_get_wfi_pwrkey_state(void);
|
||||
extern int rkkey_power_state(void);
|
||||
|
||||
/*
|
||||
* rkpm wakeup gpio init
|
||||
@ -81,8 +84,19 @@ void rk_pm_enter(v_pm_cb_f module_pm_conf)
|
||||
rkclk_pll_mode(GPLL_ID, RKCLK_PLL_MODE_SLOW);
|
||||
rkclk_pll_mode(APLL_ID, RKCLK_PLL_MODE_SLOW);
|
||||
|
||||
/* cpu enter wfi mode */
|
||||
wfi();
|
||||
/* not pressed before, so wfi */
|
||||
if (!rkkey_get_wfi_pwrkey_state()) {
|
||||
wfi();
|
||||
/* mark pressed state to notifier framework */
|
||||
rkkey_set_wfi_pwrkey_state(rkkey_power_state());
|
||||
|
||||
/*
|
||||
* if pressed before, not wfi and release key which
|
||||
* allow framework to report a short key pressed event
|
||||
*/
|
||||
} else {
|
||||
rkkey_set_wfi_pwrkey_state(0);
|
||||
}
|
||||
|
||||
/* pll enter nornal mode */
|
||||
rkclk_pll_mode(APLL_ID, RKCLK_PLL_MODE_NORMAL);
|
||||
|
||||
@ -100,6 +100,18 @@ int get_battery_capacity(void) {
|
||||
return batt_status.capacity;
|
||||
}
|
||||
|
||||
static int wfi_pwrkey_pressed = 0;
|
||||
|
||||
void rkkey_set_wfi_pwrkey_state(int pressed)
|
||||
{
|
||||
wfi_pwrkey_pressed = pressed;
|
||||
}
|
||||
|
||||
int rkkey_get_wfi_pwrkey_state(void)
|
||||
{
|
||||
return wfi_pwrkey_pressed;
|
||||
}
|
||||
|
||||
/**
|
||||
* check power key pressed state.
|
||||
*/
|
||||
@ -116,8 +128,13 @@ int power_key_pressed(void) {
|
||||
return KEY_NOT_PRESSED;
|
||||
#else
|
||||
static unsigned int power_pressed_time = 0;
|
||||
#ifdef CONFIG_CHARGE_DEEP_SLEEP
|
||||
int power_pressed = rkkey_power_state() | rkkey_get_wfi_pwrkey_state();
|
||||
#else
|
||||
int power_pressed = rkkey_power_state();
|
||||
#endif
|
||||
int power_pressed_state = KEY_NOT_PRESSED;
|
||||
|
||||
if (!power_pressed_time) {
|
||||
//haven't pressed before.
|
||||
if (power_pressed) {
|
||||
|
||||
Reference in New Issue
Block a user