Some bootloaders disable unused power domains to reduce power consuption. Power domain driver can easily read the actual state from the hardware registers instead of assuming that their initial state is always 'on'.
Unified · Split
| @@ -151,9 +151,12 @@ static __init int exynos4_pm_init_power_domain(void) · 150 unmodified lines | |||
| 151 | if (of_have_populated_dt()) | 151 | if (of_have_populated_dt()) |
| 152 | return exynos_pm_dt_parse_domains(); | 152 | return exynos_pm_dt_parse_domains(); |
| 153 | 153 | ||
| 154 | for (idx = 0; idx < ARRAY_SIZE(exynos4_pm_domains); idx++) | 154 | for (idx = 0; idx < ARRAY_SIZE(exynos4_pm_domains); idx++) { |
| 155 | pm_genpd_init(&exynos4_pm_domains[idx]->pd, NULL, | 155 | struct exynos_pm_domain *pd = exynos4_pm_domains[idx]; |
| 156 | exynos4_pm_domains[idx]->is_off); | 156 | int on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN; |
| 157 | |||
| 158 | pm_genpd_init(&pd->pd, NULL, !on); | ||
| 159 | } | ||
| 157 | 160 | ||
| 158 | #ifdef CONFIG_S5P_DEV_FIMD0 | 161 | #ifdef CONFIG_S5P_DEV_FIMD0 |
| 159 | exynos_pm_add_dev_to_genpd(&s5p_device_fimd0, &exynos4_pd_lcd0); | 162 | exynos_pm_add_dev_to_genpd(&s5p_device_fimd0, &exynos4_pd_lcd0); |