aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-exynos/pm_domains.c
diff options
context:
space:
mode:
authorTomasz Figa <t.figa@samsung.com>2012-11-21 10:21:08 -0500
committerKukjin Kim <kgene.kim@samsung.com>2012-11-21 10:38:57 -0500
commit2ed5f236716cbd20f51bdc87ddd91bad259c81a6 (patch)
treeae6451f3e8418d00aec218afdc34aa027c2cfbea /arch/arm/mach-exynos/pm_domains.c
parentcf7c397b62b1afa6d17c890641d067d5999daeb9 (diff)
ARM: EXYNOS: Detect power domain state on registration from DT
Initial state of power domains might vary on different boards and with different bootloaders. This patch adds detection of initial state of power domains when being registered from DT. Signed-off-by: Tomasz Figa <t.figa@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'arch/arm/mach-exynos/pm_domains.c')
-rw-r--r--arch/arm/mach-exynos/pm_domains.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/arm/mach-exynos/pm_domains.c b/arch/arm/mach-exynos/pm_domains.c
index c0bc83a7663e..d1abc1a94ecd 100644
--- a/arch/arm/mach-exynos/pm_domains.c
+++ b/arch/arm/mach-exynos/pm_domains.c
@@ -89,6 +89,7 @@ static __init int exynos_pm_dt_parse_domains(void)
89 89
90 for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") { 90 for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") {
91 struct exynos_pm_domain *pd; 91 struct exynos_pm_domain *pd;
92 int on;
92 93
93 pd = kzalloc(sizeof(*pd), GFP_KERNEL); 94 pd = kzalloc(sizeof(*pd), GFP_KERNEL);
94 if (!pd) { 95 if (!pd) {
@@ -97,14 +98,15 @@ static __init int exynos_pm_dt_parse_domains(void)
97 return -ENOMEM; 98 return -ENOMEM;
98 } 99 }
99 100
100 if (of_get_property(np, "samsung,exynos4210-pd-off", NULL))
101 pd->is_off = true;
102 pd->name = np->name; 101 pd->name = np->name;
103 pd->base = of_iomap(np, 0); 102 pd->base = of_iomap(np, 0);
104 pd->pd.power_off = exynos_pd_power_off; 103 pd->pd.power_off = exynos_pd_power_off;
105 pd->pd.power_on = exynos_pd_power_on; 104 pd->pd.power_on = exynos_pd_power_on;
106 pd->pd.of_node = np; 105 pd->pd.of_node = np;
107 pm_genpd_init(&pd->pd, NULL, false); 106
107 on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN;
108
109 pm_genpd_init(&pd->pd, NULL, !on);
108 } 110 }
109 return 0; 111 return 0;
110} 112}