diff --git a/pt/pt_core.c b/pt/pt_core.c index cf19cca83b..b91f94454e 100644 --- a/pt/pt_core.c +++ b/pt/pt_core.c @@ -10425,6 +10425,8 @@ static int pt_core_rt_suspend(struct device *dev) struct pt_core_data *cd = dev_get_drvdata(dev); int rc = 0; + dev_info(dev, "%s: Entering into runtime suspend mode:\n", + __func__); if (cd->cpdata->flags & PT_CORE_FLAG_SKIP_RUNTIME) return 0; @@ -10433,6 +10435,12 @@ static int pt_core_rt_suspend(struct device *dev) pt_debug(dev, DL_ERROR, "%s: Error on sleep\n", __func__); return -EAGAIN; } + + rc = pt_enable_regulator(cd, false); + if (rc < 0) { + dev_err(dev, "%s: Failed to disable regulators: rc=%d\n", + __func__, rc); + } return 0; } @@ -10453,9 +10461,20 @@ static int pt_core_rt_resume(struct device *dev) struct pt_core_data *cd = dev_get_drvdata(dev); int rc = 0; + dev_info(dev, "%s: Entering into runtime resume mode:\n", + __func__); if (cd->cpdata->flags & PT_CORE_FLAG_SKIP_RUNTIME) return 0; + rc = pt_enable_regulator(cd, true); + if (rc < 0) { + dev_err(dev, "%s: Failed to enable regulators: rc=%d\n", + __func__, rc); + } + + dev_info(dev, "%s: Runtime voltage regulator enabled: rc=%d\n", + __func__, rc); + rc = pt_core_wake(cd); if (rc < 0) { pt_debug(dev, DL_ERROR, "%s: Error on wake\n", __func__); @@ -10483,9 +10502,22 @@ static int pt_core_rt_resume(struct device *dev) ******************************************************************************/ static int pt_core_suspend_(struct device *dev) { + int rc; struct pt_core_data *cd = dev_get_drvdata(dev); - pt_core_sleep(cd); + rc = pt_core_sleep(cd); + if (rc < 0) { + pt_debug(dev, DL_ERROR, "%s: Error on sleep\n", __func__); + return -EAGAIN; + } + + rc = pt_enable_regulator(cd, false); + if (rc) { + dev_err(dev, "%s: Failed to disable regulators: rc=%d\n", + __func__, rc); + } + dev_info(dev, "%s: Sayantan1: Voltage regulators disabled: rc=%d\n", + __func__, rc); if (!IS_EASY_WAKE_CONFIGURED(cd->easy_wakeup_gesture)) return 0; @@ -10504,7 +10536,7 @@ static int pt_core_suspend_(struct device *dev) __func__); } - return 0; + return rc; } /******************************************************************************* @@ -10545,7 +10577,19 @@ static int pt_core_suspend(struct device *dev) ******************************************************************************/ static int pt_core_resume_(struct device *dev) { + int rc; struct pt_core_data *cd = dev_get_drvdata(dev); + + dev_info(dev, "%s: Entering into resume mode:\n", + __func__); + rc = pt_enable_regulator(cd, true); + if (rc < 0) { + dev_err(dev, "%s: Failed to enable regulators: rc=%d\n", + __func__, rc); + } + dev_info(dev, "%s: Voltage regulator enabled: rc=%d\n", + __func__, rc); + if (!IS_EASY_WAKE_CONFIGURED(cd->easy_wakeup_gesture)) goto exit;