diff options
author | Thierry Reding <treding@nvidia.com> | 2015-03-26 12:50:06 -0400 |
---|---|---|
committer | Thierry Reding <treding@nvidia.com> | 2015-04-10 10:04:21 -0400 |
commit | a84724a1c3cccd03b4ca1c8aea135095d0a6204e (patch) | |
tree | d5257b9accfc44a9eb04c415a2919da6040b63a8 /drivers/clk | |
parent | 63cc5a4da1fafedee24d8f5af67c1dd9d08f95c7 (diff) |
clk: tegra: Use generic tegra_osc_clk_init() on Tegra114
There is no reason why Tegra114 cannot use the same generic code to set
up the oscillator, clk_m and pll_ref clocks. The only effective change
that this causes is that the CLK_SET_PARENT_RATE flag is dropped, but
since these clocks are all fixed it is not needed anyway.
Signed-off-by: Thierry Reding <treding@nvidia.com>
Diffstat (limited to 'drivers/clk')
-rw-r--r-- | drivers/clk/tegra/clk-tegra114.c | 34 |
1 files changed, 3 insertions, 31 deletions
diff --git a/drivers/clk/tegra/clk-tegra114.c b/drivers/clk/tegra/clk-tegra114.c index 75d8af6213e7..8237d16b4075 100644 --- a/drivers/clk/tegra/clk-tegra114.c +++ b/drivers/clk/tegra/clk-tegra114.c | |||
@@ -940,36 +940,6 @@ static struct clk **clks; | |||
940 | static unsigned long osc_freq; | 940 | static unsigned long osc_freq; |
941 | static unsigned long pll_ref_freq; | 941 | static unsigned long pll_ref_freq; |
942 | 942 | ||
943 | static int __init tegra114_osc_clk_init(void __iomem *clk_base) | ||
944 | { | ||
945 | struct clk *clk; | ||
946 | u32 val, pll_ref_div; | ||
947 | |||
948 | val = readl_relaxed(clk_base + OSC_CTRL); | ||
949 | |||
950 | osc_freq = tegra114_input_freq[val >> OSC_CTRL_OSC_FREQ_SHIFT]; | ||
951 | if (!osc_freq) { | ||
952 | WARN_ON(1); | ||
953 | return -EINVAL; | ||
954 | } | ||
955 | |||
956 | /* clk_m */ | ||
957 | clk = clk_register_fixed_rate(NULL, "clk_m", NULL, CLK_IS_ROOT, | ||
958 | osc_freq); | ||
959 | clks[TEGRA114_CLK_CLK_M] = clk; | ||
960 | |||
961 | /* pll_ref */ | ||
962 | val = (val >> OSC_CTRL_PLL_REF_DIV_SHIFT) & 3; | ||
963 | pll_ref_div = 1 << val; | ||
964 | clk = clk_register_fixed_factor(NULL, "pll_ref", "clk_m", | ||
965 | CLK_SET_RATE_PARENT, 1, pll_ref_div); | ||
966 | clks[TEGRA114_CLK_PLL_REF] = clk; | ||
967 | |||
968 | pll_ref_freq = osc_freq / pll_ref_div; | ||
969 | |||
970 | return 0; | ||
971 | } | ||
972 | |||
973 | static void __init tegra114_fixed_clk_init(void __iomem *clk_base) | 943 | static void __init tegra114_fixed_clk_init(void __iomem *clk_base) |
974 | { | 944 | { |
975 | struct clk *clk; | 945 | struct clk *clk; |
@@ -1505,7 +1475,9 @@ static void __init tegra114_clock_init(struct device_node *np) | |||
1505 | if (!clks) | 1475 | if (!clks) |
1506 | return; | 1476 | return; |
1507 | 1477 | ||
1508 | if (tegra114_osc_clk_init(clk_base) < 0) | 1478 | if (tegra_osc_clk_init(clk_base, tegra114_clks, tegra114_input_freq, |
1479 | ARRAY_SIZE(tegra114_input_freq), 1, &osc_freq, | ||
1480 | &pll_ref_freq) < 0) | ||
1509 | return; | 1481 | return; |
1510 | 1482 | ||
1511 | tegra114_fixed_clk_init(clk_base); | 1483 | tegra114_fixed_clk_init(clk_base); |