Skip to content

Commit

Permalink
ARM: EXYNOS: register power domain driver from core_initcall
Browse files Browse the repository at this point in the history
SYSMMU devices are registered very early in arch_initcall, so ensure
that they can get access to power domains by registering power domain
driver from earlier initcall. This change requires dropping usage of
the platform device associated with each power domain and replacing
clock calls with respective of_clk_* equivalents.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Kukjin Kim <kgene@kernel.org>
  • Loading branch information
Marek Szyprowski authored and Kukjin Kim committed Jun 5, 2015
1 parent c4241a5 commit 2be2a3f
Showing 1 changed file with 7 additions and 18 deletions.
25 changes: 7 additions & 18 deletions arch/arm/mach-exynos/pm_domains.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,22 +121,11 @@ static int exynos_pd_power_off(struct generic_pm_domain *domain)

static __init int exynos4_pm_init_power_domain(void)
{
struct platform_device *pdev;
struct device_node *np;

for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") {
struct exynos_pm_domain *pd;
int on, i;
struct device *dev;

pdev = of_find_device_by_node(np);
if (!pdev) {
pr_err("%s: failed to find device for node %s\n",
__func__, np->name);
of_node_put(np);
continue;
}
dev = &pdev->dev;

pd = kzalloc(sizeof(*pd), GFP_KERNEL);
if (!pd) {
Expand All @@ -145,8 +134,8 @@ static __init int exynos4_pm_init_power_domain(void)
of_node_put(np);
return -ENOMEM;
}

pd->pd.name = kstrdup(dev_name(dev), GFP_KERNEL);
pd->pd.name = kstrdup_const(strrchr(np->full_name, '/') + 1,
GFP_KERNEL);
if (!pd->pd.name) {
kfree(pd);
of_node_put(np);
Expand All @@ -156,7 +145,7 @@ static __init int exynos4_pm_init_power_domain(void)
pd->name = pd->pd.name;
pd->base = of_iomap(np, 0);
if (!pd->base) {
dev_warn(&pdev->dev, "Failed to map memory\n");
pr_warn("%s: failed to map memory\n", __func__);
kfree(pd->pd.name);
kfree(pd);
of_node_put(np);
Expand All @@ -170,20 +159,20 @@ static __init int exynos4_pm_init_power_domain(void)
char clk_name[8];

snprintf(clk_name, sizeof(clk_name), "asb%d", i);
pd->asb_clk[i] = clk_get(dev, clk_name);
pd->asb_clk[i] = of_clk_get_by_name(np, clk_name);
if (IS_ERR(pd->asb_clk[i]))
break;
}

pd->oscclk = clk_get(dev, "oscclk");
pd->oscclk = of_clk_get_by_name(np, "oscclk");
if (IS_ERR(pd->oscclk))
goto no_clk;

for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) {
char clk_name[8];

snprintf(clk_name, sizeof(clk_name), "clk%d", i);
pd->clk[i] = clk_get(dev, clk_name);
pd->clk[i] = of_clk_get_by_name(np, clk_name);
if (IS_ERR(pd->clk[i]))
break;
/*
Expand Down Expand Up @@ -234,4 +223,4 @@ static __init int exynos4_pm_init_power_domain(void)

return 0;
}
arch_initcall(exynos4_pm_init_power_domain);
core_initcall(exynos4_pm_init_power_domain);

0 comments on commit 2be2a3f

Please sign in to comment.