clk: qcom: lahaina: Fix providers left active in suspend

The PM framework prevents runtime_suspend() callbacks after
device_prepare() is called by calling pm_runtime_get_noresume(), which
increments the usage_count. If consumers don't disable their clocks
until after device_prepare(), then the clock provider will remain active
since usage_count=1. This results in regulator votes persisting after
suspend, which blocks system low power modes.

Register for the standard pm_runtime_force_suspend() and
pm_runtime_force_resume() callbacks, which force the device into suspend
even if usage_count=1. Register them in suspend_late, since consumer
clock votes will be removed earlier in suspend.

Change-Id: I73d46bdcc1664239001b7a38ed4aeadba75e57a7
Signed-off-by: Mike Tipton <mdtipton@codeaurora.org>
This commit is contained in:
Mike Tipton 2020-10-27 14:54:40 -07:00
commit 5a585e4703
3 changed files with 6 additions and 0 deletions

View file

@ -3049,6 +3049,8 @@ static void cam_cc_lahaina_sync_state(struct device *dev)
static const struct dev_pm_ops cam_cc_lahaina_pm_ops = {
SET_RUNTIME_PM_OPS(qcom_cc_runtime_suspend, qcom_cc_runtime_resume, NULL)
SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
pm_runtime_force_resume)
};
static struct platform_driver cam_cc_lahaina_driver = {

View file

@ -1567,6 +1567,8 @@ static void disp_cc_lahaina_sync_state(struct device *dev)
static const struct dev_pm_ops disp_cc_lahaina_pm_ops = {
SET_RUNTIME_PM_OPS(qcom_cc_runtime_suspend, qcom_cc_runtime_resume, NULL)
SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
pm_runtime_force_resume)
};
static struct platform_driver disp_cc_lahaina_driver = {

View file

@ -579,6 +579,8 @@ static void video_cc_lahaina_sync_state(struct device *dev)
static const struct dev_pm_ops video_cc_lahaina_pm_ops = {
SET_RUNTIME_PM_OPS(qcom_cc_runtime_suspend, qcom_cc_runtime_resume, NULL)
SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
pm_runtime_force_resume)
};
static struct platform_driver video_cc_lahaina_driver = {