aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--Documentation/devicetree/bindings/arm/exynos/power_domain.txt4
-rw-r--r--arch/arm/mach-exynos/pm_domains.c8
2 files changed, 5 insertions, 7 deletions
diff --git a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
index 6528e215c5fe..843b54622313 100644
--- a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
+++ b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
@@ -9,10 +9,6 @@ Required Properties:
9- reg: physical base address of the controller and length of memory mapped 9- reg: physical base address of the controller and length of memory mapped
10 region. 10 region.
11 11
12Optional Properties:
13- samsung,exynos4210-pd-off: Specifies that the power domain is in turned-off
14 state during boot and remains to be turned-off until explicitly turned-on.
15
16Example: 12Example:
17 13
18 lcd0: power-domain-lcd0 { 14 lcd0: power-domain-lcd0 {
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}