aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-exynos/clock.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-exynos/clock.c')
-rw-r--r--arch/arm/mach-exynos/clock.c106
1 files changed, 66 insertions, 40 deletions
diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c
index 2894f0adef5c..fe1851914dac 100644
--- a/arch/arm/mach-exynos/clock.c
+++ b/arch/arm/mach-exynos/clock.c
@@ -1009,46 +1009,6 @@ static struct clksrc_clk clk_dout_mmc4 = {
1009 1009
1010static struct clksrc_clk clksrcs[] = { 1010static struct clksrc_clk clksrcs[] = {
1011 { 1011 {
1012 .clk = {
1013 .name = "uclk1",
1014 .devname = "s5pv210-uart.0",
1015 .enable = exynos4_clksrc_mask_peril0_ctrl,
1016 .ctrlbit = (1 << 0),
1017 },
1018 .sources = &clkset_group,
1019 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 0, .size = 4 },
1020 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 0, .size = 4 },
1021 }, {
1022 .clk = {
1023 .name = "uclk1",
1024 .devname = "s5pv210-uart.1",
1025 .enable = exynos4_clksrc_mask_peril0_ctrl,
1026 .ctrlbit = (1 << 4),
1027 },
1028 .sources = &clkset_group,
1029 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 4, .size = 4 },
1030 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 4, .size = 4 },
1031 }, {
1032 .clk = {
1033 .name = "uclk1",
1034 .devname = "s5pv210-uart.2",
1035 .enable = exynos4_clksrc_mask_peril0_ctrl,
1036 .ctrlbit = (1 << 8),
1037 },
1038 .sources = &clkset_group,
1039 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 8, .size = 4 },
1040 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 8, .size = 4 },
1041 }, {
1042 .clk = {
1043 .name = "uclk1",
1044 .devname = "s5pv210-uart.3",
1045 .enable = exynos4_clksrc_mask_peril0_ctrl,
1046 .ctrlbit = (1 << 12),
1047 },
1048 .sources = &clkset_group,
1049 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 12, .size = 4 },
1050 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 },
1051 }, {
1052 .clk = { 1012 .clk = {
1053 .name = "sclk_pwm", 1013 .name = "sclk_pwm",
1054 .enable = exynos4_clksrc_mask_peril0_ctrl, 1014 .enable = exynos4_clksrc_mask_peril0_ctrl,
@@ -1237,6 +1197,54 @@ static struct clksrc_clk clksrcs[] = {
1237 } 1197 }
1238}; 1198};
1239 1199
1200static struct clksrc_clk clk_sclk_uart0 = {
1201 .clk = {
1202 .name = "uclk1",
1203 .devname = "exynos4210-uart.0",
1204 .enable = exynos4_clksrc_mask_peril0_ctrl,
1205 .ctrlbit = (1 << 0),
1206 },
1207 .sources = &clkset_group,
1208 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 0, .size = 4 },
1209 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 0, .size = 4 },
1210};
1211
1212static struct clksrc_clk clk_sclk_uart1 = {
1213 .clk = {
1214 .name = "uclk1",
1215 .devname = "exynos4210-uart.1",
1216 .enable = exynos4_clksrc_mask_peril0_ctrl,
1217 .ctrlbit = (1 << 4),
1218 },
1219 .sources = &clkset_group,
1220 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 4, .size = 4 },
1221 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 4, .size = 4 },
1222};
1223
1224static struct clksrc_clk clk_sclk_uart2 = {
1225 .clk = {
1226 .name = "uclk1",
1227 .devname = "exynos4210-uart.2",
1228 .enable = exynos4_clksrc_mask_peril0_ctrl,
1229 .ctrlbit = (1 << 8),
1230 },
1231 .sources = &clkset_group,
1232 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 8, .size = 4 },
1233 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 8, .size = 4 },
1234};
1235
1236static struct clksrc_clk clk_sclk_uart3 = {
1237 .clk = {
1238 .name = "uclk1",
1239 .devname = "exynos4210-uart.3",
1240 .enable = exynos4_clksrc_mask_peril0_ctrl,
1241 .ctrlbit = (1 << 12),
1242 },
1243 .sources = &clkset_group,
1244 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 12, .size = 4 },
1245 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 },
1246};
1247
1240/* Clock initialization code */ 1248/* Clock initialization code */
1241static struct clksrc_clk *sysclks[] = { 1249static struct clksrc_clk *sysclks[] = {
1242 &clk_mout_apll, 1250 &clk_mout_apll,
@@ -1271,6 +1279,20 @@ static struct clksrc_clk *sysclks[] = {
1271 &clk_mout_mfc1, 1279 &clk_mout_mfc1,
1272}; 1280};
1273 1281
1282static struct clksrc_clk *clksrc_cdev[] = {
1283 &clk_sclk_uart0,
1284 &clk_sclk_uart1,
1285 &clk_sclk_uart2,
1286 &clk_sclk_uart3,
1287};
1288
1289static struct clk_lookup exynos4_clk_lookup[] = {
1290 CLKDEV_INIT("exynos4210-uart.0", "clk_uart_baud0", &clk_sclk_uart0.clk),
1291 CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &clk_sclk_uart1.clk),
1292 CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &clk_sclk_uart2.clk),
1293 CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &clk_sclk_uart3.clk),
1294};
1295
1274static int xtal_rate; 1296static int xtal_rate;
1275 1297
1276static unsigned long exynos4_fout_apll_get_rate(struct clk *clk) 1298static unsigned long exynos4_fout_apll_get_rate(struct clk *clk)
@@ -1478,11 +1500,15 @@ void __init exynos4_register_clocks(void)
1478 for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++) 1500 for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++)
1479 s3c_register_clksrc(sclk_tv[ptr], 1); 1501 s3c_register_clksrc(sclk_tv[ptr], 1);
1480 1502
1503 for (ptr = 0; ptr < ARRAY_SIZE(clksrc_cdev); ptr++)
1504 s3c_register_clksrc(clksrc_cdev[ptr], 1);
1505
1481 s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs)); 1506 s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs));
1482 s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks)); 1507 s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks));
1483 1508
1484 s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); 1509 s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
1485 s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); 1510 s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
1511 clkdev_add_table(exynos4_clk_lookup, ARRAY_SIZE(exynos4_clk_lookup));
1486 1512
1487 register_syscore_ops(&exynos4_clock_syscore_ops); 1513 register_syscore_ops(&exynos4_clock_syscore_ops);
1488 s3c24xx_register_clock(&dummy_apb_pclk); 1514 s3c24xx_register_clock(&dummy_apb_pclk);