clk: samsung: exynos-audss: Replace syscore PM with platform device PM
authorMarek Szyprowski <m.szyprowski@samsung.com>
Fri, 25 Nov 2016 09:39:54 +0000 (10:39 +0100)
committerSylwester Nawrocki <s.nawrocki@samsung.com>
Thu, 29 Dec 2016 15:34:07 +0000 (16:34 +0100)
Exynos AUDSS clock driver has been already converted to platform driver,
so remove the dependency on the syscore ops - the last remaining
non-platform driver feature. Platform device's system sleep PM provides
all needed infrastructure for replacing syscore-based PM, so do it now.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Javier Martinez Canillas <javier@osg.samsung.com>
Reviewed-by: Chanwoo Choi <cw00.choi@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
drivers/clk/samsung/clk-exynos-audss.c

index 17e68a7..cb7df35 100644 (file)
@@ -44,7 +44,7 @@ static unsigned long reg_save[][2] = {
        { ASS_CLK_GATE, 0 },
 };
 
-static int exynos_audss_clk_suspend(void)
+static int exynos_audss_clk_suspend(struct device *dev)
 {
        int i;
 
@@ -54,18 +54,15 @@ static int exynos_audss_clk_suspend(void)
        return 0;
 }
 
-static void exynos_audss_clk_resume(void)
+static int exynos_audss_clk_resume(struct device *dev)
 {
        int i;
 
        for (i = 0; i < ARRAY_SIZE(reg_save); i++)
                writel(reg_save[i][1], reg_base + reg_save[i][0]);
-}
 
-static struct syscore_ops exynos_audss_clk_syscore_ops = {
-       .suspend        = exynos_audss_clk_suspend,
-       .resume         = exynos_audss_clk_resume,
-};
+       return 0;
+}
 #endif /* CONFIG_PM_SLEEP */
 
 struct exynos_audss_clk_drvdata {
@@ -251,9 +248,6 @@ static int exynos_audss_clk_probe(struct platform_device *pdev)
                goto unregister;
        }
 
-#ifdef CONFIG_PM_SLEEP
-       register_syscore_ops(&exynos_audss_clk_syscore_ops);
-#endif
        return 0;
 
 unregister:
@@ -267,10 +261,6 @@ unregister:
 
 static int exynos_audss_clk_remove(struct platform_device *pdev)
 {
-#ifdef CONFIG_PM_SLEEP
-       unregister_syscore_ops(&exynos_audss_clk_syscore_ops);
-#endif
-
        of_clk_del_provider(pdev->dev.of_node);
 
        exynos_audss_clk_teardown();
@@ -281,10 +271,16 @@ static int exynos_audss_clk_remove(struct platform_device *pdev)
        return 0;
 }
 
+static const struct dev_pm_ops exynos_audss_clk_pm_ops = {
+       SET_LATE_SYSTEM_SLEEP_PM_OPS(exynos_audss_clk_suspend,
+                                    exynos_audss_clk_resume)
+};
+
 static struct platform_driver exynos_audss_clk_driver = {
        .driver = {
                .name = "exynos-audss-clk",
                .of_match_table = exynos_audss_clk_of_match,
+               .pm = &exynos_audss_clk_pm_ops,
        },
        .probe = exynos_audss_clk_probe,
        .remove = exynos_audss_clk_remove,