ARM: EXYNOS: Remove PM initcalls and useless indirection
authorTomasz Figa <t.figa@samsung.com>
Mon, 17 Mar 2014 22:28:22 +0000 (07:28 +0900)
committerKukjin Kim <kgene.kim@samsung.com>
Thu, 20 Mar 2014 19:09:27 +0000 (04:09 +0900)
This patch simplifies Exynos PM initialization and makes it
multiplatform friendly by replacing initcalls used originally to invoke
all the initialization code with explicit function calls.

In addition, an useless subsys_interface is removed, as all its .add_dev
callback did was setting two function pointers.

Signed-off-by: Tomasz Figa <t.figa@samsung.com>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
arch/arm/mach-exynos/common.c
arch/arm/mach-exynos/common.h
arch/arm/mach-exynos/pm.c

index 025fd8215ca3caf81f00db2a250d48d068bdbbe7..e98ddadc5f7484fe19af910aba8631d3830ec3c0 100644 (file)
@@ -315,6 +315,7 @@ void __init exynos_init_late(void)
                return;
 
        pm_genpd_poweroff_unused();
+       exynos_pm_init();
 }
 
 static int __init exynos_fdt_map_chipid(unsigned long node, const char *uname,
index f76967b1c551054da36b391e7413e47057641aae..82e08fb83eaeb3069218f3c5e750a199e49b53e3 100644 (file)
@@ -27,6 +27,12 @@ void exynos_init_late(void);
 
 void exynos_firmware_init(void);
 
+#ifdef CONFIG_PM_SLEEP
+extern void __init exynos_pm_init(void);
+#else
+static inline void exynos_pm_init(void) {}
+#endif
+
 extern struct smp_operations exynos_smp_ops;
 
 extern void exynos_cpu_die(unsigned int cpu);
index ba18214c9acad4853b02389e42b8d8895144d0f0..596ed13c416678b8ad32edf86d93e8c03d7790f9 100644 (file)
@@ -92,39 +92,6 @@ static void exynos_pm_prepare(void)
        __raw_writel(virt_to_phys(s3c_cpu_resume), S5P_INFORM0);
 }
 
-static int exynos_pm_add(struct device *dev, struct subsys_interface *sif)
-{
-       pm_cpu_prep = exynos_pm_prepare;
-       pm_cpu_sleep = exynos_cpu_suspend;
-
-       return 0;
-}
-
-static struct subsys_interface exynos_pm_interface = {
-       .name           = "exynos_pm",
-       .subsys         = &exynos_subsys,
-       .add_dev        = exynos_pm_add,
-};
-
-static __init int exynos_pm_drvinit(void)
-{
-       unsigned int tmp;
-
-       if (soc_is_exynos5440())
-               return 0;
-
-       s3c_pm_init();
-
-       /* All wakeup disable */
-
-       tmp = __raw_readl(S5P_WAKEUP_MASK);
-       tmp |= ((0xFF << 8) | (0x1F << 1));
-       __raw_writel(tmp, S5P_WAKEUP_MASK);
-
-       return subsys_interface_register(&exynos_pm_interface);
-}
-arch_initcall(exynos_pm_drvinit);
-
 static int exynos_pm_suspend(void)
 {
        unsigned long tmp;
@@ -220,12 +187,19 @@ static struct syscore_ops exynos_pm_syscore_ops = {
        .resume         = exynos_pm_resume,
 };
 
-static __init int exynos_pm_syscore_init(void)
+void __init exynos_pm_init(void)
 {
-       if (soc_is_exynos5440())
-               return 0;
+       u32 tmp;
+
+       pm_cpu_prep = exynos_pm_prepare;
+       pm_cpu_sleep = exynos_cpu_suspend;
+
+       s3c_pm_init();
+
+       /* All wakeup disable */
+       tmp = __raw_readl(S5P_WAKEUP_MASK);
+       tmp |= ((0xFF << 8) | (0x1F << 1));
+       __raw_writel(tmp, S5P_WAKEUP_MASK);
 
        register_syscore_ops(&exynos_pm_syscore_ops);
-       return 0;
 }
-arch_initcall(exynos_pm_syscore_init);