aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/clk/samsung/clk-exynos4.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c
index c6796aff2421..bf5e5e1e99d9 100644
--- a/drivers/clk/samsung/clk-exynos4.c
+++ b/drivers/clk/samsung/clk-exynos4.c
@@ -1022,6 +1022,46 @@ static struct samsung_pll_rate_table exynos4210_vpll_rates[] __initdata = {
1022 { /* sentinel */ } 1022 { /* sentinel */ }
1023}; 1023};
1024 1024
1025static struct samsung_pll_rate_table exynos4x12_apll_rates[] __initdata = {
1026 PLL_35XX_RATE(1500000000, 250, 4, 0),
1027 PLL_35XX_RATE(1400000000, 175, 3, 0),
1028 PLL_35XX_RATE(1300000000, 325, 6, 0),
1029 PLL_35XX_RATE(1200000000, 200, 4, 0),
1030 PLL_35XX_RATE(1100000000, 275, 6, 0),
1031 PLL_35XX_RATE(1000000000, 125, 3, 0),
1032 PLL_35XX_RATE( 900000000, 150, 4, 0),
1033 PLL_35XX_RATE( 800000000, 100, 3, 0),
1034 PLL_35XX_RATE( 700000000, 175, 3, 1),
1035 PLL_35XX_RATE( 600000000, 200, 4, 1),
1036 PLL_35XX_RATE( 500000000, 125, 3, 1),
1037 PLL_35XX_RATE( 400000000, 100, 3, 1),
1038 PLL_35XX_RATE( 300000000, 200, 4, 2),
1039 PLL_35XX_RATE( 200000000, 100, 3, 2),
1040 { /* sentinel */ }
1041};
1042
1043static struct samsung_pll_rate_table exynos4x12_epll_rates[] __initdata = {
1044 PLL_36XX_RATE(192000000, 48, 3, 1, 0),
1045 PLL_36XX_RATE(180633605, 45, 3, 1, 10381),
1046 PLL_36XX_RATE(180000000, 45, 3, 1, 0),
1047 PLL_36XX_RATE( 73727996, 73, 3, 3, 47710),
1048 PLL_36XX_RATE( 67737602, 90, 4, 3, 20762),
1049 PLL_36XX_RATE( 49151992, 49, 3, 3, 9961),
1050 PLL_36XX_RATE( 45158401, 45, 3, 3, 10381),
1051 { /* sentinel */ }
1052};
1053
1054static struct samsung_pll_rate_table exynos4x12_vpll_rates[] __initdata = {
1055 PLL_36XX_RATE(533000000, 133, 3, 1, 16384),
1056 PLL_36XX_RATE(440000000, 110, 3, 1, 0),
1057 PLL_36XX_RATE(350000000, 175, 3, 2, 0),
1058 PLL_36XX_RATE(266000000, 133, 3, 2, 0),
1059 PLL_36XX_RATE(160000000, 160, 3, 3, 0),
1060 PLL_36XX_RATE(106031250, 53, 3, 2, 1024),
1061 PLL_36XX_RATE( 53015625, 53, 3, 3, 1024),
1062 { /* sentinel */ }
1063};
1064
1025static struct samsung_pll_clock exynos4210_plls[nr_plls] __initdata = { 1065static struct samsung_pll_clock exynos4210_plls[nr_plls] __initdata = {
1026 [apll] = PLL_A(pll_4508, fout_apll, "fout_apll", "fin_pll", APLL_LOCK, 1066 [apll] = PLL_A(pll_4508, fout_apll, "fout_apll", "fin_pll", APLL_LOCK,
1027 APLL_CON0, "fout_apll", NULL), 1067 APLL_CON0, "fout_apll", NULL),
@@ -1086,6 +1126,15 @@ static void __init exynos4_clk_init(struct device_node *np,
1086 samsung_clk_register_pll(exynos4210_plls, 1126 samsung_clk_register_pll(exynos4210_plls,
1087 ARRAY_SIZE(exynos4210_plls), reg_base); 1127 ARRAY_SIZE(exynos4210_plls), reg_base);
1088 } else { 1128 } else {
1129 if (_get_rate("fin_pll") == 24000000) {
1130 exynos4x12_plls[apll].rate_table =
1131 exynos4x12_apll_rates;
1132 exynos4x12_plls[epll].rate_table =
1133 exynos4x12_epll_rates;
1134 exynos4x12_plls[vpll].rate_table =
1135 exynos4x12_vpll_rates;
1136 }
1137
1089 samsung_clk_register_pll(exynos4x12_plls, 1138 samsung_clk_register_pll(exynos4x12_plls,
1090 ARRAY_SIZE(exynos4x12_plls), reg_base); 1139 ARRAY_SIZE(exynos4x12_plls), reg_base);
1091 } 1140 }