From 56ebcfcaca063f8cedf59a6e053fe687d419bae0 Mon Sep 17 00:00:00 2001 From: Taniya Das Date: Fri, 13 Jul 2018 11:51:02 +0530 Subject: clk: msm: mmss: Add dev_pm_ops for MMSS PLL for 8996 Support early resume and late suspend for MMPLLs to support hibernation. Without this change, the mmplls were not getting restored to a sane state on the hibernate resume. Change-Id: I7edb7219149d2e96a9487cdaf19a0bc4b9ec709f Signed-off-by: Taniya Das Signed-off-by: Siddhartha Agrawal --- drivers/clk/msm/clock-mmss-8996.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/clk/msm/clock-mmss-8996.c b/drivers/clk/msm/clock-mmss-8996.c index 30169d3f3a98..339ae1622005 100644 --- a/drivers/clk/msm/clock-mmss-8996.c +++ b/drivers/clk/msm/clock-mmss-8996.c @@ -3648,6 +3648,21 @@ void __iomem *gpu_base; u64 efuse; int gpu_speed_bin; +static int mmss_pll_suspend(struct device *dev) +{ + return 0; +} + +static int mmss_pll_resume(struct device *dev) +{ +#ifdef CONFIG_HIBERNATION + mmpll9.c.ops->set_rate(&mmpll9.c, 1248000000); + mmpll8.c.ops->set_rate(&mmpll8.c, 510000); + mmpll2.c.ops->set_rate(&mmpll2.c, 510000); +#endif + return 0; +} + int msm_mmsscc_8996_probe(struct platform_device *pdev) { struct resource *res; @@ -3810,11 +3825,19 @@ static struct of_device_id msm_clock_mmss_match_table[] = { {}, }; +static const struct dev_pm_ops msm_clock_mmss_pm_ops = { + .freeze_late = mmss_pll_suspend, + .thaw_early = mmss_pll_resume, + .poweroff_late = mmss_pll_suspend, + .restore_early = mmss_pll_resume, +}; + static struct platform_driver msm_clock_mmss_driver = { .probe = msm_mmsscc_8996_probe, .driver = { .name = "qcom,mmsscc-8996", .of_match_table = msm_clock_mmss_match_table, + .pm = &msm_clock_mmss_pm_ops, .owner = THIS_MODULE, }, }; -- cgit v1.2.3