aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Luo <luofrank@google.com>2018-11-20 15:33:34 +0800
committerjro1979oliver <jroliveira.oliveira301@gmail.com>2022-08-02 19:24:27 +0200
commit93c5ef0a81139f59c329282c935c6d19b96ce6a3 (patch)
treeba1fb25743ef6c53017e08ecd25feba713a07c05
parent87b2d9cd8267b83245da9bfd097d02827c6c9522 (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.c5
-rw-r--r--kernel/power/suspend.c5
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);