|
@@ -74,16 +74,6 @@ static int exynos_pd_power_off(struct generic_pm_domain *domain)
|
|
|
return exynos_pd_power(domain, false);
|
|
|
}
|
|
|
|
|
|
-#define EXYNOS_GPD(PD, BASE, NAME) \
|
|
|
-static struct exynos_pm_domain PD = { \
|
|
|
- .base = (void __iomem *)BASE, \
|
|
|
- .name = NAME, \
|
|
|
- .pd = { \
|
|
|
- .power_off = exynos_pd_power_off, \
|
|
|
- .power_on = exynos_pd_power_on, \
|
|
|
- }, \
|
|
|
-}
|
|
|
-
|
|
|
static void exynos_add_device_to_domain(struct exynos_pm_domain *pd,
|
|
|
struct device *dev)
|
|
|
{
|
|
@@ -156,7 +146,7 @@ static struct notifier_block platform_nb = {
|
|
|
.notifier_call = exynos_pm_notifier_call,
|
|
|
};
|
|
|
|
|
|
-static __init int exynos_pm_dt_parse_domains(void)
|
|
|
+static __init int exynos4_pm_init_power_domain(void)
|
|
|
{
|
|
|
struct platform_device *pdev;
|
|
|
struct device_node *np;
|
|
@@ -192,88 +182,6 @@ static __init int exynos_pm_dt_parse_domains(void)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
-
|
|
|
-static __init __maybe_unused void exynos_pm_add_dev_to_genpd(struct platform_device *pdev,
|
|
|
- struct exynos_pm_domain *pd)
|
|
|
-{
|
|
|
- if (pdev->dev.bus) {
|
|
|
- if (!pm_genpd_add_device(&pd->pd, &pdev->dev))
|
|
|
- pm_genpd_dev_need_restore(&pdev->dev, true);
|
|
|
- else
|
|
|
- pr_info("%s: error in adding %s device to %s power"
|
|
|
- "domain\n", __func__, dev_name(&pdev->dev),
|
|
|
- pd->name);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-EXYNOS_GPD(exynos4_pd_mfc, S5P_PMU_MFC_CONF, "pd-mfc");
|
|
|
-EXYNOS_GPD(exynos4_pd_g3d, S5P_PMU_G3D_CONF, "pd-g3d");
|
|
|
-EXYNOS_GPD(exynos4_pd_lcd0, S5P_PMU_LCD0_CONF, "pd-lcd0");
|
|
|
-EXYNOS_GPD(exynos4_pd_lcd1, S5P_PMU_LCD1_CONF, "pd-lcd1");
|
|
|
-EXYNOS_GPD(exynos4_pd_tv, S5P_PMU_TV_CONF, "pd-tv");
|
|
|
-EXYNOS_GPD(exynos4_pd_cam, S5P_PMU_CAM_CONF, "pd-cam");
|
|
|
-EXYNOS_GPD(exynos4_pd_gps, S5P_PMU_GPS_CONF, "pd-gps");
|
|
|
-
|
|
|
-static struct exynos_pm_domain *exynos4_pm_domains[] = {
|
|
|
- &exynos4_pd_mfc,
|
|
|
- &exynos4_pd_g3d,
|
|
|
- &exynos4_pd_lcd0,
|
|
|
- &exynos4_pd_lcd1,
|
|
|
- &exynos4_pd_tv,
|
|
|
- &exynos4_pd_cam,
|
|
|
- &exynos4_pd_gps,
|
|
|
-};
|
|
|
-
|
|
|
-static __init int exynos4_pm_init_power_domain(void)
|
|
|
-{
|
|
|
- int idx;
|
|
|
-
|
|
|
- if (of_have_populated_dt())
|
|
|
- return exynos_pm_dt_parse_domains();
|
|
|
-
|
|
|
- for (idx = 0; idx < ARRAY_SIZE(exynos4_pm_domains); idx++) {
|
|
|
- struct exynos_pm_domain *pd = exynos4_pm_domains[idx];
|
|
|
- int on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN;
|
|
|
-
|
|
|
- pm_genpd_init(&pd->pd, NULL, !on);
|
|
|
- }
|
|
|
-
|
|
|
-#ifdef CONFIG_S5P_DEV_FIMD0
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_fimd0, &exynos4_pd_lcd0);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_TV
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_hdmi, &exynos4_pd_tv);
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_mixer, &exynos4_pd_tv);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_MFC
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_mfc, &exynos4_pd_mfc);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_FIMC0
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_fimc0, &exynos4_pd_cam);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_FIMC1
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_fimc1, &exynos4_pd_cam);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_FIMC2
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_fimc2, &exynos4_pd_cam);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_FIMC3
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_fimc3, &exynos4_pd_cam);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_CSIS0
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_mipi_csis0, &exynos4_pd_cam);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_CSIS1
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_mipi_csis1, &exynos4_pd_cam);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_G2D
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_g2d, &exynos4_pd_lcd0);
|
|
|
-#endif
|
|
|
-#ifdef CONFIG_S5P_DEV_JPEG
|
|
|
- exynos_pm_add_dev_to_genpd(&s5p_device_jpeg, &exynos4_pd_cam);
|
|
|
-#endif
|
|
|
- return 0;
|
|
|
-}
|
|
|
arch_initcall(exynos4_pm_init_power_domain);
|
|
|
|
|
|
int __init exynos_pm_late_initcall(void)
|