diff options
author | Rajeshwari Shinde <rajeshwari.s@samsung.com> | 2011-10-24 11:05:58 -0400 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2011-12-22 20:09:16 -0500 |
commit | a361d10a2b490812b051433b1aad5b4351372597 (patch) | |
tree | 7132392c01d78d275d12313056803e15e97c5f6b /arch | |
parent | a60879e7ca17ea41bacd57e3cb2b56e48135f7a3 (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')
-rw-r--r-- | arch/arm/mach-exynos/clock.c | 88 | ||||
-rw-r--r-- | arch/arm/mach-s3c2416/clock.c | 68 | ||||
-rw-r--r-- | arch/arm/mach-s3c64xx/clock.c | 126 | ||||
-rw-r--r-- | arch/arm/mach-s5pc100/clock.c | 130 | ||||
-rw-r--r-- | arch/arm/mach-s5pv210/clock.c | 167 | ||||
-rw-r--r-- | arch/arm/plat-s3c24xx/s3c2443-clock.c | 16 |
6 files changed, 359 insertions, 236 deletions
diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c index 7dee8694486a..5d8d4831e244 100644 --- a/arch/arm/mach-exynos/clock.c +++ b/arch/arm/mach-exynos/clock.c | |||
@@ -1156,42 +1156,6 @@ static struct clksrc_clk clksrcs[] = { | |||
1156 | .reg_div = { .reg = S5P_CLKDIV_MFC, .shift = 0, .size = 4 }, | 1156 | .reg_div = { .reg = S5P_CLKDIV_MFC, .shift = 0, .size = 4 }, |
1157 | }, { | 1157 | }, { |
1158 | .clk = { | 1158 | .clk = { |
1159 | .name = "sclk_mmc", | ||
1160 | .devname = "s3c-sdhci.0", | ||
1161 | .parent = &clk_dout_mmc0.clk, | ||
1162 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1163 | .ctrlbit = (1 << 0), | ||
1164 | }, | ||
1165 | .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 8, .size = 8 }, | ||
1166 | }, { | ||
1167 | .clk = { | ||
1168 | .name = "sclk_mmc", | ||
1169 | .devname = "s3c-sdhci.1", | ||
1170 | .parent = &clk_dout_mmc1.clk, | ||
1171 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1172 | .ctrlbit = (1 << 4), | ||
1173 | }, | ||
1174 | .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 24, .size = 8 }, | ||
1175 | }, { | ||
1176 | .clk = { | ||
1177 | .name = "sclk_mmc", | ||
1178 | .devname = "s3c-sdhci.2", | ||
1179 | .parent = &clk_dout_mmc2.clk, | ||
1180 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1181 | .ctrlbit = (1 << 8), | ||
1182 | }, | ||
1183 | .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 8, .size = 8 }, | ||
1184 | }, { | ||
1185 | .clk = { | ||
1186 | .name = "sclk_mmc", | ||
1187 | .devname = "s3c-sdhci.3", | ||
1188 | .parent = &clk_dout_mmc3.clk, | ||
1189 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1190 | .ctrlbit = (1 << 12), | ||
1191 | }, | ||
1192 | .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 24, .size = 8 }, | ||
1193 | }, { | ||
1194 | .clk = { | ||
1195 | .name = "sclk_dwmmc", | 1159 | .name = "sclk_dwmmc", |
1196 | .parent = &clk_dout_mmc4.clk, | 1160 | .parent = &clk_dout_mmc4.clk, |
1197 | .enable = exynos4_clksrc_mask_fsys_ctrl, | 1161 | .enable = exynos4_clksrc_mask_fsys_ctrl, |
@@ -1249,6 +1213,50 @@ static struct clksrc_clk clk_sclk_uart3 = { | |||
1249 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 }, | 1213 | .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 }, |
1250 | }; | 1214 | }; |
1251 | 1215 | ||
1216 | static struct clksrc_clk clk_sclk_mmc0 = { | ||
1217 | .clk = { | ||
1218 | .name = "sclk_mmc", | ||
1219 | .devname = "s3c-sdhci.0", | ||
1220 | .parent = &clk_dout_mmc0.clk, | ||
1221 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1222 | .ctrlbit = (1 << 0), | ||
1223 | }, | ||
1224 | .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 8, .size = 8 }, | ||
1225 | }; | ||
1226 | |||
1227 | static struct clksrc_clk clk_sclk_mmc1 = { | ||
1228 | .clk = { | ||
1229 | .name = "sclk_mmc", | ||
1230 | .devname = "s3c-sdhci.1", | ||
1231 | .parent = &clk_dout_mmc1.clk, | ||
1232 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1233 | .ctrlbit = (1 << 4), | ||
1234 | }, | ||
1235 | .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 24, .size = 8 }, | ||
1236 | }; | ||
1237 | |||
1238 | static struct clksrc_clk clk_sclk_mmc2 = { | ||
1239 | .clk = { | ||
1240 | .name = "sclk_mmc", | ||
1241 | .devname = "s3c-sdhci.2", | ||
1242 | .parent = &clk_dout_mmc2.clk, | ||
1243 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1244 | .ctrlbit = (1 << 8), | ||
1245 | }, | ||
1246 | .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 8, .size = 8 }, | ||
1247 | }; | ||
1248 | |||
1249 | static struct clksrc_clk clk_sclk_mmc3 = { | ||
1250 | .clk = { | ||
1251 | .name = "sclk_mmc", | ||
1252 | .devname = "s3c-sdhci.3", | ||
1253 | .parent = &clk_dout_mmc3.clk, | ||
1254 | .enable = exynos4_clksrc_mask_fsys_ctrl, | ||
1255 | .ctrlbit = (1 << 12), | ||
1256 | }, | ||
1257 | .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 24, .size = 8 }, | ||
1258 | }; | ||
1259 | |||
1252 | /* Clock initialization code */ | 1260 | /* Clock initialization code */ |
1253 | static struct clksrc_clk *sysclks[] = { | 1261 | static struct clksrc_clk *sysclks[] = { |
1254 | &clk_mout_apll, | 1262 | &clk_mout_apll, |
@@ -1293,6 +1301,10 @@ static struct clksrc_clk *clksrc_cdev[] = { | |||
1293 | &clk_sclk_uart1, | 1301 | &clk_sclk_uart1, |
1294 | &clk_sclk_uart2, | 1302 | &clk_sclk_uart2, |
1295 | &clk_sclk_uart3, | 1303 | &clk_sclk_uart3, |
1304 | &clk_sclk_mmc0, | ||
1305 | &clk_sclk_mmc1, | ||
1306 | &clk_sclk_mmc2, | ||
1307 | &clk_sclk_mmc3, | ||
1296 | }; | 1308 | }; |
1297 | 1309 | ||
1298 | static struct clk_lookup exynos4_clk_lookup[] = { | 1310 | static struct clk_lookup exynos4_clk_lookup[] = { |
@@ -1300,6 +1312,10 @@ static struct clk_lookup exynos4_clk_lookup[] = { | |||
1300 | CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &clk_sclk_uart1.clk), | 1312 | CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &clk_sclk_uart1.clk), |
1301 | CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &clk_sclk_uart2.clk), | 1313 | CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &clk_sclk_uart2.clk), |
1302 | CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &clk_sclk_uart3.clk), | 1314 | CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &clk_sclk_uart3.clk), |
1315 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk), | ||
1316 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk), | ||
1317 | CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk), | ||
1318 | CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &clk_sclk_mmc3.clk), | ||
1303 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &clk_pdma0), | 1319 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &clk_pdma0), |
1304 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &clk_pdma1), | 1320 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &clk_pdma1), |
1305 | }; | 1321 | }; |
diff --git a/arch/arm/mach-s3c2416/clock.c b/arch/arm/mach-s3c2416/clock.c index afbbe8bc21d1..59f54d1d7f8b 100644 --- a/arch/arm/mach-s3c2416/clock.c +++ b/arch/arm/mach-s3c2416/clock.c | |||
@@ -90,39 +90,38 @@ static struct clksrc_clk hsmmc_div[] = { | |||
90 | }, | 90 | }, |
91 | }; | 91 | }; |
92 | 92 | ||
93 | static struct clksrc_clk hsmmc_mux[] = { | 93 | static struct clksrc_clk hsmmc_mux0 = { |
94 | [0] = { | 94 | .clk = { |
95 | .clk = { | 95 | .name = "hsmmc-if", |
96 | .name = "hsmmc-if", | 96 | .devname = "s3c-sdhci.0", |
97 | .devname = "s3c-sdhci.0", | 97 | .ctrlbit = (1 << 6), |
98 | .ctrlbit = (1 << 6), | 98 | .enable = s3c2443_clkcon_enable_s, |
99 | .enable = s3c2443_clkcon_enable_s, | ||
100 | }, | ||
101 | .sources = &(struct clksrc_sources) { | ||
102 | .nr_sources = 2, | ||
103 | .sources = (struct clk *[]) { | ||
104 | [0] = &hsmmc_div[0].clk, | ||
105 | [1] = NULL, /* to fix */ | ||
106 | }, | ||
107 | }, | ||
108 | .reg_src = { .reg = S3C2443_CLKSRC, .size = 1, .shift = 16 }, | ||
109 | }, | 99 | }, |
110 | [1] = { | 100 | .sources = &(struct clksrc_sources) { |
111 | .clk = { | 101 | .nr_sources = 2, |
112 | .name = "hsmmc-if", | 102 | .sources = (struct clk * []) { |
113 | .devname = "s3c-sdhci.1", | 103 | [0] = &hsmmc_div[0].clk, |
114 | .ctrlbit = (1 << 12), | 104 | [1] = NULL, /* to fix */ |
115 | .enable = s3c2443_clkcon_enable_s, | ||
116 | }, | 105 | }, |
117 | .sources = &(struct clksrc_sources) { | 106 | }, |
118 | .nr_sources = 2, | 107 | .reg_src = { .reg = S3C2443_CLKSRC, .size = 1, .shift = 16 }, |
119 | .sources = (struct clk *[]) { | 108 | }; |
120 | [0] = &hsmmc_div[1].clk, | 109 | |
121 | [1] = NULL, /* to fix */ | 110 | static struct clksrc_clk hsmmc_mux1 = { |
122 | }, | 111 | .clk = { |
112 | .name = "hsmmc-if", | ||
113 | .devname = "s3c-sdhci.1", | ||
114 | .ctrlbit = (1 << 12), | ||
115 | .enable = s3c2443_clkcon_enable_s, | ||
116 | }, | ||
117 | .sources = &(struct clksrc_sources) { | ||
118 | .nr_sources = 2, | ||
119 | .sources = (struct clk * []) { | ||
120 | [0] = &hsmmc_div[1].clk, | ||
121 | [1] = NULL, /* to fix */ | ||
123 | }, | 122 | }, |
124 | .reg_src = { .reg = S3C2443_CLKSRC, .size = 1, .shift = 17 }, | ||
125 | }, | 123 | }, |
124 | .reg_src = { .reg = S3C2443_CLKSRC, .size = 1, .shift = 17 }, | ||
126 | }; | 125 | }; |
127 | 126 | ||
128 | static struct clk hsmmc0_clk = { | 127 | static struct clk hsmmc0_clk = { |
@@ -144,8 +143,14 @@ static struct clksrc_clk *clksrcs[] __initdata = { | |||
144 | &hsspi_mux, | 143 | &hsspi_mux, |
145 | &hsmmc_div[0], | 144 | &hsmmc_div[0], |
146 | &hsmmc_div[1], | 145 | &hsmmc_div[1], |
147 | &hsmmc_mux[0], | 146 | &hsmmc_mux0, |
148 | &hsmmc_mux[1], | 147 | &hsmmc_mux1, |
148 | }; | ||
149 | |||
150 | static struct clk_lookup s3c2416_clk_lookup[] = { | ||
151 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.0", &hsmmc0_clk), | ||
152 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &hsmmc_mux0.clk), | ||
153 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &hsmmc_mux1.clk), | ||
149 | }; | 154 | }; |
150 | 155 | ||
151 | void __init s3c2416_init_clocks(int xtal) | 156 | void __init s3c2416_init_clocks(int xtal) |
@@ -167,6 +172,7 @@ void __init s3c2416_init_clocks(int xtal) | |||
167 | s3c_register_clksrc(clksrcs[ptr], 1); | 172 | s3c_register_clksrc(clksrcs[ptr], 1); |
168 | 173 | ||
169 | s3c24xx_register_clock(&hsmmc0_clk); | 174 | s3c24xx_register_clock(&hsmmc0_clk); |
175 | clkdev_add_table(s3c2416_clk_lookup, ARRAY_SIZE(s3c2416_clk_lookup)); | ||
170 | 176 | ||
171 | s3c_pwmclk_init(); | 177 | s3c_pwmclk_init(); |
172 | 178 | ||
diff --git a/arch/arm/mach-s3c64xx/clock.c b/arch/arm/mach-s3c64xx/clock.c index 2addd988141c..415c5406b17c 100644 --- a/arch/arm/mach-s3c64xx/clock.c +++ b/arch/arm/mach-s3c64xx/clock.c | |||
@@ -243,24 +243,6 @@ static struct clk init_clocks[] = { | |||
243 | .enable = s3c64xx_hclk_ctrl, | 243 | .enable = s3c64xx_hclk_ctrl, |
244 | .ctrlbit = S3C_CLKCON_HCLK_UHOST, | 244 | .ctrlbit = S3C_CLKCON_HCLK_UHOST, |
245 | }, { | 245 | }, { |
246 | .name = "hsmmc", | ||
247 | .devname = "s3c-sdhci.0", | ||
248 | .parent = &clk_h, | ||
249 | .enable = s3c64xx_hclk_ctrl, | ||
250 | .ctrlbit = S3C_CLKCON_HCLK_HSMMC0, | ||
251 | }, { | ||
252 | .name = "hsmmc", | ||
253 | .devname = "s3c-sdhci.1", | ||
254 | .parent = &clk_h, | ||
255 | .enable = s3c64xx_hclk_ctrl, | ||
256 | .ctrlbit = S3C_CLKCON_HCLK_HSMMC1, | ||
257 | }, { | ||
258 | .name = "hsmmc", | ||
259 | .devname = "s3c-sdhci.2", | ||
260 | .parent = &clk_h, | ||
261 | .enable = s3c64xx_hclk_ctrl, | ||
262 | .ctrlbit = S3C_CLKCON_HCLK_HSMMC2, | ||
263 | }, { | ||
264 | .name = "otg", | 246 | .name = "otg", |
265 | .parent = &clk_h, | 247 | .parent = &clk_h, |
266 | .enable = s3c64xx_hclk_ctrl, | 248 | .enable = s3c64xx_hclk_ctrl, |
@@ -310,6 +292,29 @@ static struct clk init_clocks[] = { | |||
310 | } | 292 | } |
311 | }; | 293 | }; |
312 | 294 | ||
295 | static struct clk clk_hsmmc0 = { | ||
296 | .name = "hsmmc", | ||
297 | .devname = "s3c-sdhci.0", | ||
298 | .parent = &clk_h, | ||
299 | .enable = s3c64xx_hclk_ctrl, | ||
300 | .ctrlbit = S3C_CLKCON_HCLK_HSMMC0, | ||
301 | }; | ||
302 | |||
303 | static struct clk clk_hsmmc1 = { | ||
304 | .name = "hsmmc", | ||
305 | .devname = "s3c-sdhci.1", | ||
306 | .parent = &clk_h, | ||
307 | .enable = s3c64xx_hclk_ctrl, | ||
308 | .ctrlbit = S3C_CLKCON_HCLK_HSMMC1, | ||
309 | }; | ||
310 | |||
311 | static struct clk clk_hsmmc2 = { | ||
312 | .name = "hsmmc", | ||
313 | .devname = "s3c-sdhci.2", | ||
314 | .parent = &clk_h, | ||
315 | .enable = s3c64xx_hclk_ctrl, | ||
316 | .ctrlbit = S3C_CLKCON_HCLK_HSMMC2, | ||
317 | }; | ||
313 | 318 | ||
314 | static struct clk clk_fout_apll = { | 319 | static struct clk clk_fout_apll = { |
315 | .name = "fout_apll", | 320 | .name = "fout_apll", |
@@ -578,36 +583,6 @@ static struct clksrc_sources clkset_camif = { | |||
578 | static struct clksrc_clk clksrcs[] = { | 583 | static struct clksrc_clk clksrcs[] = { |
579 | { | 584 | { |
580 | .clk = { | 585 | .clk = { |
581 | .name = "mmc_bus", | ||
582 | .devname = "s3c-sdhci.0", | ||
583 | .ctrlbit = S3C_CLKCON_SCLK_MMC0, | ||
584 | .enable = s3c64xx_sclk_ctrl, | ||
585 | }, | ||
586 | .reg_src = { .reg = S3C_CLK_SRC, .shift = 18, .size = 2 }, | ||
587 | .reg_div = { .reg = S3C_CLK_DIV1, .shift = 0, .size = 4 }, | ||
588 | .sources = &clkset_spi_mmc, | ||
589 | }, { | ||
590 | .clk = { | ||
591 | .name = "mmc_bus", | ||
592 | .devname = "s3c-sdhci.1", | ||
593 | .ctrlbit = S3C_CLKCON_SCLK_MMC1, | ||
594 | .enable = s3c64xx_sclk_ctrl, | ||
595 | }, | ||
596 | .reg_src = { .reg = S3C_CLK_SRC, .shift = 20, .size = 2 }, | ||
597 | .reg_div = { .reg = S3C_CLK_DIV1, .shift = 4, .size = 4 }, | ||
598 | .sources = &clkset_spi_mmc, | ||
599 | }, { | ||
600 | .clk = { | ||
601 | .name = "mmc_bus", | ||
602 | .devname = "s3c-sdhci.2", | ||
603 | .ctrlbit = S3C_CLKCON_SCLK_MMC2, | ||
604 | .enable = s3c64xx_sclk_ctrl, | ||
605 | }, | ||
606 | .reg_src = { .reg = S3C_CLK_SRC, .shift = 22, .size = 2 }, | ||
607 | .reg_div = { .reg = S3C_CLK_DIV1, .shift = 8, .size = 4 }, | ||
608 | .sources = &clkset_spi_mmc, | ||
609 | }, { | ||
610 | .clk = { | ||
611 | .name = "usb-bus-host", | 586 | .name = "usb-bus-host", |
612 | .ctrlbit = S3C_CLKCON_SCLK_UHOST, | 587 | .ctrlbit = S3C_CLKCON_SCLK_UHOST, |
613 | .enable = s3c64xx_sclk_ctrl, | 588 | .enable = s3c64xx_sclk_ctrl, |
@@ -697,6 +672,42 @@ static struct clksrc_clk clk_sclk_uclk = { | |||
697 | .sources = &clkset_uart, | 672 | .sources = &clkset_uart, |
698 | }; | 673 | }; |
699 | 674 | ||
675 | static struct clksrc_clk clk_sclk_mmc0 = { | ||
676 | .clk = { | ||
677 | .name = "mmc_bus", | ||
678 | .devname = "s3c-sdhci.0", | ||
679 | .ctrlbit = S3C_CLKCON_SCLK_MMC0, | ||
680 | .enable = s3c64xx_sclk_ctrl, | ||
681 | }, | ||
682 | .reg_src = { .reg = S3C_CLK_SRC, .shift = 18, .size = 2 }, | ||
683 | .reg_div = { .reg = S3C_CLK_DIV1, .shift = 0, .size = 4 }, | ||
684 | .sources = &clkset_spi_mmc, | ||
685 | }; | ||
686 | |||
687 | static struct clksrc_clk clk_sclk_mmc1 = { | ||
688 | .clk = { | ||
689 | .name = "mmc_bus", | ||
690 | .devname = "s3c-sdhci.1", | ||
691 | .ctrlbit = S3C_CLKCON_SCLK_MMC1, | ||
692 | .enable = s3c64xx_sclk_ctrl, | ||
693 | }, | ||
694 | .reg_src = { .reg = S3C_CLK_SRC, .shift = 20, .size = 2 }, | ||
695 | .reg_div = { .reg = S3C_CLK_DIV1, .shift = 4, .size = 4 }, | ||
696 | .sources = &clkset_spi_mmc, | ||
697 | }; | ||
698 | |||
699 | static struct clksrc_clk clk_sclk_mmc2 = { | ||
700 | .clk = { | ||
701 | .name = "mmc_bus", | ||
702 | .devname = "s3c-sdhci.2", | ||
703 | .ctrlbit = S3C_CLKCON_SCLK_MMC2, | ||
704 | .enable = s3c64xx_sclk_ctrl, | ||
705 | }, | ||
706 | .reg_src = { .reg = S3C_CLK_SRC, .shift = 22, .size = 2 }, | ||
707 | .reg_div = { .reg = S3C_CLK_DIV1, .shift = 8, .size = 4 }, | ||
708 | .sources = &clkset_spi_mmc, | ||
709 | }; | ||
710 | |||
700 | /* Clock initialisation code */ | 711 | /* Clock initialisation code */ |
701 | 712 | ||
702 | static struct clksrc_clk *init_parents[] = { | 713 | static struct clksrc_clk *init_parents[] = { |
@@ -707,11 +718,26 @@ static struct clksrc_clk *init_parents[] = { | |||
707 | 718 | ||
708 | static struct clksrc_clk *clksrc_cdev[] = { | 719 | static struct clksrc_clk *clksrc_cdev[] = { |
709 | &clk_sclk_uclk, | 720 | &clk_sclk_uclk, |
721 | &clk_sclk_mmc0, | ||
722 | &clk_sclk_mmc1, | ||
723 | &clk_sclk_mmc2, | ||
724 | }; | ||
725 | |||
726 | static struct clk *clk_cdev[] = { | ||
727 | &clk_hsmmc0, | ||
728 | &clk_hsmmc1, | ||
729 | &clk_hsmmc2, | ||
710 | }; | 730 | }; |
711 | 731 | ||
712 | static struct clk_lookup s3c64xx_clk_lookup[] = { | 732 | static struct clk_lookup s3c64xx_clk_lookup[] = { |
713 | CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p), | 733 | CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p), |
714 | CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_sclk_uclk.clk), | 734 | CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_sclk_uclk.clk), |
735 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.0", &clk_hsmmc0), | ||
736 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.0", &clk_hsmmc1), | ||
737 | CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.0", &clk_hsmmc2), | ||
738 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk), | ||
739 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk), | ||
740 | CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk), | ||
715 | }; | 741 | }; |
716 | 742 | ||
717 | #define GET_DIV(clk, field) ((((clk) & field##_MASK) >> field##_SHIFT) + 1) | 743 | #define GET_DIV(clk, field) ((((clk) & field##_MASK) >> field##_SHIFT) + 1) |
@@ -834,6 +860,10 @@ void __init s3c64xx_register_clocks(unsigned long xtal, | |||
834 | s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); | 860 | s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); |
835 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); | 861 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); |
836 | 862 | ||
863 | s3c24xx_register_clocks(clk_cdev, ARRAY_SIZE(clk_cdev)); | ||
864 | for (cnt = 0; cnt < ARRAY_SIZE(clk_cdev); cnt++) | ||
865 | s3c_disable_clocks(clk_cdev[cnt], 1); | ||
866 | |||
837 | s3c24xx_register_clocks(clks1, ARRAY_SIZE(clks1)); | 867 | s3c24xx_register_clocks(clks1, ARRAY_SIZE(clks1)); |
838 | s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs)); | 868 | s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs)); |
839 | for (cnt = 0; cnt < ARRAY_SIZE(clksrc_cdev); cnt++) | 869 | for (cnt = 0; cnt < ARRAY_SIZE(clksrc_cdev); cnt++) |
diff --git a/arch/arm/mach-s5pc100/clock.c b/arch/arm/mach-s5pc100/clock.c index 9d644ece2604..69829ba9c01b 100644 --- a/arch/arm/mach-s5pc100/clock.c +++ b/arch/arm/mach-s5pc100/clock.c | |||
@@ -426,24 +426,6 @@ static struct clk init_clocks_off[] = { | |||
426 | .enable = s5pc100_d0_2_ctrl, | 426 | .enable = s5pc100_d0_2_ctrl, |
427 | .ctrlbit = (1 << 1), | 427 | .ctrlbit = (1 << 1), |
428 | }, { | 428 | }, { |
429 | .name = "hsmmc", | ||
430 | .devname = "s3c-sdhci.2", | ||
431 | .parent = &clk_div_d1_bus.clk, | ||
432 | .enable = s5pc100_d1_0_ctrl, | ||
433 | .ctrlbit = (1 << 7), | ||
434 | }, { | ||
435 | .name = "hsmmc", | ||
436 | .devname = "s3c-sdhci.1", | ||
437 | .parent = &clk_div_d1_bus.clk, | ||
438 | .enable = s5pc100_d1_0_ctrl, | ||
439 | .ctrlbit = (1 << 6), | ||
440 | }, { | ||
441 | .name = "hsmmc", | ||
442 | .devname = "s3c-sdhci.0", | ||
443 | .parent = &clk_div_d1_bus.clk, | ||
444 | .enable = s5pc100_d1_0_ctrl, | ||
445 | .ctrlbit = (1 << 5), | ||
446 | }, { | ||
447 | .name = "modemif", | 429 | .name = "modemif", |
448 | .parent = &clk_div_d1_bus.clk, | 430 | .parent = &clk_div_d1_bus.clk, |
449 | .enable = s5pc100_d1_0_ctrl, | 431 | .enable = s5pc100_d1_0_ctrl, |
@@ -711,6 +693,30 @@ static struct clk init_clocks_off[] = { | |||
711 | }, | 693 | }, |
712 | }; | 694 | }; |
713 | 695 | ||
696 | static struct clk clk_hsmmc2 = { | ||
697 | .name = "hsmmc", | ||
698 | .devname = "s3c-sdhci.2", | ||
699 | .parent = &clk_div_d1_bus.clk, | ||
700 | .enable = s5pc100_d1_0_ctrl, | ||
701 | .ctrlbit = (1 << 7), | ||
702 | }; | ||
703 | |||
704 | static struct clk clk_hsmmc1 = { | ||
705 | .name = "hsmmc", | ||
706 | .devname = "s3c-sdhci.1", | ||
707 | .parent = &clk_div_d1_bus.clk, | ||
708 | .enable = s5pc100_d1_0_ctrl, | ||
709 | .ctrlbit = (1 << 6), | ||
710 | }; | ||
711 | |||
712 | static struct clk clk_hsmmc0 = { | ||
713 | .name = "hsmmc", | ||
714 | .devname = "s3c-sdhci.0", | ||
715 | .parent = &clk_div_d1_bus.clk, | ||
716 | .enable = s5pc100_d1_0_ctrl, | ||
717 | .ctrlbit = (1 << 5), | ||
718 | }; | ||
719 | |||
714 | static struct clk clk_vclk54m = { | 720 | static struct clk clk_vclk54m = { |
715 | .name = "vclk_54m", | 721 | .name = "vclk_54m", |
716 | .rate = 54000000, | 722 | .rate = 54000000, |
@@ -1014,39 +1020,6 @@ static struct clksrc_clk clksrcs[] = { | |||
1014 | .reg_div = { .reg = S5P_CLK_DIV3, .shift = 24, .size = 4 }, | 1020 | .reg_div = { .reg = S5P_CLK_DIV3, .shift = 24, .size = 4 }, |
1015 | }, { | 1021 | }, { |
1016 | .clk = { | 1022 | .clk = { |
1017 | .name = "sclk_mmc", | ||
1018 | .devname = "s3c-sdhci.0", | ||
1019 | .ctrlbit = (1 << 12), | ||
1020 | .enable = s5pc100_sclk1_ctrl, | ||
1021 | |||
1022 | }, | ||
1023 | .sources = &clk_src_mmc0, | ||
1024 | .reg_src = { .reg = S5P_CLK_SRC2, .shift = 0, .size = 2 }, | ||
1025 | .reg_div = { .reg = S5P_CLK_DIV3, .shift = 0, .size = 4 }, | ||
1026 | }, { | ||
1027 | .clk = { | ||
1028 | .name = "sclk_mmc", | ||
1029 | .devname = "s3c-sdhci.1", | ||
1030 | .ctrlbit = (1 << 13), | ||
1031 | .enable = s5pc100_sclk1_ctrl, | ||
1032 | |||
1033 | }, | ||
1034 | .sources = &clk_src_mmc12, | ||
1035 | .reg_src = { .reg = S5P_CLK_SRC2, .shift = 4, .size = 2 }, | ||
1036 | .reg_div = { .reg = S5P_CLK_DIV3, .shift = 4, .size = 4 }, | ||
1037 | }, { | ||
1038 | .clk = { | ||
1039 | .name = "sclk_mmc", | ||
1040 | .devname = "s3c-sdhci.2", | ||
1041 | .ctrlbit = (1 << 14), | ||
1042 | .enable = s5pc100_sclk1_ctrl, | ||
1043 | |||
1044 | }, | ||
1045 | .sources = &clk_src_mmc12, | ||
1046 | .reg_src = { .reg = S5P_CLK_SRC2, .shift = 8, .size = 2 }, | ||
1047 | .reg_div = { .reg = S5P_CLK_DIV3, .shift = 8, .size = 4 }, | ||
1048 | }, { | ||
1049 | .clk = { | ||
1050 | .name = "sclk_irda", | 1023 | .name = "sclk_irda", |
1051 | .ctrlbit = (1 << 10), | 1024 | .ctrlbit = (1 << 10), |
1052 | .enable = s5pc100_sclk0_ctrl, | 1025 | .enable = s5pc100_sclk0_ctrl, |
@@ -1099,6 +1072,42 @@ static struct clksrc_clk clk_sclk_uart = { | |||
1099 | .reg_div = { .reg = S5P_CLK_DIV2, .shift = 0, .size = 4 }, | 1072 | .reg_div = { .reg = S5P_CLK_DIV2, .shift = 0, .size = 4 }, |
1100 | }; | 1073 | }; |
1101 | 1074 | ||
1075 | static struct clksrc_clk clk_sclk_mmc0 = { | ||
1076 | .clk = { | ||
1077 | .name = "sclk_mmc", | ||
1078 | .devname = "s3c-sdhci.0", | ||
1079 | .ctrlbit = (1 << 12), | ||
1080 | .enable = s5pc100_sclk1_ctrl, | ||
1081 | }, | ||
1082 | .sources = &clk_src_mmc0, | ||
1083 | .reg_src = { .reg = S5P_CLK_SRC2, .shift = 0, .size = 2 }, | ||
1084 | .reg_div = { .reg = S5P_CLK_DIV3, .shift = 0, .size = 4 }, | ||
1085 | }; | ||
1086 | |||
1087 | static struct clksrc_clk clk_sclk_mmc1 = { | ||
1088 | .clk = { | ||
1089 | .name = "sclk_mmc", | ||
1090 | .devname = "s3c-sdhci.1", | ||
1091 | .ctrlbit = (1 << 13), | ||
1092 | .enable = s5pc100_sclk1_ctrl, | ||
1093 | }, | ||
1094 | .sources = &clk_src_mmc12, | ||
1095 | .reg_src = { .reg = S5P_CLK_SRC2, .shift = 4, .size = 2 }, | ||
1096 | .reg_div = { .reg = S5P_CLK_DIV3, .shift = 4, .size = 4 }, | ||
1097 | }; | ||
1098 | |||
1099 | static struct clksrc_clk clk_sclk_mmc2 = { | ||
1100 | .clk = { | ||
1101 | .name = "sclk_mmc", | ||
1102 | .devname = "s3c-sdhci.2", | ||
1103 | .ctrlbit = (1 << 14), | ||
1104 | .enable = s5pc100_sclk1_ctrl, | ||
1105 | }, | ||
1106 | .sources = &clk_src_mmc12, | ||
1107 | .reg_src = { .reg = S5P_CLK_SRC2, .shift = 8, .size = 2 }, | ||
1108 | .reg_div = { .reg = S5P_CLK_DIV3, .shift = 8, .size = 4 }, | ||
1109 | }; | ||
1110 | |||
1102 | /* Clock initialisation code */ | 1111 | /* Clock initialisation code */ |
1103 | static struct clksrc_clk *sysclks[] = { | 1112 | static struct clksrc_clk *sysclks[] = { |
1104 | &clk_mout_apll, | 1113 | &clk_mout_apll, |
@@ -1128,8 +1137,17 @@ static struct clksrc_clk *sysclks[] = { | |||
1128 | &clk_sclk_spdif, | 1137 | &clk_sclk_spdif, |
1129 | }; | 1138 | }; |
1130 | 1139 | ||
1140 | static struct clk *clk_cdev[] = { | ||
1141 | &clk_hsmmc0, | ||
1142 | &clk_hsmmc1, | ||
1143 | &clk_hsmmc2, | ||
1144 | }; | ||
1145 | |||
1131 | static struct clksrc_clk *clksrc_cdev[] = { | 1146 | static struct clksrc_clk *clksrc_cdev[] = { |
1132 | &clk_sclk_uart, | 1147 | &clk_sclk_uart, |
1148 | &clk_sclk_mmc0, | ||
1149 | &clk_sclk_mmc1, | ||
1150 | &clk_sclk_mmc2, | ||
1133 | }; | 1151 | }; |
1134 | 1152 | ||
1135 | void __init_or_cpufreq s5pc100_setup_clocks(void) | 1153 | void __init_or_cpufreq s5pc100_setup_clocks(void) |
@@ -1274,6 +1292,12 @@ static struct clk *clks[] __initdata = { | |||
1274 | static struct clk_lookup s5pc100_clk_lookup[] = { | 1292 | static struct clk_lookup s5pc100_clk_lookup[] = { |
1275 | CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p), | 1293 | CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p), |
1276 | CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_sclk_uart.clk), | 1294 | CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_sclk_uart.clk), |
1295 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.0", &clk_hsmmc0), | ||
1296 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.0", &clk_hsmmc1), | ||
1297 | CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.0", &clk_hsmmc2), | ||
1298 | CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk), | ||
1299 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk), | ||
1300 | CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk), | ||
1277 | }; | 1301 | }; |
1278 | 1302 | ||
1279 | void __init s5pc100_register_clocks(void) | 1303 | void __init s5pc100_register_clocks(void) |
@@ -1294,6 +1318,10 @@ void __init s5pc100_register_clocks(void) | |||
1294 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); | 1318 | s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off)); |
1295 | clkdev_add_table(s5pc100_clk_lookup, ARRAY_SIZE(s5pc100_clk_lookup)); | 1319 | clkdev_add_table(s5pc100_clk_lookup, ARRAY_SIZE(s5pc100_clk_lookup)); |
1296 | 1320 | ||
1321 | s3c24xx_register_clocks(clk_cdev, ARRAY_SIZE(clk_cdev)); | ||
1322 | for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++) | ||
1323 | s3c_disable_clocks(clk_cdev[ptr], 1); | ||
1324 | |||
1297 | s3c24xx_register_clock(&dummy_apb_pclk); | 1325 | s3c24xx_register_clock(&dummy_apb_pclk); |
1298 | 1326 | ||
1299 | s3c_pwmclk_init(); | 1327 | s3c_pwmclk_init(); |
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 | ||
538 | static 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 | |||
546 | static 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 | |||
554 | static 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 | |||
562 | static 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 | |||
562 | static struct clk *clkset_uart_list[] = { | 570 | static 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 | ||
1001 | static 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 | |||
1013 | static 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 | |||
1025 | static 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 | |||
1037 | static 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 | |||
1033 | static struct clksrc_clk *clksrc_cdev[] = { | 1049 | static 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 | |||
1060 | static 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 | ||
1287 | void __init s5pv210_register_clocks(void) | 1322 | void __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 | } |
diff --git a/arch/arm/plat-s3c24xx/s3c2443-clock.c b/arch/arm/plat-s3c24xx/s3c2443-clock.c index 4eab2cca2d92..95e68190d593 100644 --- a/arch/arm/plat-s3c24xx/s3c2443-clock.c +++ b/arch/arm/plat-s3c24xx/s3c2443-clock.c | |||
@@ -427,12 +427,6 @@ static struct clk init_clocks[] = { | |||
427 | .enable = s3c2443_clkcon_enable_h, | 427 | .enable = s3c2443_clkcon_enable_h, |
428 | .ctrlbit = S3C2443_HCLKCON_DMA5, | 428 | .ctrlbit = S3C2443_HCLKCON_DMA5, |
429 | }, { | 429 | }, { |
430 | .name = "hsmmc", | ||
431 | .devname = "s3c-sdhci.1", | ||
432 | .parent = &clk_h, | ||
433 | .enable = s3c2443_clkcon_enable_h, | ||
434 | .ctrlbit = S3C2443_HCLKCON_HSMMC, | ||
435 | }, { | ||
436 | .name = "gpio", | 430 | .name = "gpio", |
437 | .parent = &clk_p, | 431 | .parent = &clk_p, |
438 | .enable = s3c2443_clkcon_enable_p, | 432 | .enable = s3c2443_clkcon_enable_p, |
@@ -514,6 +508,14 @@ static struct clk init_clocks[] = { | |||
514 | } | 508 | } |
515 | }; | 509 | }; |
516 | 510 | ||
511 | static struct clk hsmmc1_clk = { | ||
512 | .name = "hsmmc", | ||
513 | .devname = "s3c-sdhci.1", | ||
514 | .parent = &clk_h, | ||
515 | .enable = s3c2443_clkcon_enable_h, | ||
516 | .ctrlbit = S3C2443_HCLKCON_HSMMC, | ||
517 | }; | ||
518 | |||
517 | static inline unsigned long s3c2443_get_hdiv(unsigned long clkcon0) | 519 | static inline unsigned long s3c2443_get_hdiv(unsigned long clkcon0) |
518 | { | 520 | { |
519 | clkcon0 &= S3C2443_CLKDIV0_HCLKDIV_MASK; | 521 | clkcon0 &= S3C2443_CLKDIV0_HCLKDIV_MASK; |
@@ -579,6 +581,7 @@ static struct clk *clks[] __initdata = { | |||
579 | &clk_epll, | 581 | &clk_epll, |
580 | &clk_usb_bus, | 582 | &clk_usb_bus, |
581 | &clk_armdiv, | 583 | &clk_armdiv, |
584 | &hsmmc1_clk, | ||
582 | }; | 585 | }; |
583 | 586 | ||
584 | static struct clksrc_clk *clksrcs[] __initdata = { | 587 | static struct clksrc_clk *clksrcs[] __initdata = { |
@@ -595,6 +598,7 @@ static struct clk_lookup s3c2443_clk_lookup[] = { | |||
595 | CLKDEV_INIT(NULL, "clk_uart_baud1", &s3c24xx_uclk), | 598 | CLKDEV_INIT(NULL, "clk_uart_baud1", &s3c24xx_uclk), |
596 | CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p), | 599 | CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p), |
597 | CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_esys_uart.clk), | 600 | CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_esys_uart.clk), |
601 | CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.0", &hsmmc1_clk), | ||
598 | }; | 602 | }; |
599 | 603 | ||
600 | void __init s3c2443_common_init_clocks(int xtal, pll_fn get_mpll, | 604 | void __init s3c2443_common_init_clocks(int xtal, pll_fn get_mpll, |