Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5a585e47 authored by Mike Tipton's avatar Mike Tipton
Browse files

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: default avatarMike Tipton <mdtipton@codeaurora.org>
parent 4b196d63
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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 = {
+2 −0
Original line number Diff line number Diff line
@@ -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 = {
+2 −0
Original line number Diff line number Diff line
@@ -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 = {