diff options
-rw-r--r-- | drivers/clk/samsung/clk-exynos4.c | 45 |
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 */ | ||
992 | static 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 | |||
1005 | static 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 | |||
1016 | static 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 | |||
991 | static struct samsung_pll_clock exynos4210_plls[nr_plls] __initdata = { | 1025 | static 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 { |