aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Figa <t.figa@samsung.com>2013-08-26 13:09:09 -0400
committerMike Turquette <mturquette@linaro.org>2013-09-06 16:33:57 -0400
commit5fadfc7ed37efe272983639f0d2f8c801303e796 (patch)
tree351d9e5309abb26879efb82c4e8da1c56e7ecb47
parent4f7641f588dcc5f614a2dae18e614da7abd13604 (diff)
clk: samsung: exynos4: Register PLL rate tables for Exynos4210
This patch adds rate tables for PLLs that can be reconfigured at runtime for Exynos4210 SoCs. Provided tables contain PLL coefficients for input clock of 24 MHz and so are registered only in this case. MPLL does not need runtime reconfiguration and so table for it is not provided. Signed-off-by: Tomasz Figa <t.figa@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mike Turquette <mturquette@linaro.org>
-rw-r--r--drivers/clk/samsung/clk-exynos4.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
index 7b88f96739bb..c6796aff2421 100644
--- a/drivers/clk/samsung/clk-exynos4.c
+++ b/drivers/clk/samsung/clk-exynos4.c
@@ -988,6 +988,40 @@ static struct of_device_id ext_clk_match[] __initdata = {
988 {}, 988 {},
989}; 989};
990 990
991/* PLLs PMS values */
992static struct samsung_pll_rate_table exynos4210_apll_rates[] __initdata = {
993 PLL_45XX_RATE(1200000000, 150, 3, 1, 28),
994 PLL_45XX_RATE(1000000000, 250, 6, 1, 28),
995 PLL_45XX_RATE( 800000000, 200, 6, 1, 28),
996 PLL_45XX_RATE( 666857142, 389, 14, 1, 13),
997 PLL_45XX_RATE( 600000000, 100, 4, 1, 13),
998 PLL_45XX_RATE( 533000000, 533, 24, 1, 5),
999 PLL_45XX_RATE( 500000000, 250, 6, 2, 28),
1000 PLL_45XX_RATE( 400000000, 200, 6, 2, 28),
1001 PLL_45XX_RATE( 200000000, 200, 6, 3, 28),
1002 { /* sentinel */ }
1003};
1004
1005static struct samsung_pll_rate_table exynos4210_epll_rates[] __initdata = {
1006 PLL_4600_RATE(192000000, 48, 3, 1, 0, 0),
1007 PLL_4600_RATE(180633605, 45, 3, 1, 10381, 0),
1008 PLL_4600_RATE(180000000, 45, 3, 1, 0, 0),
1009 PLL_4600_RATE( 73727996, 73, 3, 3, 47710, 1),
1010 PLL_4600_RATE( 67737602, 90, 4, 3, 20762, 1),
1011 PLL_4600_RATE( 49151992, 49, 3, 3, 9961, 0),
1012 PLL_4600_RATE( 45158401, 45, 3, 3, 10381, 0),
1013 { /* sentinel */ }
1014};
1015
1016static struct samsung_pll_rate_table exynos4210_vpll_rates[] __initdata = {
1017 PLL_4650_RATE(360000000, 44, 3, 0, 1024, 0, 14, 0),
1018 PLL_4650_RATE(324000000, 53, 2, 1, 1024, 1, 1, 1),
1019 PLL_4650_RATE(259617187, 63, 3, 1, 1950, 0, 20, 1),
1020 PLL_4650_RATE(110000000, 53, 3, 2, 2048, 0, 17, 0),
1021 PLL_4650_RATE( 55360351, 53, 3, 3, 2417, 0, 17, 0),
1022 { /* sentinel */ }
1023};
1024
991static struct samsung_pll_clock exynos4210_plls[nr_plls] __initdata = { 1025static struct samsung_pll_clock exynos4210_plls[nr_plls] __initdata = {
992 [apll] = PLL_A(pll_4508, fout_apll, "fout_apll", "fin_pll", APLL_LOCK, 1026 [apll] = PLL_A(pll_4508, fout_apll, "fout_apll", "fin_pll", APLL_LOCK,
993 APLL_CON0, "fout_apll", NULL), 1027 APLL_CON0, "fout_apll", NULL),
@@ -1038,6 +1072,17 @@ static void __init exynos4_clk_init(struct device_node *np,
1038 samsung_clk_register_mux(exynos4210_mux_early, 1072 samsung_clk_register_mux(exynos4210_mux_early,
1039 ARRAY_SIZE(exynos4210_mux_early)); 1073 ARRAY_SIZE(exynos4210_mux_early));
1040 1074
1075 if (_get_rate("fin_pll") == 24000000) {
1076 exynos4210_plls[apll].rate_table =
1077 exynos4210_apll_rates;
1078 exynos4210_plls[epll].rate_table =
1079 exynos4210_epll_rates;
1080 }
1081
1082 if (_get_rate("mout_vpllsrc") == 24000000)
1083 exynos4210_plls[vpll].rate_table =
1084 exynos4210_vpll_rates;
1085
1041 samsung_clk_register_pll(exynos4210_plls, 1086 samsung_clk_register_pll(exynos4210_plls,
1042 ARRAY_SIZE(exynos4210_plls), reg_base); 1087 ARRAY_SIZE(exynos4210_plls), reg_base);
1043 } else { 1088 } else {