diff options
Diffstat (limited to 'arch/arm/mach-exynos/clock.c')
-rw-r--r-- | arch/arm/mach-exynos/clock.c | 106 |
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 | ||
1010 | static struct clksrc_clk clksrcs[] = { | 1010 | static 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 | ||
1200 | static 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 | |||
1212 | static 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 | |||
1224 | static 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 | |||
1236 | static 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 */ |
1241 | static struct clksrc_clk *sysclks[] = { | 1249 | static 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 | ||
1282 | static struct clksrc_clk *clksrc_cdev[] = { | ||
1283 | &clk_sclk_uart0, | ||
1284 | &clk_sclk_uart1, | ||
1285 | &clk_sclk_uart2, | ||
1286 | &clk_sclk_uart3, | ||
1287 | }; | ||
1288 | |||
1289 | static 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 | |||
1274 | static int xtal_rate; | 1296 | static int xtal_rate; |
1275 | 1297 | ||
1276 | static unsigned long exynos4_fout_apll_get_rate(struct clk *clk) | 1298 | static 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); |