aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-s5pv210/clock.c
diff options
context:
space:
mode:
authorRajeshwari Shinde <rajeshwari.s@samsung.com>2011-10-24 11:05:58 -0400
committerKukjin Kim <kgene.kim@samsung.com>2011-12-22 20:09:16 -0500
commita361d10a2b490812b051433b1aad5b4351372597 (patch)
tree7132392c01d78d275d12313056803e15e97c5f6b /arch/arm/mach-s5pv210/clock.c
parenta60879e7ca17ea41bacd57e3cb2b56e48135f7a3 (diff)
ARM: SAMSUNG: Add lookup of sdhci-s3c clocks using generic names
Add support for lookup of sdhci-s3c controller clocks using generic names for s3c2416, s3c64xx, s5pc100, s5pv210 and exynos4 SoC's. Signed-off-by: Rajeshwari Shinde <rajeshwari.s@samsung.com> [kgene.kim@samsung.com: fixed trailing whitespace] Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'arch/arm/mach-s5pv210/clock.c')
-rw-r--r--arch/arm/mach-s5pv210/clock.c167
1 files changed, 103 insertions, 64 deletions
diff --git a/arch/arm/mach-s5pv210/clock.c b/arch/arm/mach-s5pv210/clock.c
index 43a045d354ec..dc4586b2b322 100644
--- a/arch/arm/mach-s5pv210/clock.c
+++ b/arch/arm/mach-s5pv210/clock.c
@@ -399,30 +399,6 @@ static struct clk init_clocks_off[] = {
399 .enable = s5pv210_clk_ip1_ctrl, 399 .enable = s5pv210_clk_ip1_ctrl,
400 .ctrlbit = (1<<25), 400 .ctrlbit = (1<<25),
401 }, { 401 }, {
402 .name = "hsmmc",
403 .devname = "s3c-sdhci.0",
404 .parent = &clk_hclk_psys.clk,
405 .enable = s5pv210_clk_ip2_ctrl,
406 .ctrlbit = (1<<16),
407 }, {
408 .name = "hsmmc",
409 .devname = "s3c-sdhci.1",
410 .parent = &clk_hclk_psys.clk,
411 .enable = s5pv210_clk_ip2_ctrl,
412 .ctrlbit = (1<<17),
413 }, {
414 .name = "hsmmc",
415 .devname = "s3c-sdhci.2",
416 .parent = &clk_hclk_psys.clk,
417 .enable = s5pv210_clk_ip2_ctrl,
418 .ctrlbit = (1<<18),
419 }, {
420 .name = "hsmmc",
421 .devname = "s3c-sdhci.3",
422 .parent = &clk_hclk_psys.clk,
423 .enable = s5pv210_clk_ip2_ctrl,
424 .ctrlbit = (1<<19),
425 }, {
426 .name = "systimer", 402 .name = "systimer",
427 .parent = &clk_pclk_psys.clk, 403 .parent = &clk_pclk_psys.clk,
428 .enable = s5pv210_clk_ip3_ctrl, 404 .enable = s5pv210_clk_ip3_ctrl,
@@ -559,6 +535,38 @@ static struct clk init_clocks[] = {
559 }, 535 },
560}; 536};
561 537
538static struct clk clk_hsmmc0 = {
539 .name = "hsmmc",
540 .devname = "s3c-sdhci.0",
541 .parent = &clk_hclk_psys.clk,
542 .enable = s5pv210_clk_ip2_ctrl,
543 .ctrlbit = (1<<16),
544};
545
546static struct clk clk_hsmmc1 = {
547 .name = "hsmmc",
548 .devname = "s3c-sdhci.1",
549 .parent = &clk_hclk_psys.clk,
550 .enable = s5pv210_clk_ip2_ctrl,
551 .ctrlbit = (1<<17),
552};
553
554static struct clk clk_hsmmc2 = {
555 .name = "hsmmc",
556 .devname = "s3c-sdhci.2",
557 .parent = &clk_hclk_psys.clk,
558 .enable = s5pv210_clk_ip2_ctrl,
559 .ctrlbit = (1<<18),
560};
561
562static struct clk clk_hsmmc3 = {
563 .name = "hsmmc",
564 .devname = "s3c-sdhci.3",
565 .parent = &clk_hclk_psys.clk,
566 .enable = s5pv210_clk_ip2_ctrl,
567 .ctrlbit = (1<<19),
568};
569
562static struct clk *clkset_uart_list[] = { 570static struct clk *clkset_uart_list[] = {
563 [6] = &clk_mout_mpll.clk, 571 [6] = &clk_mout_mpll.clk,
564 [7] = &clk_mout_epll.clk, 572 [7] = &clk_mout_epll.clk,
@@ -866,46 +874,6 @@ static struct clksrc_clk clksrcs[] = {
866 .reg_div = { .reg = S5P_CLK_DIV1, .shift = 20, .size = 4 }, 874 .reg_div = { .reg = S5P_CLK_DIV1, .shift = 20, .size = 4 },
867 }, { 875 }, {
868 .clk = { 876 .clk = {
869 .name = "sclk_mmc",
870 .devname = "s3c-sdhci.0",
871 .enable = s5pv210_clk_mask0_ctrl,
872 .ctrlbit = (1 << 8),
873 },
874 .sources = &clkset_group2,
875 .reg_src = { .reg = S5P_CLK_SRC4, .shift = 0, .size = 4 },
876 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 0, .size = 4 },
877 }, {
878 .clk = {
879 .name = "sclk_mmc",
880 .devname = "s3c-sdhci.1",
881 .enable = s5pv210_clk_mask0_ctrl,
882 .ctrlbit = (1 << 9),
883 },
884 .sources = &clkset_group2,
885 .reg_src = { .reg = S5P_CLK_SRC4, .shift = 4, .size = 4 },
886 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 4, .size = 4 },
887 }, {
888 .clk = {
889 .name = "sclk_mmc",
890 .devname = "s3c-sdhci.2",
891 .enable = s5pv210_clk_mask0_ctrl,
892 .ctrlbit = (1 << 10),
893 },
894 .sources = &clkset_group2,
895 .reg_src = { .reg = S5P_CLK_SRC4, .shift = 8, .size = 4 },
896 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 8, .size = 4 },
897 }, {
898 .clk = {
899 .name = "sclk_mmc",
900 .devname = "s3c-sdhci.3",
901 .enable = s5pv210_clk_mask0_ctrl,
902 .ctrlbit = (1 << 11),
903 },
904 .sources = &clkset_group2,
905 .reg_src = { .reg = S5P_CLK_SRC4, .shift = 12, .size = 4 },
906 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 12, .size = 4 },
907 }, {
908 .clk = {
909 .name = "sclk_mfc", 877 .name = "sclk_mfc",
910 .devname = "s5p-mfc", 878 .devname = "s5p-mfc",
911 .enable = s5pv210_clk_ip0_ctrl, 879 .enable = s5pv210_clk_ip0_ctrl,
@@ -1030,11 +998,70 @@ static struct clksrc_clk clk_sclk_uart3 = {
1030 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 28, .size = 4 }, 998 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 28, .size = 4 },
1031}; 999};
1032 1000
1001static struct clksrc_clk clk_sclk_mmc0 = {
1002 .clk = {
1003 .name = "sclk_mmc",
1004 .devname = "s3c-sdhci.0",
1005 .enable = s5pv210_clk_mask0_ctrl,
1006 .ctrlbit = (1 << 8),
1007 },
1008 .sources = &clkset_group2,
1009 .reg_src = { .reg = S5P_CLK_SRC4, .shift = 0, .size = 4 },
1010 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 0, .size = 4 },
1011};
1012
1013static struct clksrc_clk clk_sclk_mmc1 = {
1014 .clk = {
1015 .name = "sclk_mmc",
1016 .devname = "s3c-sdhci.1",
1017 .enable = s5pv210_clk_mask0_ctrl,
1018 .ctrlbit = (1 << 9),
1019 },
1020 .sources = &clkset_group2,
1021 .reg_src = { .reg = S5P_CLK_SRC4, .shift = 4, .size = 4 },
1022 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 4, .size = 4 },
1023};
1024
1025static struct clksrc_clk clk_sclk_mmc2 = {
1026 .clk = {
1027 .name = "sclk_mmc",
1028 .devname = "s3c-sdhci.2",
1029 .enable = s5pv210_clk_mask0_ctrl,
1030 .ctrlbit = (1 << 10),
1031 },
1032 .sources = &clkset_group2,
1033 .reg_src = { .reg = S5P_CLK_SRC4, .shift = 8, .size = 4 },
1034 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 8, .size = 4 },
1035};
1036
1037static struct clksrc_clk clk_sclk_mmc3 = {
1038 .clk = {
1039 .name = "sclk_mmc",
1040 .devname = "s3c-sdhci.3",
1041 .enable = s5pv210_clk_mask0_ctrl,
1042 .ctrlbit = (1 << 11),
1043 },
1044 .sources = &clkset_group2,
1045 .reg_src = { .reg = S5P_CLK_SRC4, .shift = 12, .size = 4 },
1046 .reg_div = { .reg = S5P_CLK_DIV4, .shift = 12, .size = 4 },
1047};
1048
1033static struct clksrc_clk *clksrc_cdev[] = { 1049static struct clksrc_clk *clksrc_cdev[] = {
1034 &clk_sclk_uart0, 1050 &clk_sclk_uart0,
1035 &clk_sclk_uart1, 1051 &clk_sclk_uart1,
1036 &clk_sclk_uart2, 1052 &clk_sclk_uart2,
1037 &clk_sclk_uart3, 1053 &clk_sclk_uart3,
1054 &clk_sclk_mmc0,
1055 &clk_sclk_mmc1,
1056 &clk_sclk_mmc2,
1057 &clk_sclk_mmc3,
1058};
1059
1060static struct clk *clk_cdev[] = {
1061 &clk_hsmmc0,
1062 &clk_hsmmc1,
1063 &clk_hsmmc2,
1064 &clk_hsmmc3,
1038}; 1065};
1039 1066
1040/* Clock initialisation code */ 1067/* Clock initialisation code */
@@ -1282,6 +1309,14 @@ static struct clk_lookup s5pv210_clk_lookup[] = {
1282 CLKDEV_INIT("s5pv210-uart.1", "clk_uart_baud1", &clk_sclk_uart1.clk), 1309 CLKDEV_INIT("s5pv210-uart.1", "clk_uart_baud1", &clk_sclk_uart1.clk),
1283 CLKDEV_INIT("s5pv210-uart.2", "clk_uart_baud1", &clk_sclk_uart2.clk), 1310 CLKDEV_INIT("s5pv210-uart.2", "clk_uart_baud1", &clk_sclk_uart2.clk),
1284 CLKDEV_INIT("s5pv210-uart.3", "clk_uart_baud1", &clk_sclk_uart3.clk), 1311 CLKDEV_INIT("s5pv210-uart.3", "clk_uart_baud1", &clk_sclk_uart3.clk),
1312 CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.0", &clk_hsmmc0),
1313 CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.0", &clk_hsmmc1),
1314 CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.0", &clk_hsmmc2),
1315 CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.0", &clk_hsmmc3),
1316 CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk),
1317 CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk),
1318 CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk),
1319 CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &clk_sclk_mmc3.clk),
1285}; 1320};
1286 1321
1287void __init s5pv210_register_clocks(void) 1322void __init s5pv210_register_clocks(void)
@@ -1306,6 +1341,10 @@ void __init s5pv210_register_clocks(void)
1306 s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); 1341 s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
1307 clkdev_add_table(s5pv210_clk_lookup, ARRAY_SIZE(s5pv210_clk_lookup)); 1342 clkdev_add_table(s5pv210_clk_lookup, ARRAY_SIZE(s5pv210_clk_lookup));
1308 1343
1344 s3c24xx_register_clocks(clk_cdev, ARRAY_SIZE(clk_cdev));
1345 for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++)
1346 s3c_disable_clocks(clk_cdev[ptr], 1);
1347
1309 s3c24xx_register_clock(&dummy_apb_pclk); 1348 s3c24xx_register_clock(&dummy_apb_pclk);
1310 s3c_pwmclk_init(); 1349 s3c_pwmclk_init();
1311} 1350}