diff options
| author | Frank Luo <luofrank@google.com> | 2018-11-20 15:33:34 +0800 |
|---|---|---|
| committer | jro1979oliver <jroliveira.oliveira301@gmail.com> | 2022-08-02 19:24:27 +0200 |
| commit | 93c5ef0a81139f59c329282c935c6d19b96ce6a3 (patch) | |
| tree | ba1fb25743ef6c53017e08ecd25feba713a07c05 | |
| parent | 87b2d9cd8267b83245da9bfd097d02827c6c9522 (diff) | |
kernel: power: Workaround for sensor ipc message causing high power consume
Sync from Qcom's document KBA-180725024109
To avoid the non-wakeup type sensor data break the AP sleep flow,
notify sensor subsystem in the first place of pm_suspend .
Bug: 118418963
Test: measure power consumption after running test case
Change-Id: I2848230d495e30ac462aef148b3f885103d9c24e
Signed-off-by: Frank Luo <luofrank@google.com>
Signed-off-by: Danny Lin <danny@kdrag0n.dev>
| -rw-r--r-- | drivers/soc/qcom/smp2p_sleepstate.c | 5 | ||||
| -rw-r--r-- | kernel/power/suspend.c | 5 |
2 files changed, 7 insertions, 3 deletions
diff --git a/drivers/soc/qcom/smp2p_sleepstate.c b/drivers/soc/qcom/smp2p_sleepstate.c index 2ef25e48ce50..1f0809b61220 100644 --- a/drivers/soc/qcom/smp2p_sleepstate.c +++ b/drivers/soc/qcom/smp2p_sleepstate.c @@ -20,7 +20,8 @@ #define SET_DELAY (2 * HZ) #define PROC_AWAKE_ID 12 /* 12th bit */ -static int slst_gpio_base_id; +int slst_gpio_base_id; + /** * sleepstate_pm_notifier() - PM notifier callback function. @@ -36,13 +37,11 @@ static int sleepstate_pm_notifier(struct notifier_block *nb, { switch (event) { case PM_SUSPEND_PREPARE: - gpio_set_value(slst_gpio_base_id + PROC_AWAKE_ID, 0); msleep(25); /* To be tuned based on SMP2P latencies */ msm_ipc_router_set_ws_allowed(true); break; case PM_POST_SUSPEND: - gpio_set_value(slst_gpio_base_id + PROC_AWAKE_ID, 1); msleep(25); /* To be tuned based on SMP2P latencies */ msm_ipc_router_set_ws_allowed(false); break; diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index c8806ad6b5f5..06eccb82a403 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -40,6 +40,10 @@ #include "user_sysfs_private.h" #endif +#include <linux/gpio.h> +extern int slst_gpio_base_id; +#define PROC_AWAKE_ID 12 /* 12th bit */ + const char *pm_labels[] = { "mem", "standby", "freeze", NULL }; const char *pm_states[PM_SUSPEND_MAX]; @@ -580,6 +584,7 @@ int pm_suspend(suspend_state_t state) msm_rpmstats_log_suspend_enter(); #endif error = enter_state(state); + gpio_set_value(slst_gpio_base_id + PROC_AWAKE_ID, 1); if (error) { suspend_stats.fail++; dpm_save_failed_errno(error); |
