diff options
author | Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> | 2016-05-24 09:19:15 -0400 |
---|---|---|
committer | Sylwester Nawrocki <s.nawrocki@samsung.com> | 2016-06-02 05:18:19 -0400 |
commit | 0c0cd59a4c31aa0dccb49450fca5e36d1759f1ca (patch) | |
tree | 58c79d19af2fbc45ad7aa793da8f6b98a461104f | |
parent | f4f4dd0c45676fa3fc7683046f3acc862a088fed (diff) |
clk: samsung: exynos5433: prepare for adding CPU clocks
Open-code samsung_cmu_register_one() calls for CMU_APOLLO and
CMU_ATLAS setup code as a preparation for adding CPU clocks
support for Exynos5433.
There should be no functional change resulting from this patch.
Cc: Kukjin Kim <kgene@kernel.org>
CC: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
-rw-r--r-- | drivers/clk/samsung/clk-exynos5433.c | 85 | ||||
-rw-r--r-- | drivers/clk/samsung/clk.c | 12 | ||||
-rw-r--r-- | drivers/clk/samsung/clk.h | 4 |
3 files changed, 65 insertions, 36 deletions
diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c index 5993bd5ac6ba..70e1df6fc825 100644 --- a/drivers/clk/samsung/clk-exynos5433.c +++ b/drivers/clk/samsung/clk-exynos5433.c | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | #include <linux/clk-provider.h> | 12 | #include <linux/clk-provider.h> |
13 | #include <linux/of.h> | 13 | #include <linux/of.h> |
14 | #include <linux/of_address.h> | ||
14 | 15 | ||
15 | #include <dt-bindings/clock/exynos5433.h> | 16 | #include <dt-bindings/clock/exynos5433.h> |
16 | 17 | ||
@@ -3594,23 +3595,35 @@ static const struct samsung_gate_clock apollo_gate_clks[] __initconst = { | |||
3594 | CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0), | 3595 | CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0), |
3595 | }; | 3596 | }; |
3596 | 3597 | ||
3597 | static const struct samsung_cmu_info apollo_cmu_info __initconst = { | ||
3598 | .pll_clks = apollo_pll_clks, | ||
3599 | .nr_pll_clks = ARRAY_SIZE(apollo_pll_clks), | ||
3600 | .mux_clks = apollo_mux_clks, | ||
3601 | .nr_mux_clks = ARRAY_SIZE(apollo_mux_clks), | ||
3602 | .div_clks = apollo_div_clks, | ||
3603 | .nr_div_clks = ARRAY_SIZE(apollo_div_clks), | ||
3604 | .gate_clks = apollo_gate_clks, | ||
3605 | .nr_gate_clks = ARRAY_SIZE(apollo_gate_clks), | ||
3606 | .nr_clk_ids = APOLLO_NR_CLK, | ||
3607 | .clk_regs = apollo_clk_regs, | ||
3608 | .nr_clk_regs = ARRAY_SIZE(apollo_clk_regs), | ||
3609 | }; | ||
3610 | |||
3611 | static void __init exynos5433_cmu_apollo_init(struct device_node *np) | 3598 | static void __init exynos5433_cmu_apollo_init(struct device_node *np) |
3612 | { | 3599 | { |
3613 | samsung_cmu_register_one(np, &apollo_cmu_info); | 3600 | void __iomem *reg_base; |
3601 | struct samsung_clk_provider *ctx; | ||
3602 | |||
3603 | reg_base = of_iomap(np, 0); | ||
3604 | if (!reg_base) { | ||
3605 | panic("%s: failed to map registers\n", __func__); | ||
3606 | return; | ||
3607 | } | ||
3608 | |||
3609 | ctx = samsung_clk_init(np, reg_base, APOLLO_NR_CLK); | ||
3610 | if (!ctx) { | ||
3611 | panic("%s: unable to allocate ctx\n", __func__); | ||
3612 | return; | ||
3613 | } | ||
3614 | |||
3615 | samsung_clk_register_pll(ctx, apollo_pll_clks, | ||
3616 | ARRAY_SIZE(apollo_pll_clks), reg_base); | ||
3617 | samsung_clk_register_mux(ctx, apollo_mux_clks, | ||
3618 | ARRAY_SIZE(apollo_mux_clks)); | ||
3619 | samsung_clk_register_div(ctx, apollo_div_clks, | ||
3620 | ARRAY_SIZE(apollo_div_clks)); | ||
3621 | samsung_clk_register_gate(ctx, apollo_gate_clks, | ||
3622 | ARRAY_SIZE(apollo_gate_clks)); | ||
3623 | samsung_clk_sleep_init(reg_base, apollo_clk_regs, | ||
3624 | ARRAY_SIZE(apollo_clk_regs)); | ||
3625 | |||
3626 | samsung_clk_of_add_provider(np, ctx); | ||
3614 | } | 3627 | } |
3615 | CLK_OF_DECLARE(exynos5433_cmu_apollo, "samsung,exynos5433-cmu-apollo", | 3628 | CLK_OF_DECLARE(exynos5433_cmu_apollo, "samsung,exynos5433-cmu-apollo", |
3616 | exynos5433_cmu_apollo_init); | 3629 | exynos5433_cmu_apollo_init); |
@@ -3806,23 +3819,35 @@ static const struct samsung_gate_clock atlas_gate_clks[] __initconst = { | |||
3806 | CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0), | 3819 | CLK_IGNORE_UNUSED | CLK_SET_RATE_PARENT, 0), |
3807 | }; | 3820 | }; |
3808 | 3821 | ||
3809 | static const struct samsung_cmu_info atlas_cmu_info __initconst = { | ||
3810 | .pll_clks = atlas_pll_clks, | ||
3811 | .nr_pll_clks = ARRAY_SIZE(atlas_pll_clks), | ||
3812 | .mux_clks = atlas_mux_clks, | ||
3813 | .nr_mux_clks = ARRAY_SIZE(atlas_mux_clks), | ||
3814 | .div_clks = atlas_div_clks, | ||
3815 | .nr_div_clks = ARRAY_SIZE(atlas_div_clks), | ||
3816 | .gate_clks = atlas_gate_clks, | ||
3817 | .nr_gate_clks = ARRAY_SIZE(atlas_gate_clks), | ||
3818 | .nr_clk_ids = ATLAS_NR_CLK, | ||
3819 | .clk_regs = atlas_clk_regs, | ||
3820 | .nr_clk_regs = ARRAY_SIZE(atlas_clk_regs), | ||
3821 | }; | ||
3822 | |||
3823 | static void __init exynos5433_cmu_atlas_init(struct device_node *np) | 3822 | static void __init exynos5433_cmu_atlas_init(struct device_node *np) |
3824 | { | 3823 | { |
3825 | samsung_cmu_register_one(np, &atlas_cmu_info); | 3824 | void __iomem *reg_base; |
3825 | struct samsung_clk_provider *ctx; | ||
3826 | |||
3827 | reg_base = of_iomap(np, 0); | ||
3828 | if (!reg_base) { | ||
3829 | panic("%s: failed to map registers\n", __func__); | ||
3830 | return; | ||
3831 | } | ||
3832 | |||
3833 | ctx = samsung_clk_init(np, reg_base, ATLAS_NR_CLK); | ||
3834 | if (!ctx) { | ||
3835 | panic("%s: unable to allocate ctx\n", __func__); | ||
3836 | return; | ||
3837 | } | ||
3838 | |||
3839 | samsung_clk_register_pll(ctx, atlas_pll_clks, | ||
3840 | ARRAY_SIZE(atlas_pll_clks), reg_base); | ||
3841 | samsung_clk_register_mux(ctx, atlas_mux_clks, | ||
3842 | ARRAY_SIZE(atlas_mux_clks)); | ||
3843 | samsung_clk_register_div(ctx, atlas_div_clks, | ||
3844 | ARRAY_SIZE(atlas_div_clks)); | ||
3845 | samsung_clk_register_gate(ctx, atlas_gate_clks, | ||
3846 | ARRAY_SIZE(atlas_gate_clks)); | ||
3847 | samsung_clk_sleep_init(reg_base, atlas_clk_regs, | ||
3848 | ARRAY_SIZE(atlas_clk_regs)); | ||
3849 | |||
3850 | samsung_clk_of_add_provider(np, ctx); | ||
3826 | } | 3851 | } |
3827 | CLK_OF_DECLARE(exynos5433_cmu_atlas, "samsung,exynos5433-cmu-atlas", | 3852 | CLK_OF_DECLARE(exynos5433_cmu_atlas, "samsung,exynos5433-cmu-atlas", |
3828 | exynos5433_cmu_atlas_init); | 3853 | exynos5433_cmu_atlas_init); |
diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c index e4d14589cc4a..b7d87d6db9dc 100644 --- a/drivers/clk/samsung/clk.c +++ b/drivers/clk/samsung/clk.c | |||
@@ -346,9 +346,9 @@ static struct syscore_ops samsung_clk_syscore_ops = { | |||
346 | .resume = samsung_clk_resume, | 346 | .resume = samsung_clk_resume, |
347 | }; | 347 | }; |
348 | 348 | ||
349 | static void samsung_clk_sleep_init(void __iomem *reg_base, | 349 | void samsung_clk_sleep_init(void __iomem *reg_base, |
350 | const unsigned long *rdump, | 350 | const unsigned long *rdump, |
351 | unsigned long nr_rdump) | 351 | unsigned long nr_rdump) |
352 | { | 352 | { |
353 | struct samsung_clock_reg_cache *reg_cache; | 353 | struct samsung_clock_reg_cache *reg_cache; |
354 | 354 | ||
@@ -370,9 +370,9 @@ static void samsung_clk_sleep_init(void __iomem *reg_base, | |||
370 | } | 370 | } |
371 | 371 | ||
372 | #else | 372 | #else |
373 | static void samsung_clk_sleep_init(void __iomem *reg_base, | 373 | void samsung_clk_sleep_init(void __iomem *reg_base, |
374 | const unsigned long *rdump, | 374 | const unsigned long *rdump, |
375 | unsigned long nr_rdump) {} | 375 | unsigned long nr_rdump) {} |
376 | #endif | 376 | #endif |
377 | 377 | ||
378 | /* | 378 | /* |
diff --git a/drivers/clk/samsung/clk.h b/drivers/clk/samsung/clk.h index 77d4657a95c5..da3bdebabf1e 100644 --- a/drivers/clk/samsung/clk.h +++ b/drivers/clk/samsung/clk.h | |||
@@ -399,6 +399,10 @@ extern struct samsung_clk_provider __init *samsung_cmu_register_one( | |||
399 | 399 | ||
400 | extern unsigned long _get_rate(const char *clk_name); | 400 | extern unsigned long _get_rate(const char *clk_name); |
401 | 401 | ||
402 | extern void samsung_clk_sleep_init(void __iomem *reg_base, | ||
403 | const unsigned long *rdump, | ||
404 | unsigned long nr_rdump); | ||
405 | |||
402 | extern void samsung_clk_save(void __iomem *base, | 406 | extern void samsung_clk_save(void __iomem *base, |
403 | struct samsung_clk_reg_dump *rd, | 407 | struct samsung_clk_reg_dump *rd, |
404 | unsigned int num_regs); | 408 | unsigned int num_regs); |