aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-exynos/Makefile3
-rw-r--r--arch/arm/mach-exynos/clock-exynos4.c1568
-rw-r--r--arch/arm/mach-exynos/clock-exynos4.h30
-rw-r--r--arch/arm/mach-exynos/clock-exynos4210.c48
-rw-r--r--arch/arm/mach-exynos/clock-exynos4212.c32
-rw-r--r--arch/arm/mach-exynos/clock.c1569
-rw-r--r--arch/arm/mach-exynos/common.c2
-rw-r--r--arch/arm/mach-exynos/common.h9
-rw-r--r--arch/arm/mach-exynos/dma.c16
-rw-r--r--arch/arm/mach-exynos/include/mach/exynos4-clock.h43
-rw-r--r--arch/arm/mach-exynos/include/mach/regs-clock.h416
-rw-r--r--arch/arm/mach-exynos/mach-origen.c2
-rw-r--r--arch/arm/mach-exynos/mach-universal_c210.c2
-rw-r--r--arch/arm/mach-exynos/pm.c40
-rw-r--r--arch/arm/mach-s3c2410/mach-h1940.c12
-rw-r--r--arch/arm/mach-s3c2416/clock.c6
-rw-r--r--arch/arm/mach-s3c2416/mach-smdk2416.c8
-rw-r--r--arch/arm/mach-s3c2440/mach-gta02.c4
-rw-r--r--arch/arm/mach-s3c2440/mach-rx1950.c12
-rw-r--r--arch/arm/mach-s3c64xx/common.h2
-rw-r--r--arch/arm/mach-s3c64xx/irq-pm.c2
-rw-r--r--arch/arm/mach-s5p64x0/clock.c11
-rw-r--r--arch/arm/mach-s5p64x0/dma.c12
-rw-r--r--arch/arm/mach-s5p64x0/include/mach/s5p64x0-clock.h7
-rw-r--r--arch/arm/mach-s5pc100/clock.c28
-rw-r--r--arch/arm/mach-s5pc100/dma.c16
-rw-r--r--arch/arm/mach-s5pv210/dma.c16
-rw-r--r--arch/arm/mach-s5pv210/mach-goni.c2
-rw-r--r--arch/arm/mach-s5pv210/mach-smdkv210.c2
-rw-r--r--arch/arm/plat-s3c24xx/s3c2443-clock.c2
-rw-r--r--arch/arm/plat-s5p/irq-eint.c2
-rw-r--r--arch/arm/plat-s5p/irq-gpioint.c2
-rw-r--r--arch/arm/plat-samsung/devs.c13
-rw-r--r--arch/arm/plat-samsung/dma-ops.c2
34 files changed, 1980 insertions, 1961 deletions
diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile
index 5fc202cdfdb6..995e7cc02bec 100644
--- a/arch/arm/mach-exynos/Makefile
+++ b/arch/arm/mach-exynos/Makefile
@@ -12,7 +12,8 @@ obj- :=
12 12
13# Core 13# Core
14 14
15obj-$(CONFIG_ARCH_EXYNOS4) += common.o clock.o 15obj-$(CONFIG_ARCH_EXYNOS) += common.o
16obj-$(CONFIG_ARCH_EXYNOS4) += clock-exynos4.o
16obj-$(CONFIG_CPU_EXYNOS4210) += clock-exynos4210.o 17obj-$(CONFIG_CPU_EXYNOS4210) += clock-exynos4210.o
17obj-$(CONFIG_SOC_EXYNOS4212) += clock-exynos4212.o 18obj-$(CONFIG_SOC_EXYNOS4212) += clock-exynos4212.o
18 19
diff --git a/arch/arm/mach-exynos/clock-exynos4.c b/arch/arm/mach-exynos/clock-exynos4.c
new file mode 100644
index 000000000000..060dde7d7ad6
--- /dev/null
+++ b/arch/arm/mach-exynos/clock-exynos4.c
@@ -0,0 +1,1568 @@
1/*
2 * Copyright (c) 2010-2012 Samsung Electronics Co., Ltd.
3 * http://www.samsung.com
4 *
5 * EXYNOS4 - Clock support
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10*/
11
12#include <linux/kernel.h>
13#include <linux/err.h>
14#include <linux/io.h>
15#include <linux/syscore_ops.h>
16
17#include <plat/cpu-freq.h>
18#include <plat/clock.h>
19#include <plat/cpu.h>
20#include <plat/pll.h>
21#include <plat/s5p-clock.h>
22#include <plat/clock-clksrc.h>
23#include <plat/pm.h>
24
25#include <mach/map.h>
26#include <mach/regs-clock.h>
27#include <mach/sysmmu.h>
28
29#include "common.h"
30#include "clock-exynos4.h"
31
32#ifdef CONFIG_PM_SLEEP
33static struct sleep_save exynos4_clock_save[] = {
34 SAVE_ITEM(EXYNOS4_CLKDIV_LEFTBUS),
35 SAVE_ITEM(EXYNOS4_CLKGATE_IP_LEFTBUS),
36 SAVE_ITEM(EXYNOS4_CLKDIV_RIGHTBUS),
37 SAVE_ITEM(EXYNOS4_CLKGATE_IP_RIGHTBUS),
38 SAVE_ITEM(EXYNOS4_CLKSRC_TOP0),
39 SAVE_ITEM(EXYNOS4_CLKSRC_TOP1),
40 SAVE_ITEM(EXYNOS4_CLKSRC_CAM),
41 SAVE_ITEM(EXYNOS4_CLKSRC_TV),
42 SAVE_ITEM(EXYNOS4_CLKSRC_MFC),
43 SAVE_ITEM(EXYNOS4_CLKSRC_G3D),
44 SAVE_ITEM(EXYNOS4_CLKSRC_LCD0),
45 SAVE_ITEM(EXYNOS4_CLKSRC_MAUDIO),
46 SAVE_ITEM(EXYNOS4_CLKSRC_FSYS),
47 SAVE_ITEM(EXYNOS4_CLKSRC_PERIL0),
48 SAVE_ITEM(EXYNOS4_CLKSRC_PERIL1),
49 SAVE_ITEM(EXYNOS4_CLKDIV_CAM),
50 SAVE_ITEM(EXYNOS4_CLKDIV_TV),
51 SAVE_ITEM(EXYNOS4_CLKDIV_MFC),
52 SAVE_ITEM(EXYNOS4_CLKDIV_G3D),
53 SAVE_ITEM(EXYNOS4_CLKDIV_LCD0),
54 SAVE_ITEM(EXYNOS4_CLKDIV_MAUDIO),
55 SAVE_ITEM(EXYNOS4_CLKDIV_FSYS0),
56 SAVE_ITEM(EXYNOS4_CLKDIV_FSYS1),
57 SAVE_ITEM(EXYNOS4_CLKDIV_FSYS2),
58 SAVE_ITEM(EXYNOS4_CLKDIV_FSYS3),
59 SAVE_ITEM(EXYNOS4_CLKDIV_PERIL0),
60 SAVE_ITEM(EXYNOS4_CLKDIV_PERIL1),
61 SAVE_ITEM(EXYNOS4_CLKDIV_PERIL2),
62 SAVE_ITEM(EXYNOS4_CLKDIV_PERIL3),
63 SAVE_ITEM(EXYNOS4_CLKDIV_PERIL4),
64 SAVE_ITEM(EXYNOS4_CLKDIV_PERIL5),
65 SAVE_ITEM(EXYNOS4_CLKDIV_TOP),
66 SAVE_ITEM(EXYNOS4_CLKSRC_MASK_TOP),
67 SAVE_ITEM(EXYNOS4_CLKSRC_MASK_CAM),
68 SAVE_ITEM(EXYNOS4_CLKSRC_MASK_TV),
69 SAVE_ITEM(EXYNOS4_CLKSRC_MASK_LCD0),
70 SAVE_ITEM(EXYNOS4_CLKSRC_MASK_MAUDIO),
71 SAVE_ITEM(EXYNOS4_CLKSRC_MASK_FSYS),
72 SAVE_ITEM(EXYNOS4_CLKSRC_MASK_PERIL0),
73 SAVE_ITEM(EXYNOS4_CLKSRC_MASK_PERIL1),
74 SAVE_ITEM(EXYNOS4_CLKDIV2_RATIO),
75 SAVE_ITEM(EXYNOS4_CLKGATE_SCLKCAM),
76 SAVE_ITEM(EXYNOS4_CLKGATE_IP_CAM),
77 SAVE_ITEM(EXYNOS4_CLKGATE_IP_TV),
78 SAVE_ITEM(EXYNOS4_CLKGATE_IP_MFC),
79 SAVE_ITEM(EXYNOS4_CLKGATE_IP_G3D),
80 SAVE_ITEM(EXYNOS4_CLKGATE_IP_LCD0),
81 SAVE_ITEM(EXYNOS4_CLKGATE_IP_FSYS),
82 SAVE_ITEM(EXYNOS4_CLKGATE_IP_GPS),
83 SAVE_ITEM(EXYNOS4_CLKGATE_IP_PERIL),
84 SAVE_ITEM(EXYNOS4_CLKGATE_BLOCK),
85 SAVE_ITEM(EXYNOS4_CLKSRC_MASK_DMC),
86 SAVE_ITEM(EXYNOS4_CLKSRC_DMC),
87 SAVE_ITEM(EXYNOS4_CLKDIV_DMC0),
88 SAVE_ITEM(EXYNOS4_CLKDIV_DMC1),
89 SAVE_ITEM(EXYNOS4_CLKGATE_IP_DMC),
90 SAVE_ITEM(EXYNOS4_CLKSRC_CPU),
91 SAVE_ITEM(EXYNOS4_CLKDIV_CPU),
92 SAVE_ITEM(EXYNOS4_CLKDIV_CPU + 0x4),
93 SAVE_ITEM(EXYNOS4_CLKGATE_SCLKCPU),
94 SAVE_ITEM(EXYNOS4_CLKGATE_IP_CPU),
95};
96#endif
97
98static struct clk exynos4_clk_sclk_hdmi27m = {
99 .name = "sclk_hdmi27m",
100 .rate = 27000000,
101};
102
103static struct clk exynos4_clk_sclk_hdmiphy = {
104 .name = "sclk_hdmiphy",
105};
106
107static struct clk exynos4_clk_sclk_usbphy0 = {
108 .name = "sclk_usbphy0",
109 .rate = 27000000,
110};
111
112static struct clk exynos4_clk_sclk_usbphy1 = {
113 .name = "sclk_usbphy1",
114};
115
116static struct clk dummy_apb_pclk = {
117 .name = "apb_pclk",
118 .id = -1,
119};
120
121static int exynos4_clksrc_mask_top_ctrl(struct clk *clk, int enable)
122{
123 return s5p_gatectrl(EXYNOS4_CLKSRC_MASK_TOP, clk, enable);
124}
125
126static int exynos4_clksrc_mask_cam_ctrl(struct clk *clk, int enable)
127{
128 return s5p_gatectrl(EXYNOS4_CLKSRC_MASK_CAM, clk, enable);
129}
130
131static int exynos4_clksrc_mask_lcd0_ctrl(struct clk *clk, int enable)
132{
133 return s5p_gatectrl(EXYNOS4_CLKSRC_MASK_LCD0, clk, enable);
134}
135
136int exynos4_clksrc_mask_fsys_ctrl(struct clk *clk, int enable)
137{
138 return s5p_gatectrl(EXYNOS4_CLKSRC_MASK_FSYS, clk, enable);
139}
140
141static int exynos4_clksrc_mask_peril0_ctrl(struct clk *clk, int enable)
142{
143 return s5p_gatectrl(EXYNOS4_CLKSRC_MASK_PERIL0, clk, enable);
144}
145
146static int exynos4_clksrc_mask_peril1_ctrl(struct clk *clk, int enable)
147{
148 return s5p_gatectrl(EXYNOS4_CLKSRC_MASK_PERIL1, clk, enable);
149}
150
151static int exynos4_clk_ip_mfc_ctrl(struct clk *clk, int enable)
152{
153 return s5p_gatectrl(EXYNOS4_CLKGATE_IP_MFC, clk, enable);
154}
155
156static int exynos4_clksrc_mask_tv_ctrl(struct clk *clk, int enable)
157{
158 return s5p_gatectrl(EXYNOS4_CLKSRC_MASK_TV, clk, enable);
159}
160
161static int exynos4_clk_ip_cam_ctrl(struct clk *clk, int enable)
162{
163 return s5p_gatectrl(EXYNOS4_CLKGATE_IP_CAM, clk, enable);
164}
165
166static int exynos4_clk_ip_tv_ctrl(struct clk *clk, int enable)
167{
168 return s5p_gatectrl(EXYNOS4_CLKGATE_IP_TV, clk, enable);
169}
170
171static int exynos4_clk_ip_image_ctrl(struct clk *clk, int enable)
172{
173 return s5p_gatectrl(EXYNOS4_CLKGATE_IP_IMAGE, clk, enable);
174}
175
176static int exynos4_clk_ip_lcd0_ctrl(struct clk *clk, int enable)
177{
178 return s5p_gatectrl(EXYNOS4_CLKGATE_IP_LCD0, clk, enable);
179}
180
181int exynos4_clk_ip_lcd1_ctrl(struct clk *clk, int enable)
182{
183 return s5p_gatectrl(EXYNOS4210_CLKGATE_IP_LCD1, clk, enable);
184}
185
186int exynos4_clk_ip_fsys_ctrl(struct clk *clk, int enable)
187{
188 return s5p_gatectrl(EXYNOS4_CLKGATE_IP_FSYS, clk, enable);
189}
190
191static int exynos4_clk_ip_peril_ctrl(struct clk *clk, int enable)
192{
193 return s5p_gatectrl(EXYNOS4_CLKGATE_IP_PERIL, clk, enable);
194}
195
196static int exynos4_clk_ip_perir_ctrl(struct clk *clk, int enable)
197{
198 return s5p_gatectrl(EXYNOS4_CLKGATE_IP_PERIR, clk, enable);
199}
200
201static int exynos4_clk_hdmiphy_ctrl(struct clk *clk, int enable)
202{
203 return s5p_gatectrl(S5P_HDMI_PHY_CONTROL, clk, enable);
204}
205
206static int exynos4_clk_dac_ctrl(struct clk *clk, int enable)
207{
208 return s5p_gatectrl(S5P_DAC_PHY_CONTROL, clk, enable);
209}
210
211/* Core list of CMU_CPU side */
212
213static struct clksrc_clk exynos4_clk_mout_apll = {
214 .clk = {
215 .name = "mout_apll",
216 },
217 .sources = &clk_src_apll,
218 .reg_src = { .reg = EXYNOS4_CLKSRC_CPU, .shift = 0, .size = 1 },
219};
220
221static struct clksrc_clk exynos4_clk_sclk_apll = {
222 .clk = {
223 .name = "sclk_apll",
224 .parent = &exynos4_clk_mout_apll.clk,
225 },
226 .reg_div = { .reg = EXYNOS4_CLKDIV_CPU, .shift = 24, .size = 3 },
227};
228
229static struct clksrc_clk exynos4_clk_mout_epll = {
230 .clk = {
231 .name = "mout_epll",
232 },
233 .sources = &clk_src_epll,
234 .reg_src = { .reg = EXYNOS4_CLKSRC_TOP0, .shift = 4, .size = 1 },
235};
236
237struct clksrc_clk exynos4_clk_mout_mpll = {
238 .clk = {
239 .name = "mout_mpll",
240 },
241 .sources = &clk_src_mpll,
242
243 /* reg_src will be added in each SoCs' clock */
244};
245
246static struct clk *exynos4_clkset_moutcore_list[] = {
247 [0] = &exynos4_clk_mout_apll.clk,
248 [1] = &exynos4_clk_mout_mpll.clk,
249};
250
251static struct clksrc_sources exynos4_clkset_moutcore = {
252 .sources = exynos4_clkset_moutcore_list,
253 .nr_sources = ARRAY_SIZE(exynos4_clkset_moutcore_list),
254};
255
256static struct clksrc_clk exynos4_clk_moutcore = {
257 .clk = {
258 .name = "moutcore",
259 },
260 .sources = &exynos4_clkset_moutcore,
261 .reg_src = { .reg = EXYNOS4_CLKSRC_CPU, .shift = 16, .size = 1 },
262};
263
264static struct clksrc_clk exynos4_clk_coreclk = {
265 .clk = {
266 .name = "core_clk",
267 .parent = &exynos4_clk_moutcore.clk,
268 },
269 .reg_div = { .reg = EXYNOS4_CLKDIV_CPU, .shift = 0, .size = 3 },
270};
271
272static struct clksrc_clk exynos4_clk_armclk = {
273 .clk = {
274 .name = "armclk",
275 .parent = &exynos4_clk_coreclk.clk,
276 },
277};
278
279static struct clksrc_clk exynos4_clk_aclk_corem0 = {
280 .clk = {
281 .name = "aclk_corem0",
282 .parent = &exynos4_clk_coreclk.clk,
283 },
284 .reg_div = { .reg = EXYNOS4_CLKDIV_CPU, .shift = 4, .size = 3 },
285};
286
287static struct clksrc_clk exynos4_clk_aclk_cores = {
288 .clk = {
289 .name = "aclk_cores",
290 .parent = &exynos4_clk_coreclk.clk,
291 },
292 .reg_div = { .reg = EXYNOS4_CLKDIV_CPU, .shift = 4, .size = 3 },
293};
294
295static struct clksrc_clk exynos4_clk_aclk_corem1 = {
296 .clk = {
297 .name = "aclk_corem1",
298 .parent = &exynos4_clk_coreclk.clk,
299 },
300 .reg_div = { .reg = EXYNOS4_CLKDIV_CPU, .shift = 8, .size = 3 },
301};
302
303static struct clksrc_clk exynos4_clk_periphclk = {
304 .clk = {
305 .name = "periphclk",
306 .parent = &exynos4_clk_coreclk.clk,
307 },
308 .reg_div = { .reg = EXYNOS4_CLKDIV_CPU, .shift = 12, .size = 3 },
309};
310
311/* Core list of CMU_CORE side */
312
313static struct clk *exynos4_clkset_corebus_list[] = {
314 [0] = &exynos4_clk_mout_mpll.clk,
315 [1] = &exynos4_clk_sclk_apll.clk,
316};
317
318struct clksrc_sources exynos4_clkset_mout_corebus = {
319 .sources = exynos4_clkset_corebus_list,
320 .nr_sources = ARRAY_SIZE(exynos4_clkset_corebus_list),
321};
322
323static struct clksrc_clk exynos4_clk_mout_corebus = {
324 .clk = {
325 .name = "mout_corebus",
326 },
327 .sources = &exynos4_clkset_mout_corebus,
328 .reg_src = { .reg = EXYNOS4_CLKSRC_DMC, .shift = 4, .size = 1 },
329};
330
331static struct clksrc_clk exynos4_clk_sclk_dmc = {
332 .clk = {
333 .name = "sclk_dmc",
334 .parent = &exynos4_clk_mout_corebus.clk,
335 },
336 .reg_div = { .reg = EXYNOS4_CLKDIV_DMC0, .shift = 12, .size = 3 },
337};
338
339static struct clksrc_clk exynos4_clk_aclk_cored = {
340 .clk = {
341 .name = "aclk_cored",
342 .parent = &exynos4_clk_sclk_dmc.clk,
343 },
344 .reg_div = { .reg = EXYNOS4_CLKDIV_DMC0, .shift = 16, .size = 3 },
345};
346
347static struct clksrc_clk exynos4_clk_aclk_corep = {
348 .clk = {
349 .name = "aclk_corep",
350 .parent = &exynos4_clk_aclk_cored.clk,
351 },
352 .reg_div = { .reg = EXYNOS4_CLKDIV_DMC0, .shift = 20, .size = 3 },
353};
354
355static struct clksrc_clk exynos4_clk_aclk_acp = {
356 .clk = {
357 .name = "aclk_acp",
358 .parent = &exynos4_clk_mout_corebus.clk,
359 },
360 .reg_div = { .reg = EXYNOS4_CLKDIV_DMC0, .shift = 0, .size = 3 },
361};
362
363static struct clksrc_clk exynos4_clk_pclk_acp = {
364 .clk = {
365 .name = "pclk_acp",
366 .parent = &exynos4_clk_aclk_acp.clk,
367 },
368 .reg_div = { .reg = EXYNOS4_CLKDIV_DMC0, .shift = 4, .size = 3 },
369};
370
371/* Core list of CMU_TOP side */
372
373struct clk *exynos4_clkset_aclk_top_list[] = {
374 [0] = &exynos4_clk_mout_mpll.clk,
375 [1] = &exynos4_clk_sclk_apll.clk,
376};
377
378static struct clksrc_sources exynos4_clkset_aclk = {
379 .sources = exynos4_clkset_aclk_top_list,
380 .nr_sources = ARRAY_SIZE(exynos4_clkset_aclk_top_list),
381};
382
383static struct clksrc_clk exynos4_clk_aclk_200 = {
384 .clk = {
385 .name = "aclk_200",
386 },
387 .sources = &exynos4_clkset_aclk,
388 .reg_src = { .reg = EXYNOS4_CLKSRC_TOP0, .shift = 12, .size = 1 },
389 .reg_div = { .reg = EXYNOS4_CLKDIV_TOP, .shift = 0, .size = 3 },
390};
391
392static struct clksrc_clk exynos4_clk_aclk_100 = {
393 .clk = {
394 .name = "aclk_100",
395 },
396 .sources = &exynos4_clkset_aclk,
397 .reg_src = { .reg = EXYNOS4_CLKSRC_TOP0, .shift = 16, .size = 1 },
398 .reg_div = { .reg = EXYNOS4_CLKDIV_TOP, .shift = 4, .size = 4 },
399};
400
401static struct clksrc_clk exynos4_clk_aclk_160 = {
402 .clk = {
403 .name = "aclk_160",
404 },
405 .sources = &exynos4_clkset_aclk,
406 .reg_src = { .reg = EXYNOS4_CLKSRC_TOP0, .shift = 20, .size = 1 },
407 .reg_div = { .reg = EXYNOS4_CLKDIV_TOP, .shift = 8, .size = 3 },
408};
409
410struct clksrc_clk exynos4_clk_aclk_133 = {
411 .clk = {
412 .name = "aclk_133",
413 },
414 .sources = &exynos4_clkset_aclk,
415 .reg_src = { .reg = EXYNOS4_CLKSRC_TOP0, .shift = 24, .size = 1 },
416 .reg_div = { .reg = EXYNOS4_CLKDIV_TOP, .shift = 12, .size = 3 },
417};
418
419static struct clk *exynos4_clkset_vpllsrc_list[] = {
420 [0] = &clk_fin_vpll,
421 [1] = &exynos4_clk_sclk_hdmi27m,
422};
423
424static struct clksrc_sources exynos4_clkset_vpllsrc = {
425 .sources = exynos4_clkset_vpllsrc_list,
426 .nr_sources = ARRAY_SIZE(exynos4_clkset_vpllsrc_list),
427};
428
429static struct clksrc_clk exynos4_clk_vpllsrc = {
430 .clk = {
431 .name = "vpll_src",
432 .enable = exynos4_clksrc_mask_top_ctrl,
433 .ctrlbit = (1 << 0),
434 },
435 .sources = &exynos4_clkset_vpllsrc,
436 .reg_src = { .reg = EXYNOS4_CLKSRC_TOP1, .shift = 0, .size = 1 },
437};
438
439static struct clk *exynos4_clkset_sclk_vpll_list[] = {
440 [0] = &exynos4_clk_vpllsrc.clk,
441 [1] = &clk_fout_vpll,
442};
443
444static struct clksrc_sources exynos4_clkset_sclk_vpll = {
445 .sources = exynos4_clkset_sclk_vpll_list,
446 .nr_sources = ARRAY_SIZE(exynos4_clkset_sclk_vpll_list),
447};
448
449static struct clksrc_clk exynos4_clk_sclk_vpll = {
450 .clk = {
451 .name = "sclk_vpll",
452 },
453 .sources = &exynos4_clkset_sclk_vpll,
454 .reg_src = { .reg = EXYNOS4_CLKSRC_TOP0, .shift = 8, .size = 1 },
455};
456
457static struct clk exynos4_init_clocks_off[] = {
458 {
459 .name = "timers",
460 .parent = &exynos4_clk_aclk_100.clk,
461 .enable = exynos4_clk_ip_peril_ctrl,
462 .ctrlbit = (1<<24),
463 }, {
464 .name = "csis",
465 .devname = "s5p-mipi-csis.0",
466 .enable = exynos4_clk_ip_cam_ctrl,
467 .ctrlbit = (1 << 4),
468 }, {
469 .name = "csis",
470 .devname = "s5p-mipi-csis.1",
471 .enable = exynos4_clk_ip_cam_ctrl,
472 .ctrlbit = (1 << 5),
473 }, {
474 .name = "jpeg",
475 .id = 0,
476 .enable = exynos4_clk_ip_cam_ctrl,
477 .ctrlbit = (1 << 6),
478 }, {
479 .name = "fimc",
480 .devname = "exynos4-fimc.0",
481 .enable = exynos4_clk_ip_cam_ctrl,
482 .ctrlbit = (1 << 0),
483 }, {
484 .name = "fimc",
485 .devname = "exynos4-fimc.1",
486 .enable = exynos4_clk_ip_cam_ctrl,
487 .ctrlbit = (1 << 1),
488 }, {
489 .name = "fimc",
490 .devname = "exynos4-fimc.2",
491 .enable = exynos4_clk_ip_cam_ctrl,
492 .ctrlbit = (1 << 2),
493 }, {
494 .name = "fimc",
495 .devname = "exynos4-fimc.3",
496 .enable = exynos4_clk_ip_cam_ctrl,
497 .ctrlbit = (1 << 3),
498 }, {
499 .name = "fimd",
500 .devname = "exynos4-fb.0",
501 .enable = exynos4_clk_ip_lcd0_ctrl,
502 .ctrlbit = (1 << 0),
503 }, {
504 .name = "hsmmc",
505 .devname = "s3c-sdhci.0",
506 .parent = &exynos4_clk_aclk_133.clk,
507 .enable = exynos4_clk_ip_fsys_ctrl,
508 .ctrlbit = (1 << 5),
509 }, {
510 .name = "hsmmc",
511 .devname = "s3c-sdhci.1",
512 .parent = &exynos4_clk_aclk_133.clk,
513 .enable = exynos4_clk_ip_fsys_ctrl,
514 .ctrlbit = (1 << 6),
515 }, {
516 .name = "hsmmc",
517 .devname = "s3c-sdhci.2",
518 .parent = &exynos4_clk_aclk_133.clk,
519 .enable = exynos4_clk_ip_fsys_ctrl,
520 .ctrlbit = (1 << 7),
521 }, {
522 .name = "hsmmc",
523 .devname = "s3c-sdhci.3",
524 .parent = &exynos4_clk_aclk_133.clk,
525 .enable = exynos4_clk_ip_fsys_ctrl,
526 .ctrlbit = (1 << 8),
527 }, {
528 .name = "dwmmc",
529 .parent = &exynos4_clk_aclk_133.clk,
530 .enable = exynos4_clk_ip_fsys_ctrl,
531 .ctrlbit = (1 << 9),
532 }, {
533 .name = "dac",
534 .devname = "s5p-sdo",
535 .enable = exynos4_clk_ip_tv_ctrl,
536 .ctrlbit = (1 << 2),
537 }, {
538 .name = "mixer",
539 .devname = "s5p-mixer",
540 .enable = exynos4_clk_ip_tv_ctrl,
541 .ctrlbit = (1 << 1),
542 }, {
543 .name = "vp",
544 .devname = "s5p-mixer",
545 .enable = exynos4_clk_ip_tv_ctrl,
546 .ctrlbit = (1 << 0),
547 }, {
548 .name = "hdmi",
549 .devname = "exynos4-hdmi",
550 .enable = exynos4_clk_ip_tv_ctrl,
551 .ctrlbit = (1 << 3),
552 }, {
553 .name = "hdmiphy",
554 .devname = "exynos4-hdmi",
555 .enable = exynos4_clk_hdmiphy_ctrl,
556 .ctrlbit = (1 << 0),
557 }, {
558 .name = "dacphy",
559 .devname = "s5p-sdo",
560 .enable = exynos4_clk_dac_ctrl,
561 .ctrlbit = (1 << 0),
562 }, {
563 .name = "adc",
564 .enable = exynos4_clk_ip_peril_ctrl,
565 .ctrlbit = (1 << 15),
566 }, {
567 .name = "keypad",
568 .enable = exynos4_clk_ip_perir_ctrl,
569 .ctrlbit = (1 << 16),
570 }, {
571 .name = "rtc",
572 .enable = exynos4_clk_ip_perir_ctrl,
573 .ctrlbit = (1 << 15),
574 }, {
575 .name = "watchdog",
576 .parent = &exynos4_clk_aclk_100.clk,
577 .enable = exynos4_clk_ip_perir_ctrl,
578 .ctrlbit = (1 << 14),
579 }, {
580 .name = "usbhost",
581 .enable = exynos4_clk_ip_fsys_ctrl ,
582 .ctrlbit = (1 << 12),
583 }, {
584 .name = "otg",
585 .enable = exynos4_clk_ip_fsys_ctrl,
586 .ctrlbit = (1 << 13),
587 }, {
588 .name = "spi",
589 .devname = "s3c64xx-spi.0",
590 .enable = exynos4_clk_ip_peril_ctrl,
591 .ctrlbit = (1 << 16),
592 }, {
593 .name = "spi",
594 .devname = "s3c64xx-spi.1",
595 .enable = exynos4_clk_ip_peril_ctrl,
596 .ctrlbit = (1 << 17),
597 }, {
598 .name = "spi",
599 .devname = "s3c64xx-spi.2",
600 .enable = exynos4_clk_ip_peril_ctrl,
601 .ctrlbit = (1 << 18),
602 }, {
603 .name = "iis",
604 .devname = "samsung-i2s.0",
605 .enable = exynos4_clk_ip_peril_ctrl,
606 .ctrlbit = (1 << 19),
607 }, {
608 .name = "iis",
609 .devname = "samsung-i2s.1",
610 .enable = exynos4_clk_ip_peril_ctrl,
611 .ctrlbit = (1 << 20),
612 }, {
613 .name = "iis",
614 .devname = "samsung-i2s.2",
615 .enable = exynos4_clk_ip_peril_ctrl,
616 .ctrlbit = (1 << 21),
617 }, {
618 .name = "ac97",
619 .devname = "samsung-ac97",
620 .enable = exynos4_clk_ip_peril_ctrl,
621 .ctrlbit = (1 << 27),
622 }, {
623 .name = "fimg2d",
624 .enable = exynos4_clk_ip_image_ctrl,
625 .ctrlbit = (1 << 0),
626 }, {
627 .name = "mfc",
628 .devname = "s5p-mfc",
629 .enable = exynos4_clk_ip_mfc_ctrl,
630 .ctrlbit = (1 << 0),
631 }, {
632 .name = "i2c",
633 .devname = "s3c2440-i2c.0",
634 .parent = &exynos4_clk_aclk_100.clk,
635 .enable = exynos4_clk_ip_peril_ctrl,
636 .ctrlbit = (1 << 6),
637 }, {
638 .name = "i2c",
639 .devname = "s3c2440-i2c.1",
640 .parent = &exynos4_clk_aclk_100.clk,
641 .enable = exynos4_clk_ip_peril_ctrl,
642 .ctrlbit = (1 << 7),
643 }, {
644 .name = "i2c",
645 .devname = "s3c2440-i2c.2",
646 .parent = &exynos4_clk_aclk_100.clk,
647 .enable = exynos4_clk_ip_peril_ctrl,
648 .ctrlbit = (1 << 8),
649 }, {
650 .name = "i2c",
651 .devname = "s3c2440-i2c.3",
652 .parent = &exynos4_clk_aclk_100.clk,
653 .enable = exynos4_clk_ip_peril_ctrl,
654 .ctrlbit = (1 << 9),
655 }, {
656 .name = "i2c",
657 .devname = "s3c2440-i2c.4",
658 .parent = &exynos4_clk_aclk_100.clk,
659 .enable = exynos4_clk_ip_peril_ctrl,
660 .ctrlbit = (1 << 10),
661 }, {
662 .name = "i2c",
663 .devname = "s3c2440-i2c.5",
664 .parent = &exynos4_clk_aclk_100.clk,
665 .enable = exynos4_clk_ip_peril_ctrl,
666 .ctrlbit = (1 << 11),
667 }, {
668 .name = "i2c",
669 .devname = "s3c2440-i2c.6",
670 .parent = &exynos4_clk_aclk_100.clk,
671 .enable = exynos4_clk_ip_peril_ctrl,
672 .ctrlbit = (1 << 12),
673 }, {
674 .name = "i2c",
675 .devname = "s3c2440-i2c.7",
676 .parent = &exynos4_clk_aclk_100.clk,
677 .enable = exynos4_clk_ip_peril_ctrl,
678 .ctrlbit = (1 << 13),
679 }, {
680 .name = "i2c",
681 .devname = "s3c2440-hdmiphy-i2c",
682 .parent = &exynos4_clk_aclk_100.clk,
683 .enable = exynos4_clk_ip_peril_ctrl,
684 .ctrlbit = (1 << 14),
685 }, {
686 .name = "SYSMMU_MDMA",
687 .enable = exynos4_clk_ip_image_ctrl,
688 .ctrlbit = (1 << 5),
689 }, {
690 .name = "SYSMMU_FIMC0",
691 .enable = exynos4_clk_ip_cam_ctrl,
692 .ctrlbit = (1 << 7),
693 }, {
694 .name = "SYSMMU_FIMC1",
695 .enable = exynos4_clk_ip_cam_ctrl,
696 .ctrlbit = (1 << 8),
697 }, {
698 .name = "SYSMMU_FIMC2",
699 .enable = exynos4_clk_ip_cam_ctrl,
700 .ctrlbit = (1 << 9),
701 }, {
702 .name = "SYSMMU_FIMC3",
703 .enable = exynos4_clk_ip_cam_ctrl,
704 .ctrlbit = (1 << 10),
705 }, {
706 .name = "SYSMMU_JPEG",
707 .enable = exynos4_clk_ip_cam_ctrl,
708 .ctrlbit = (1 << 11),
709 }, {
710 .name = "SYSMMU_FIMD0",
711 .enable = exynos4_clk_ip_lcd0_ctrl,
712 .ctrlbit = (1 << 4),
713 }, {
714 .name = "SYSMMU_FIMD1",
715 .enable = exynos4_clk_ip_lcd1_ctrl,
716 .ctrlbit = (1 << 4),
717 }, {
718 .name = "SYSMMU_PCIe",
719 .enable = exynos4_clk_ip_fsys_ctrl,
720 .ctrlbit = (1 << 18),
721 }, {
722 .name = "SYSMMU_G2D",
723 .enable = exynos4_clk_ip_image_ctrl,
724 .ctrlbit = (1 << 3),
725 }, {
726 .name = "SYSMMU_ROTATOR",
727 .enable = exynos4_clk_ip_image_ctrl,
728 .ctrlbit = (1 << 4),
729 }, {
730 .name = "SYSMMU_TV",
731 .enable = exynos4_clk_ip_tv_ctrl,
732 .ctrlbit = (1 << 4),
733 }, {
734 .name = "SYSMMU_MFC_L",
735 .enable = exynos4_clk_ip_mfc_ctrl,
736 .ctrlbit = (1 << 1),
737 }, {
738 .name = "SYSMMU_MFC_R",
739 .enable = exynos4_clk_ip_mfc_ctrl,
740 .ctrlbit = (1 << 2),
741 }
742};
743
744static struct clk exynos4_init_clocks_on[] = {
745 {
746 .name = "uart",
747 .devname = "s5pv210-uart.0",
748 .enable = exynos4_clk_ip_peril_ctrl,
749 .ctrlbit = (1 << 0),
750 }, {
751 .name = "uart",
752 .devname = "s5pv210-uart.1",
753 .enable = exynos4_clk_ip_peril_ctrl,
754 .ctrlbit = (1 << 1),
755 }, {
756 .name = "uart",
757 .devname = "s5pv210-uart.2",
758 .enable = exynos4_clk_ip_peril_ctrl,
759 .ctrlbit = (1 << 2),
760 }, {
761 .name = "uart",
762 .devname = "s5pv210-uart.3",
763 .enable = exynos4_clk_ip_peril_ctrl,
764 .ctrlbit = (1 << 3),
765 }, {
766 .name = "uart",
767 .devname = "s5pv210-uart.4",
768 .enable = exynos4_clk_ip_peril_ctrl,
769 .ctrlbit = (1 << 4),
770 }, {
771 .name = "uart",
772 .devname = "s5pv210-uart.5",
773 .enable = exynos4_clk_ip_peril_ctrl,
774 .ctrlbit = (1 << 5),
775 }
776};
777
778static struct clk exynos4_clk_pdma0 = {
779 .name = "dma",
780 .devname = "dma-pl330.0",
781 .enable = exynos4_clk_ip_fsys_ctrl,
782 .ctrlbit = (1 << 0),
783};
784
785static struct clk exynos4_clk_pdma1 = {
786 .name = "dma",
787 .devname = "dma-pl330.1",
788 .enable = exynos4_clk_ip_fsys_ctrl,
789 .ctrlbit = (1 << 1),
790};
791
792struct clk *exynos4_clkset_group_list[] = {
793 [0] = &clk_ext_xtal_mux,
794 [1] = &clk_xusbxti,
795 [2] = &exynos4_clk_sclk_hdmi27m,
796 [3] = &exynos4_clk_sclk_usbphy0,
797 [4] = &exynos4_clk_sclk_usbphy1,
798 [5] = &exynos4_clk_sclk_hdmiphy,
799 [6] = &exynos4_clk_mout_mpll.clk,
800 [7] = &exynos4_clk_mout_epll.clk,
801 [8] = &exynos4_clk_sclk_vpll.clk,
802};
803
804struct clksrc_sources exynos4_clkset_group = {
805 .sources = exynos4_clkset_group_list,
806 .nr_sources = ARRAY_SIZE(exynos4_clkset_group_list),
807};
808
809static struct clk *exynos4_clkset_mout_g2d0_list[] = {
810 [0] = &exynos4_clk_mout_mpll.clk,
811 [1] = &exynos4_clk_sclk_apll.clk,
812};
813
814static struct clksrc_sources exynos4_clkset_mout_g2d0 = {
815 .sources = exynos4_clkset_mout_g2d0_list,
816 .nr_sources = ARRAY_SIZE(exynos4_clkset_mout_g2d0_list),
817};
818
819static struct clksrc_clk exynos4_clk_mout_g2d0 = {
820 .clk = {
821 .name = "mout_g2d0",
822 },
823 .sources = &exynos4_clkset_mout_g2d0,
824 .reg_src = { .reg = EXYNOS4_CLKSRC_IMAGE, .shift = 0, .size = 1 },
825};
826
827static struct clk *exynos4_clkset_mout_g2d1_list[] = {
828 [0] = &exynos4_clk_mout_epll.clk,
829 [1] = &exynos4_clk_sclk_vpll.clk,
830};
831
832static struct clksrc_sources exynos4_clkset_mout_g2d1 = {
833 .sources = exynos4_clkset_mout_g2d1_list,
834 .nr_sources = ARRAY_SIZE(exynos4_clkset_mout_g2d1_list),
835};
836
837static struct clksrc_clk exynos4_clk_mout_g2d1 = {
838 .clk = {
839 .name = "mout_g2d1",
840 },
841 .sources = &exynos4_clkset_mout_g2d1,
842 .reg_src = { .reg = EXYNOS4_CLKSRC_IMAGE, .shift = 4, .size = 1 },
843};
844
845static struct clk *exynos4_clkset_mout_g2d_list[] = {
846 [0] = &exynos4_clk_mout_g2d0.clk,
847 [1] = &exynos4_clk_mout_g2d1.clk,
848};
849
850static struct clksrc_sources exynos4_clkset_mout_g2d = {
851 .sources = exynos4_clkset_mout_g2d_list,
852 .nr_sources = ARRAY_SIZE(exynos4_clkset_mout_g2d_list),
853};
854
855static struct clk *exynos4_clkset_mout_mfc0_list[] = {
856 [0] = &exynos4_clk_mout_mpll.clk,
857 [1] = &exynos4_clk_sclk_apll.clk,
858};
859
860static struct clksrc_sources exynos4_clkset_mout_mfc0 = {
861 .sources = exynos4_clkset_mout_mfc0_list,
862 .nr_sources = ARRAY_SIZE(exynos4_clkset_mout_mfc0_list),
863};
864
865static struct clksrc_clk exynos4_clk_mout_mfc0 = {
866 .clk = {
867 .name = "mout_mfc0",
868 },
869 .sources = &exynos4_clkset_mout_mfc0,
870 .reg_src = { .reg = EXYNOS4_CLKSRC_MFC, .shift = 0, .size = 1 },
871};
872
873static struct clk *exynos4_clkset_mout_mfc1_list[] = {
874 [0] = &exynos4_clk_mout_epll.clk,
875 [1] = &exynos4_clk_sclk_vpll.clk,
876};
877
878static struct clksrc_sources exynos4_clkset_mout_mfc1 = {
879 .sources = exynos4_clkset_mout_mfc1_list,
880 .nr_sources = ARRAY_SIZE(exynos4_clkset_mout_mfc1_list),
881};
882
883static struct clksrc_clk exynos4_clk_mout_mfc1 = {
884 .clk = {
885 .name = "mout_mfc1",
886 },
887 .sources = &exynos4_clkset_mout_mfc1,
888 .reg_src = { .reg = EXYNOS4_CLKSRC_MFC, .shift = 4, .size = 1 },
889};
890
891static struct clk *exynos4_clkset_mout_mfc_list[] = {
892 [0] = &exynos4_clk_mout_mfc0.clk,
893 [1] = &exynos4_clk_mout_mfc1.clk,
894};
895
896static struct clksrc_sources exynos4_clkset_mout_mfc = {
897 .sources = exynos4_clkset_mout_mfc_list,
898 .nr_sources = ARRAY_SIZE(exynos4_clkset_mout_mfc_list),
899};
900
901static struct clk *exynos4_clkset_sclk_dac_list[] = {
902 [0] = &exynos4_clk_sclk_vpll.clk,
903 [1] = &exynos4_clk_sclk_hdmiphy,
904};
905
906static struct clksrc_sources exynos4_clkset_sclk_dac = {
907 .sources = exynos4_clkset_sclk_dac_list,
908 .nr_sources = ARRAY_SIZE(exynos4_clkset_sclk_dac_list),
909};
910
911static struct clksrc_clk exynos4_clk_sclk_dac = {
912 .clk = {
913 .name = "sclk_dac",
914 .enable = exynos4_clksrc_mask_tv_ctrl,
915 .ctrlbit = (1 << 8),
916 },
917 .sources = &exynos4_clkset_sclk_dac,
918 .reg_src = { .reg = EXYNOS4_CLKSRC_TV, .shift = 8, .size = 1 },
919};
920
921static struct clksrc_clk exynos4_clk_sclk_pixel = {
922 .clk = {
923 .name = "sclk_pixel",
924 .parent = &exynos4_clk_sclk_vpll.clk,
925 },
926 .reg_div = { .reg = EXYNOS4_CLKDIV_TV, .shift = 0, .size = 4 },
927};
928
929static struct clk *exynos4_clkset_sclk_hdmi_list[] = {
930 [0] = &exynos4_clk_sclk_pixel.clk,
931 [1] = &exynos4_clk_sclk_hdmiphy,
932};
933
934static struct clksrc_sources exynos4_clkset_sclk_hdmi = {
935 .sources = exynos4_clkset_sclk_hdmi_list,
936 .nr_sources = ARRAY_SIZE(exynos4_clkset_sclk_hdmi_list),
937};
938
939static struct clksrc_clk exynos4_clk_sclk_hdmi = {
940 .clk = {
941 .name = "sclk_hdmi",
942 .enable = exynos4_clksrc_mask_tv_ctrl,
943 .ctrlbit = (1 << 0),
944 },
945 .sources = &exynos4_clkset_sclk_hdmi,
946 .reg_src = { .reg = EXYNOS4_CLKSRC_TV, .shift = 0, .size = 1 },
947};
948
949static struct clk *exynos4_clkset_sclk_mixer_list[] = {
950 [0] = &exynos4_clk_sclk_dac.clk,
951 [1] = &exynos4_clk_sclk_hdmi.clk,
952};
953
954static struct clksrc_sources exynos4_clkset_sclk_mixer = {
955 .sources = exynos4_clkset_sclk_mixer_list,
956 .nr_sources = ARRAY_SIZE(exynos4_clkset_sclk_mixer_list),
957};
958
959static struct clksrc_clk exynos4_clk_sclk_mixer = {
960 .clk = {
961 .name = "sclk_mixer",
962 .enable = exynos4_clksrc_mask_tv_ctrl,
963 .ctrlbit = (1 << 4),
964 },
965 .sources = &exynos4_clkset_sclk_mixer,
966 .reg_src = { .reg = EXYNOS4_CLKSRC_TV, .shift = 4, .size = 1 },
967};
968
969static struct clksrc_clk *exynos4_sclk_tv[] = {
970 &exynos4_clk_sclk_dac,
971 &exynos4_clk_sclk_pixel,
972 &exynos4_clk_sclk_hdmi,
973 &exynos4_clk_sclk_mixer,
974};
975
976static struct clksrc_clk exynos4_clk_dout_mmc0 = {
977 .clk = {
978 .name = "dout_mmc0",
979 },
980 .sources = &exynos4_clkset_group,
981 .reg_src = { .reg = EXYNOS4_CLKSRC_FSYS, .shift = 0, .size = 4 },
982 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS1, .shift = 0, .size = 4 },
983};
984
985static struct clksrc_clk exynos4_clk_dout_mmc1 = {
986 .clk = {
987 .name = "dout_mmc1",
988 },
989 .sources = &exynos4_clkset_group,
990 .reg_src = { .reg = EXYNOS4_CLKSRC_FSYS, .shift = 4, .size = 4 },
991 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS1, .shift = 16, .size = 4 },
992};
993
994static struct clksrc_clk exynos4_clk_dout_mmc2 = {
995 .clk = {
996 .name = "dout_mmc2",
997 },
998 .sources = &exynos4_clkset_group,
999 .reg_src = { .reg = EXYNOS4_CLKSRC_FSYS, .shift = 8, .size = 4 },
1000 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS2, .shift = 0, .size = 4 },
1001};
1002
1003static struct clksrc_clk exynos4_clk_dout_mmc3 = {
1004 .clk = {
1005 .name = "dout_mmc3",
1006 },
1007 .sources = &exynos4_clkset_group,
1008 .reg_src = { .reg = EXYNOS4_CLKSRC_FSYS, .shift = 12, .size = 4 },
1009 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS2, .shift = 16, .size = 4 },
1010};
1011
1012static struct clksrc_clk exynos4_clk_dout_mmc4 = {
1013 .clk = {
1014 .name = "dout_mmc4",
1015 },
1016 .sources = &exynos4_clkset_group,
1017 .reg_src = { .reg = EXYNOS4_CLKSRC_FSYS, .shift = 16, .size = 4 },
1018 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS3, .shift = 0, .size = 4 },
1019};
1020
1021static struct clksrc_clk exynos4_clksrcs[] = {
1022 {
1023 .clk = {
1024 .name = "sclk_pwm",
1025 .enable = exynos4_clksrc_mask_peril0_ctrl,
1026 .ctrlbit = (1 << 24),
1027 },
1028 .sources = &exynos4_clkset_group,
1029 .reg_src = { .reg = EXYNOS4_CLKSRC_PERIL0, .shift = 24, .size = 4 },
1030 .reg_div = { .reg = EXYNOS4_CLKDIV_PERIL3, .shift = 0, .size = 4 },
1031 }, {
1032 .clk = {
1033 .name = "sclk_csis",
1034 .devname = "s5p-mipi-csis.0",
1035 .enable = exynos4_clksrc_mask_cam_ctrl,
1036 .ctrlbit = (1 << 24),
1037 },
1038 .sources = &exynos4_clkset_group,
1039 .reg_src = { .reg = EXYNOS4_CLKSRC_CAM, .shift = 24, .size = 4 },
1040 .reg_div = { .reg = EXYNOS4_CLKDIV_CAM, .shift = 24, .size = 4 },
1041 }, {
1042 .clk = {
1043 .name = "sclk_csis",
1044 .devname = "s5p-mipi-csis.1",
1045 .enable = exynos4_clksrc_mask_cam_ctrl,
1046 .ctrlbit = (1 << 28),
1047 },
1048 .sources = &exynos4_clkset_group,
1049 .reg_src = { .reg = EXYNOS4_CLKSRC_CAM, .shift = 28, .size = 4 },
1050 .reg_div = { .reg = EXYNOS4_CLKDIV_CAM, .shift = 28, .size = 4 },
1051 }, {
1052 .clk = {
1053 .name = "sclk_cam0",
1054 .enable = exynos4_clksrc_mask_cam_ctrl,
1055 .ctrlbit = (1 << 16),
1056 },
1057 .sources = &exynos4_clkset_group,
1058 .reg_src = { .reg = EXYNOS4_CLKSRC_CAM, .shift = 16, .size = 4 },
1059 .reg_div = { .reg = EXYNOS4_CLKDIV_CAM, .shift = 16, .size = 4 },
1060 }, {
1061 .clk = {
1062 .name = "sclk_cam1",
1063 .enable = exynos4_clksrc_mask_cam_ctrl,
1064 .ctrlbit = (1 << 20),
1065 },
1066 .sources = &exynos4_clkset_group,
1067 .reg_src = { .reg = EXYNOS4_CLKSRC_CAM, .shift = 20, .size = 4 },
1068 .reg_div = { .reg = EXYNOS4_CLKDIV_CAM, .shift = 20, .size = 4 },
1069 }, {
1070 .clk = {
1071 .name = "sclk_fimc",
1072 .devname = "exynos4-fimc.0",
1073 .enable = exynos4_clksrc_mask_cam_ctrl,
1074 .ctrlbit = (1 << 0),
1075 },
1076 .sources = &exynos4_clkset_group,
1077 .reg_src = { .reg = EXYNOS4_CLKSRC_CAM, .shift = 0, .size = 4 },
1078 .reg_div = { .reg = EXYNOS4_CLKDIV_CAM, .shift = 0, .size = 4 },
1079 }, {
1080 .clk = {
1081 .name = "sclk_fimc",
1082 .devname = "exynos4-fimc.1",
1083 .enable = exynos4_clksrc_mask_cam_ctrl,
1084 .ctrlbit = (1 << 4),
1085 },
1086 .sources = &exynos4_clkset_group,
1087 .reg_src = { .reg = EXYNOS4_CLKSRC_CAM, .shift = 4, .size = 4 },
1088 .reg_div = { .reg = EXYNOS4_CLKDIV_CAM, .shift = 4, .size = 4 },
1089 }, {
1090 .clk = {
1091 .name = "sclk_fimc",
1092 .devname = "exynos4-fimc.2",
1093 .enable = exynos4_clksrc_mask_cam_ctrl,
1094 .ctrlbit = (1 << 8),
1095 },
1096 .sources = &exynos4_clkset_group,
1097 .reg_src = { .reg = EXYNOS4_CLKSRC_CAM, .shift = 8, .size = 4 },
1098 .reg_div = { .reg = EXYNOS4_CLKDIV_CAM, .shift = 8, .size = 4 },
1099 }, {
1100 .clk = {
1101 .name = "sclk_fimc",
1102 .devname = "exynos4-fimc.3",
1103 .enable = exynos4_clksrc_mask_cam_ctrl,
1104 .ctrlbit = (1 << 12),
1105 },
1106 .sources = &exynos4_clkset_group,
1107 .reg_src = { .reg = EXYNOS4_CLKSRC_CAM, .shift = 12, .size = 4 },
1108 .reg_div = { .reg = EXYNOS4_CLKDIV_CAM, .shift = 12, .size = 4 },
1109 }, {
1110 .clk = {
1111 .name = "sclk_fimd",
1112 .devname = "exynos4-fb.0",
1113 .enable = exynos4_clksrc_mask_lcd0_ctrl,
1114 .ctrlbit = (1 << 0),
1115 },
1116 .sources = &exynos4_clkset_group,
1117 .reg_src = { .reg = EXYNOS4_CLKSRC_LCD0, .shift = 0, .size = 4 },
1118 .reg_div = { .reg = EXYNOS4_CLKDIV_LCD0, .shift = 0, .size = 4 },
1119 }, {
1120 .clk = {
1121 .name = "sclk_fimg2d",
1122 },
1123 .sources = &exynos4_clkset_mout_g2d,
1124 .reg_src = { .reg = EXYNOS4_CLKSRC_IMAGE, .shift = 8, .size = 1 },
1125 .reg_div = { .reg = EXYNOS4_CLKDIV_IMAGE, .shift = 0, .size = 4 },
1126 }, {
1127 .clk = {
1128 .name = "sclk_mfc",
1129 .devname = "s5p-mfc",
1130 },
1131 .sources = &exynos4_clkset_mout_mfc,
1132 .reg_src = { .reg = EXYNOS4_CLKSRC_MFC, .shift = 8, .size = 1 },
1133 .reg_div = { .reg = EXYNOS4_CLKDIV_MFC, .shift = 0, .size = 4 },
1134 }, {
1135 .clk = {
1136 .name = "sclk_dwmmc",
1137 .parent = &exynos4_clk_dout_mmc4.clk,
1138 .enable = exynos4_clksrc_mask_fsys_ctrl,
1139 .ctrlbit = (1 << 16),
1140 },
1141 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS3, .shift = 8, .size = 8 },
1142 }
1143};
1144
1145static struct clksrc_clk exynos4_clk_sclk_uart0 = {
1146 .clk = {
1147 .name = "uclk1",
1148 .devname = "exynos4210-uart.0",
1149 .enable = exynos4_clksrc_mask_peril0_ctrl,
1150 .ctrlbit = (1 << 0),
1151 },
1152 .sources = &exynos4_clkset_group,
1153 .reg_src = { .reg = EXYNOS4_CLKSRC_PERIL0, .shift = 0, .size = 4 },
1154 .reg_div = { .reg = EXYNOS4_CLKDIV_PERIL0, .shift = 0, .size = 4 },
1155};
1156
1157static struct clksrc_clk exynos4_clk_sclk_uart1 = {
1158 .clk = {
1159 .name = "uclk1",
1160 .devname = "exynos4210-uart.1",
1161 .enable = exynos4_clksrc_mask_peril0_ctrl,
1162 .ctrlbit = (1 << 4),
1163 },
1164 .sources = &exynos4_clkset_group,
1165 .reg_src = { .reg = EXYNOS4_CLKSRC_PERIL0, .shift = 4, .size = 4 },
1166 .reg_div = { .reg = EXYNOS4_CLKDIV_PERIL0, .shift = 4, .size = 4 },
1167};
1168
1169static struct clksrc_clk exynos4_clk_sclk_uart2 = {
1170 .clk = {
1171 .name = "uclk1",
1172 .devname = "exynos4210-uart.2",
1173 .enable = exynos4_clksrc_mask_peril0_ctrl,
1174 .ctrlbit = (1 << 8),
1175 },
1176 .sources = &exynos4_clkset_group,
1177 .reg_src = { .reg = EXYNOS4_CLKSRC_PERIL0, .shift = 8, .size = 4 },
1178 .reg_div = { .reg = EXYNOS4_CLKDIV_PERIL0, .shift = 8, .size = 4 },
1179};
1180
1181static struct clksrc_clk exynos4_clk_sclk_uart3 = {
1182 .clk = {
1183 .name = "uclk1",
1184 .devname = "exynos4210-uart.3",
1185 .enable = exynos4_clksrc_mask_peril0_ctrl,
1186 .ctrlbit = (1 << 12),
1187 },
1188 .sources = &exynos4_clkset_group,
1189 .reg_src = { .reg = EXYNOS4_CLKSRC_PERIL0, .shift = 12, .size = 4 },
1190 .reg_div = { .reg = EXYNOS4_CLKDIV_PERIL0, .shift = 12, .size = 4 },
1191};
1192
1193static struct clksrc_clk exynos4_clk_sclk_mmc0 = {
1194 .clk = {
1195 .name = "sclk_mmc",
1196 .devname = "s3c-sdhci.0",
1197 .parent = &exynos4_clk_dout_mmc0.clk,
1198 .enable = exynos4_clksrc_mask_fsys_ctrl,
1199 .ctrlbit = (1 << 0),
1200 },
1201 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS1, .shift = 8, .size = 8 },
1202};
1203
1204static struct clksrc_clk exynos4_clk_sclk_mmc1 = {
1205 .clk = {
1206 .name = "sclk_mmc",
1207 .devname = "s3c-sdhci.1",
1208 .parent = &exynos4_clk_dout_mmc1.clk,
1209 .enable = exynos4_clksrc_mask_fsys_ctrl,
1210 .ctrlbit = (1 << 4),
1211 },
1212 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS1, .shift = 24, .size = 8 },
1213};
1214
1215static struct clksrc_clk exynos4_clk_sclk_mmc2 = {
1216 .clk = {
1217 .name = "sclk_mmc",
1218 .devname = "s3c-sdhci.2",
1219 .parent = &exynos4_clk_dout_mmc2.clk,
1220 .enable = exynos4_clksrc_mask_fsys_ctrl,
1221 .ctrlbit = (1 << 8),
1222 },
1223 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS2, .shift = 8, .size = 8 },
1224};
1225
1226static struct clksrc_clk exynos4_clk_sclk_mmc3 = {
1227 .clk = {
1228 .name = "sclk_mmc",
1229 .devname = "s3c-sdhci.3",
1230 .parent = &exynos4_clk_dout_mmc3.clk,
1231 .enable = exynos4_clksrc_mask_fsys_ctrl,
1232 .ctrlbit = (1 << 12),
1233 },
1234 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS2, .shift = 24, .size = 8 },
1235};
1236
1237static struct clksrc_clk exynos4_clk_sclk_spi0 = {
1238 .clk = {
1239 .name = "sclk_spi",
1240 .devname = "s3c64xx-spi.0",
1241 .enable = exynos4_clksrc_mask_peril1_ctrl,
1242 .ctrlbit = (1 << 16),
1243 },
1244 .sources = &exynos4_clkset_group,
1245 .reg_src = { .reg = EXYNOS4_CLKSRC_PERIL1, .shift = 16, .size = 4 },
1246 .reg_div = { .reg = EXYNOS4_CLKDIV_PERIL1, .shift = 0, .size = 4 },
1247};
1248
1249static struct clksrc_clk exynos4_clk_sclk_spi1 = {
1250 .clk = {
1251 .name = "sclk_spi",
1252 .devname = "s3c64xx-spi.1",
1253 .enable = exynos4_clksrc_mask_peril1_ctrl,
1254 .ctrlbit = (1 << 20),
1255 },
1256 .sources = &exynos4_clkset_group,
1257 .reg_src = { .reg = EXYNOS4_CLKSRC_PERIL1, .shift = 20, .size = 4 },
1258 .reg_div = { .reg = EXYNOS4_CLKDIV_PERIL1, .shift = 16, .size = 4 },
1259};
1260
1261static struct clksrc_clk exynos4_clk_sclk_spi2 = {
1262 .clk = {
1263 .name = "sclk_spi",
1264 .devname = "s3c64xx-spi.2",
1265 .enable = exynos4_clksrc_mask_peril1_ctrl,
1266 .ctrlbit = (1 << 24),
1267 },
1268 .sources = &exynos4_clkset_group,
1269 .reg_src = { .reg = EXYNOS4_CLKSRC_PERIL1, .shift = 24, .size = 4 },
1270 .reg_div = { .reg = EXYNOS4_CLKDIV_PERIL2, .shift = 0, .size = 4 },
1271};
1272
1273/* Clock initialization code */
1274static struct clksrc_clk *exynos4_sysclks[] = {
1275 &exynos4_clk_mout_apll,
1276 &exynos4_clk_sclk_apll,
1277 &exynos4_clk_mout_epll,
1278 &exynos4_clk_mout_mpll,
1279 &exynos4_clk_moutcore,
1280 &exynos4_clk_coreclk,
1281 &exynos4_clk_armclk,
1282 &exynos4_clk_aclk_corem0,
1283 &exynos4_clk_aclk_cores,
1284 &exynos4_clk_aclk_corem1,
1285 &exynos4_clk_periphclk,
1286 &exynos4_clk_mout_corebus,
1287 &exynos4_clk_sclk_dmc,
1288 &exynos4_clk_aclk_cored,
1289 &exynos4_clk_aclk_corep,
1290 &exynos4_clk_aclk_acp,
1291 &exynos4_clk_pclk_acp,
1292 &exynos4_clk_vpllsrc,
1293 &exynos4_clk_sclk_vpll,
1294 &exynos4_clk_aclk_200,
1295 &exynos4_clk_aclk_100,
1296 &exynos4_clk_aclk_160,
1297 &exynos4_clk_aclk_133,
1298 &exynos4_clk_dout_mmc0,
1299 &exynos4_clk_dout_mmc1,
1300 &exynos4_clk_dout_mmc2,
1301 &exynos4_clk_dout_mmc3,
1302 &exynos4_clk_dout_mmc4,
1303 &exynos4_clk_mout_mfc0,
1304 &exynos4_clk_mout_mfc1,
1305};
1306
1307static struct clk *exynos4_clk_cdev[] = {
1308 &exynos4_clk_pdma0,
1309 &exynos4_clk_pdma1,
1310};
1311
1312static struct clksrc_clk *exynos4_clksrc_cdev[] = {
1313 &exynos4_clk_sclk_uart0,
1314 &exynos4_clk_sclk_uart1,
1315 &exynos4_clk_sclk_uart2,
1316 &exynos4_clk_sclk_uart3,
1317 &exynos4_clk_sclk_mmc0,
1318 &exynos4_clk_sclk_mmc1,
1319 &exynos4_clk_sclk_mmc2,
1320 &exynos4_clk_sclk_mmc3,
1321 &exynos4_clk_sclk_spi0,
1322 &exynos4_clk_sclk_spi1,
1323 &exynos4_clk_sclk_spi2,
1324
1325};
1326
1327static struct clk_lookup exynos4_clk_lookup[] = {
1328 CLKDEV_INIT("exynos4210-uart.0", "clk_uart_baud0", &exynos4_clk_sclk_uart0.clk),
1329 CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &exynos4_clk_sclk_uart1.clk),
1330 CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &exynos4_clk_sclk_uart2.clk),
1331 CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &exynos4_clk_sclk_uart3.clk),
1332 CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &exynos4_clk_sclk_mmc0.clk),
1333 CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &exynos4_clk_sclk_mmc1.clk),
1334 CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &exynos4_clk_sclk_mmc2.clk),
1335 CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &exynos4_clk_sclk_mmc3.clk),
1336 CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0),
1337 CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1),
1338 CLKDEV_INIT("s3c64xx-spi.0", "spi_busclk0", &exynos4_clk_sclk_spi0.clk),
1339 CLKDEV_INIT("s3c64xx-spi.1", "spi_busclk0", &exynos4_clk_sclk_spi1.clk),
1340 CLKDEV_INIT("s3c64xx-spi.2", "spi_busclk0", &exynos4_clk_sclk_spi2.clk),
1341};
1342
1343static int xtal_rate;
1344
1345static unsigned long exynos4_fout_apll_get_rate(struct clk *clk)
1346{
1347 if (soc_is_exynos4210())
1348 return s5p_get_pll45xx(xtal_rate, __raw_readl(EXYNOS4_APLL_CON0),
1349 pll_4508);
1350 else if (soc_is_exynos4212() || soc_is_exynos4412())
1351 return s5p_get_pll35xx(xtal_rate, __raw_readl(EXYNOS4_APLL_CON0));
1352 else
1353 return 0;
1354}
1355
1356static struct clk_ops exynos4_fout_apll_ops = {
1357 .get_rate = exynos4_fout_apll_get_rate,
1358};
1359
1360static u32 exynos4_vpll_div[][8] = {
1361 { 54000000, 3, 53, 3, 1024, 0, 17, 0 },
1362 { 108000000, 3, 53, 2, 1024, 0, 17, 0 },
1363};
1364
1365static unsigned long exynos4_vpll_get_rate(struct clk *clk)
1366{
1367 return clk->rate;
1368}
1369
1370static int exynos4_vpll_set_rate(struct clk *clk, unsigned long rate)
1371{
1372 unsigned int vpll_con0, vpll_con1 = 0;
1373 unsigned int i;
1374
1375 /* Return if nothing changed */
1376 if (clk->rate == rate)
1377 return 0;
1378
1379 vpll_con0 = __raw_readl(EXYNOS4_VPLL_CON0);
1380 vpll_con0 &= ~(0x1 << 27 | \
1381 PLL90XX_MDIV_MASK << PLL46XX_MDIV_SHIFT | \
1382 PLL90XX_PDIV_MASK << PLL46XX_PDIV_SHIFT | \
1383 PLL90XX_SDIV_MASK << PLL46XX_SDIV_SHIFT);
1384
1385 vpll_con1 = __raw_readl(EXYNOS4_VPLL_CON1);
1386 vpll_con1 &= ~(PLL46XX_MRR_MASK << PLL46XX_MRR_SHIFT | \
1387 PLL46XX_MFR_MASK << PLL46XX_MFR_SHIFT | \
1388 PLL4650C_KDIV_MASK << PLL46XX_KDIV_SHIFT);
1389
1390 for (i = 0; i < ARRAY_SIZE(exynos4_vpll_div); i++) {
1391 if (exynos4_vpll_div[i][0] == rate) {
1392 vpll_con0 |= exynos4_vpll_div[i][1] << PLL46XX_PDIV_SHIFT;
1393 vpll_con0 |= exynos4_vpll_div[i][2] << PLL46XX_MDIV_SHIFT;
1394 vpll_con0 |= exynos4_vpll_div[i][3] << PLL46XX_SDIV_SHIFT;
1395 vpll_con1 |= exynos4_vpll_div[i][4] << PLL46XX_KDIV_SHIFT;
1396 vpll_con1 |= exynos4_vpll_div[i][5] << PLL46XX_MFR_SHIFT;
1397 vpll_con1 |= exynos4_vpll_div[i][6] << PLL46XX_MRR_SHIFT;
1398 vpll_con0 |= exynos4_vpll_div[i][7] << 27;
1399 break;
1400 }
1401 }
1402
1403 if (i == ARRAY_SIZE(exynos4_vpll_div)) {
1404 printk(KERN_ERR "%s: Invalid Clock VPLL Frequency\n",
1405 __func__);
1406 return -EINVAL;
1407 }
1408
1409 __raw_writel(vpll_con0, EXYNOS4_VPLL_CON0);
1410 __raw_writel(vpll_con1, EXYNOS4_VPLL_CON1);
1411
1412 /* Wait for VPLL lock */
1413 while (!(__raw_readl(EXYNOS4_VPLL_CON0) & (1 << PLL46XX_LOCKED_SHIFT)))
1414 continue;
1415
1416 clk->rate = rate;
1417 return 0;
1418}
1419
1420static struct clk_ops exynos4_vpll_ops = {
1421 .get_rate = exynos4_vpll_get_rate,
1422 .set_rate = exynos4_vpll_set_rate,
1423};
1424
1425void __init_or_cpufreq exynos4_setup_clocks(void)
1426{
1427 struct clk *xtal_clk;
1428 unsigned long apll = 0;
1429 unsigned long mpll = 0;
1430 unsigned long epll = 0;
1431 unsigned long vpll = 0;
1432 unsigned long vpllsrc;
1433 unsigned long xtal;
1434 unsigned long armclk;
1435 unsigned long sclk_dmc;
1436 unsigned long aclk_200;
1437 unsigned long aclk_100;
1438 unsigned long aclk_160;
1439 unsigned long aclk_133;
1440 unsigned int ptr;
1441
1442 printk(KERN_DEBUG "%s: registering clocks\n", __func__);
1443
1444 xtal_clk = clk_get(NULL, "xtal");
1445 BUG_ON(IS_ERR(xtal_clk));
1446
1447 xtal = clk_get_rate(xtal_clk);
1448
1449 xtal_rate = xtal;
1450
1451 clk_put(xtal_clk);
1452
1453 printk(KERN_DEBUG "%s: xtal is %ld\n", __func__, xtal);
1454
1455 if (soc_is_exynos4210()) {
1456 apll = s5p_get_pll45xx(xtal, __raw_readl(EXYNOS4_APLL_CON0),
1457 pll_4508);
1458 mpll = s5p_get_pll45xx(xtal, __raw_readl(EXYNOS4_MPLL_CON0),
1459 pll_4508);
1460 epll = s5p_get_pll46xx(xtal, __raw_readl(EXYNOS4_EPLL_CON0),
1461 __raw_readl(EXYNOS4_EPLL_CON1), pll_4600);
1462
1463 vpllsrc = clk_get_rate(&exynos4_clk_vpllsrc.clk);
1464 vpll = s5p_get_pll46xx(vpllsrc, __raw_readl(EXYNOS4_VPLL_CON0),
1465 __raw_readl(EXYNOS4_VPLL_CON1), pll_4650c);
1466 } else if (soc_is_exynos4212() || soc_is_exynos4412()) {
1467 apll = s5p_get_pll35xx(xtal, __raw_readl(EXYNOS4_APLL_CON0));
1468 mpll = s5p_get_pll35xx(xtal, __raw_readl(EXYNOS4_MPLL_CON0));
1469 epll = s5p_get_pll36xx(xtal, __raw_readl(EXYNOS4_EPLL_CON0),
1470 __raw_readl(EXYNOS4_EPLL_CON1));
1471
1472 vpllsrc = clk_get_rate(&exynos4_clk_vpllsrc.clk);
1473 vpll = s5p_get_pll36xx(vpllsrc, __raw_readl(EXYNOS4_VPLL_CON0),
1474 __raw_readl(EXYNOS4_VPLL_CON1));
1475 } else {
1476 /* nothing */
1477 }
1478
1479 clk_fout_apll.ops = &exynos4_fout_apll_ops;
1480 clk_fout_mpll.rate = mpll;
1481 clk_fout_epll.rate = epll;
1482 clk_fout_vpll.ops = &exynos4_vpll_ops;
1483 clk_fout_vpll.rate = vpll;
1484
1485 printk(KERN_INFO "EXYNOS4: PLL settings, A=%ld, M=%ld, E=%ld V=%ld",
1486 apll, mpll, epll, vpll);
1487
1488 armclk = clk_get_rate(&exynos4_clk_armclk.clk);
1489 sclk_dmc = clk_get_rate(&exynos4_clk_sclk_dmc.clk);
1490
1491 aclk_200 = clk_get_rate(&exynos4_clk_aclk_200.clk);
1492 aclk_100 = clk_get_rate(&exynos4_clk_aclk_100.clk);
1493 aclk_160 = clk_get_rate(&exynos4_clk_aclk_160.clk);
1494 aclk_133 = clk_get_rate(&exynos4_clk_aclk_133.clk);
1495
1496 printk(KERN_INFO "EXYNOS4: ARMCLK=%ld, DMC=%ld, ACLK200=%ld\n"
1497 "ACLK100=%ld, ACLK160=%ld, ACLK133=%ld\n",
1498 armclk, sclk_dmc, aclk_200,
1499 aclk_100, aclk_160, aclk_133);
1500
1501 clk_f.rate = armclk;
1502 clk_h.rate = sclk_dmc;
1503 clk_p.rate = aclk_100;
1504
1505 for (ptr = 0; ptr < ARRAY_SIZE(exynos4_clksrcs); ptr++)
1506 s3c_set_clksrc(&exynos4_clksrcs[ptr], true);
1507}
1508
1509static struct clk *exynos4_clks[] __initdata = {
1510 &exynos4_clk_sclk_hdmi27m,
1511 &exynos4_clk_sclk_hdmiphy,
1512 &exynos4_clk_sclk_usbphy0,
1513 &exynos4_clk_sclk_usbphy1,
1514};
1515
1516#ifdef CONFIG_PM_SLEEP
1517static int exynos4_clock_suspend(void)
1518{
1519 s3c_pm_do_save(exynos4_clock_save, ARRAY_SIZE(exynos4_clock_save));
1520 return 0;
1521}
1522
1523static void exynos4_clock_resume(void)
1524{
1525 s3c_pm_do_restore_core(exynos4_clock_save, ARRAY_SIZE(exynos4_clock_save));
1526}
1527
1528#else
1529#define exynos4_clock_suspend NULL
1530#define exynos4_clock_resume NULL
1531#endif
1532
1533static struct syscore_ops exynos4_clock_syscore_ops = {
1534 .suspend = exynos4_clock_suspend,
1535 .resume = exynos4_clock_resume,
1536};
1537
1538void __init exynos4_register_clocks(void)
1539{
1540 int ptr;
1541
1542 s3c24xx_register_clocks(exynos4_clks, ARRAY_SIZE(exynos4_clks));
1543
1544 for (ptr = 0; ptr < ARRAY_SIZE(exynos4_sysclks); ptr++)
1545 s3c_register_clksrc(exynos4_sysclks[ptr], 1);
1546
1547 for (ptr = 0; ptr < ARRAY_SIZE(exynos4_sclk_tv); ptr++)
1548 s3c_register_clksrc(exynos4_sclk_tv[ptr], 1);
1549
1550 for (ptr = 0; ptr < ARRAY_SIZE(exynos4_clksrc_cdev); ptr++)
1551 s3c_register_clksrc(exynos4_clksrc_cdev[ptr], 1);
1552
1553 s3c_register_clksrc(exynos4_clksrcs, ARRAY_SIZE(exynos4_clksrcs));
1554 s3c_register_clocks(exynos4_init_clocks_on, ARRAY_SIZE(exynos4_init_clocks_on));
1555
1556 s3c24xx_register_clocks(exynos4_clk_cdev, ARRAY_SIZE(exynos4_clk_cdev));
1557 for (ptr = 0; ptr < ARRAY_SIZE(exynos4_clk_cdev); ptr++)
1558 s3c_disable_clocks(exynos4_clk_cdev[ptr], 1);
1559
1560 s3c_register_clocks(exynos4_init_clocks_off, ARRAY_SIZE(exynos4_init_clocks_off));
1561 s3c_disable_clocks(exynos4_init_clocks_off, ARRAY_SIZE(exynos4_init_clocks_off));
1562 clkdev_add_table(exynos4_clk_lookup, ARRAY_SIZE(exynos4_clk_lookup));
1563
1564 register_syscore_ops(&exynos4_clock_syscore_ops);
1565 s3c24xx_register_clock(&dummy_apb_pclk);
1566
1567 s3c_pwmclk_init();
1568}
diff --git a/arch/arm/mach-exynos/clock-exynos4.h b/arch/arm/mach-exynos/clock-exynos4.h
new file mode 100644
index 000000000000..cb71c29c14d1
--- /dev/null
+++ b/arch/arm/mach-exynos/clock-exynos4.h
@@ -0,0 +1,30 @@
1/*
2 * Copyright (c) 2011-2012 Samsung Electronics Co., Ltd.
3 * http://www.samsung.com
4 *
5 * Header file for exynos4 clock support
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10*/
11
12#ifndef __ASM_ARCH_CLOCK_H
13#define __ASM_ARCH_CLOCK_H __FILE__
14
15#include <linux/clk.h>
16
17extern struct clksrc_clk exynos4_clk_aclk_133;
18extern struct clksrc_clk exynos4_clk_mout_mpll;
19
20extern struct clksrc_sources exynos4_clkset_mout_corebus;
21extern struct clksrc_sources exynos4_clkset_group;
22
23extern struct clk *exynos4_clkset_aclk_top_list[];
24extern struct clk *exynos4_clkset_group_list[];
25
26extern int exynos4_clksrc_mask_fsys_ctrl(struct clk *clk, int enable);
27extern int exynos4_clk_ip_fsys_ctrl(struct clk *clk, int enable);
28extern int exynos4_clk_ip_lcd1_ctrl(struct clk *clk, int enable);
29
30#endif /* __ASM_ARCH_CLOCK_H */
diff --git a/arch/arm/mach-exynos/clock-exynos4210.c b/arch/arm/mach-exynos/clock-exynos4210.c
index 13312ccb2d93..3b131e4b6ef5 100644
--- a/arch/arm/mach-exynos/clock-exynos4210.c
+++ b/arch/arm/mach-exynos/clock-exynos4210.c
@@ -1,7 +1,5 @@
1/* 1/*
2 * linux/arch/arm/mach-exynos4/clock-exynos4210.c 2 * Copyright (c) 2011-2012 Samsung Electronics Co., Ltd.
3 *
4 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
5 * http://www.samsung.com 3 * http://www.samsung.com
6 * 4 *
7 * EXYNOS4210 - Clock support 5 * EXYNOS4210 - Clock support
@@ -28,20 +26,20 @@
28#include <mach/hardware.h> 26#include <mach/hardware.h>
29#include <mach/map.h> 27#include <mach/map.h>
30#include <mach/regs-clock.h> 28#include <mach/regs-clock.h>
31#include <mach/exynos4-clock.h>
32 29
33#include "common.h" 30#include "common.h"
31#include "clock-exynos4.h"
34 32
35#ifdef CONFIG_PM_SLEEP 33#ifdef CONFIG_PM_SLEEP
36static struct sleep_save exynos4210_clock_save[] = { 34static struct sleep_save exynos4210_clock_save[] = {
37 SAVE_ITEM(S5P_CLKSRC_IMAGE), 35 SAVE_ITEM(EXYNOS4_CLKSRC_IMAGE),
38 SAVE_ITEM(S5P_CLKSRC_LCD1), 36 SAVE_ITEM(EXYNOS4_CLKDIV_IMAGE),
39 SAVE_ITEM(S5P_CLKDIV_IMAGE), 37 SAVE_ITEM(EXYNOS4210_CLKSRC_LCD1),
40 SAVE_ITEM(S5P_CLKDIV_LCD1), 38 SAVE_ITEM(EXYNOS4210_CLKDIV_LCD1),
41 SAVE_ITEM(S5P_CLKSRC_MASK_LCD1), 39 SAVE_ITEM(EXYNOS4210_CLKSRC_MASK_LCD1),
42 SAVE_ITEM(S5P_CLKGATE_IP_IMAGE_4210), 40 SAVE_ITEM(EXYNOS4210_CLKGATE_IP_IMAGE),
43 SAVE_ITEM(S5P_CLKGATE_IP_LCD1), 41 SAVE_ITEM(EXYNOS4210_CLKGATE_IP_LCD1),
44 SAVE_ITEM(S5P_CLKGATE_IP_PERIR_4210), 42 SAVE_ITEM(EXYNOS4210_CLKGATE_IP_PERIR),
45}; 43};
46#endif 44#endif
47 45
@@ -51,7 +49,7 @@ static struct clksrc_clk *sysclks[] = {
51 49
52static int exynos4_clksrc_mask_lcd1_ctrl(struct clk *clk, int enable) 50static int exynos4_clksrc_mask_lcd1_ctrl(struct clk *clk, int enable)
53{ 51{
54 return s5p_gatectrl(S5P_CLKSRC_MASK_LCD1, clk, enable); 52 return s5p_gatectrl(EXYNOS4210_CLKSRC_MASK_LCD1, clk, enable);
55} 53}
56 54
57static struct clksrc_clk clksrcs[] = { 55static struct clksrc_clk clksrcs[] = {
@@ -62,9 +60,9 @@ static struct clksrc_clk clksrcs[] = {
62 .enable = exynos4_clksrc_mask_fsys_ctrl, 60 .enable = exynos4_clksrc_mask_fsys_ctrl,
63 .ctrlbit = (1 << 24), 61 .ctrlbit = (1 << 24),
64 }, 62 },
65 .sources = &clkset_mout_corebus, 63 .sources = &exynos4_clkset_mout_corebus,
66 .reg_src = { .reg = S5P_CLKSRC_FSYS, .shift = 24, .size = 1 }, 64 .reg_src = { .reg = EXYNOS4_CLKSRC_FSYS, .shift = 24, .size = 1 },
67 .reg_div = { .reg = S5P_CLKDIV_FSYS0, .shift = 20, .size = 4 }, 65 .reg_div = { .reg = EXYNOS4_CLKDIV_FSYS0, .shift = 20, .size = 4 },
68 }, { 66 }, {
69 .clk = { 67 .clk = {
70 .name = "sclk_fimd", 68 .name = "sclk_fimd",
@@ -72,9 +70,9 @@ static struct clksrc_clk clksrcs[] = {
72 .enable = exynos4_clksrc_mask_lcd1_ctrl, 70 .enable = exynos4_clksrc_mask_lcd1_ctrl,
73 .ctrlbit = (1 << 0), 71 .ctrlbit = (1 << 0),
74 }, 72 },
75 .sources = &clkset_group, 73 .sources = &exynos4_clkset_group,
76 .reg_src = { .reg = S5P_CLKSRC_LCD1, .shift = 0, .size = 4 }, 74 .reg_src = { .reg = EXYNOS4210_CLKSRC_LCD1, .shift = 0, .size = 4 },
77 .reg_div = { .reg = S5P_CLKDIV_LCD1, .shift = 0, .size = 4 }, 75 .reg_div = { .reg = EXYNOS4210_CLKDIV_LCD1, .shift = 0, .size = 4 },
78 }, 76 },
79}; 77};
80 78
@@ -82,13 +80,13 @@ static struct clk init_clocks_off[] = {
82 { 80 {
83 .name = "sataphy", 81 .name = "sataphy",
84 .id = -1, 82 .id = -1,
85 .parent = &clk_aclk_133.clk, 83 .parent = &exynos4_clk_aclk_133.clk,
86 .enable = exynos4_clk_ip_fsys_ctrl, 84 .enable = exynos4_clk_ip_fsys_ctrl,
87 .ctrlbit = (1 << 3), 85 .ctrlbit = (1 << 3),
88 }, { 86 }, {
89 .name = "sata", 87 .name = "sata",
90 .id = -1, 88 .id = -1,
91 .parent = &clk_aclk_133.clk, 89 .parent = &exynos4_clk_aclk_133.clk,
92 .enable = exynos4_clk_ip_fsys_ctrl, 90 .enable = exynos4_clk_ip_fsys_ctrl,
93 .ctrlbit = (1 << 10), 91 .ctrlbit = (1 << 10),
94 }, { 92 }, {
@@ -117,7 +115,7 @@ static void exynos4210_clock_resume(void)
117#define exynos4210_clock_resume NULL 115#define exynos4210_clock_resume NULL
118#endif 116#endif
119 117
120struct syscore_ops exynos4210_clock_syscore_ops = { 118static struct syscore_ops exynos4210_clock_syscore_ops = {
121 .suspend = exynos4210_clock_suspend, 119 .suspend = exynos4210_clock_suspend,
122 .resume = exynos4210_clock_resume, 120 .resume = exynos4210_clock_resume,
123}; 121};
@@ -126,9 +124,9 @@ void __init exynos4210_register_clocks(void)
126{ 124{
127 int ptr; 125 int ptr;
128 126
129 clk_mout_mpll.reg_src.reg = S5P_CLKSRC_CPU; 127 exynos4_clk_mout_mpll.reg_src.reg = EXYNOS4_CLKSRC_CPU;
130 clk_mout_mpll.reg_src.shift = 8; 128 exynos4_clk_mout_mpll.reg_src.shift = 8;
131 clk_mout_mpll.reg_src.size = 1; 129 exynos4_clk_mout_mpll.reg_src.size = 1;
132 130
133 for (ptr = 0; ptr < ARRAY_SIZE(sysclks); ptr++) 131 for (ptr = 0; ptr < ARRAY_SIZE(sysclks); ptr++)
134 s3c_register_clksrc(sysclks[ptr], 1); 132 s3c_register_clksrc(sysclks[ptr], 1);
diff --git a/arch/arm/mach-exynos/clock-exynos4212.c b/arch/arm/mach-exynos/clock-exynos4212.c
index 48af28566fa1..3ecc01e06f74 100644
--- a/arch/arm/mach-exynos/clock-exynos4212.c
+++ b/arch/arm/mach-exynos/clock-exynos4212.c
@@ -1,7 +1,5 @@
1/* 1/*
2 * linux/arch/arm/mach-exynos4/clock-exynos4212.c 2 * Copyright (c) 2011-2012 Samsung Electronics Co., Ltd.
3 *
4 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
5 * http://www.samsung.com 3 * http://www.samsung.com
6 * 4 *
7 * EXYNOS4212 - Clock support 5 * EXYNOS4212 - Clock support
@@ -28,22 +26,22 @@
28#include <mach/hardware.h> 26#include <mach/hardware.h>
29#include <mach/map.h> 27#include <mach/map.h>
30#include <mach/regs-clock.h> 28#include <mach/regs-clock.h>
31#include <mach/exynos4-clock.h>
32 29
33#include "common.h" 30#include "common.h"
31#include "clock-exynos4.h"
34 32
35#ifdef CONFIG_PM_SLEEP 33#ifdef CONFIG_PM_SLEEP
36static struct sleep_save exynos4212_clock_save[] = { 34static struct sleep_save exynos4212_clock_save[] = {
37 SAVE_ITEM(S5P_CLKSRC_IMAGE), 35 SAVE_ITEM(EXYNOS4_CLKSRC_IMAGE),
38 SAVE_ITEM(S5P_CLKDIV_IMAGE), 36 SAVE_ITEM(EXYNOS4_CLKDIV_IMAGE),
39 SAVE_ITEM(S5P_CLKGATE_IP_IMAGE_4212), 37 SAVE_ITEM(EXYNOS4212_CLKGATE_IP_IMAGE),
40 SAVE_ITEM(S5P_CLKGATE_IP_PERIR_4212), 38 SAVE_ITEM(EXYNOS4212_CLKGATE_IP_PERIR),
41}; 39};
42#endif 40#endif
43 41
44static struct clk *clk_src_mpll_user_list[] = { 42static struct clk *clk_src_mpll_user_list[] = {
45 [0] = &clk_fin_mpll, 43 [0] = &clk_fin_mpll,
46 [1] = &clk_mout_mpll.clk, 44 [1] = &exynos4_clk_mout_mpll.clk,
47}; 45};
48 46
49static struct clksrc_sources clk_src_mpll_user = { 47static struct clksrc_sources clk_src_mpll_user = {
@@ -56,7 +54,7 @@ static struct clksrc_clk clk_mout_mpll_user = {
56 .name = "mout_mpll_user", 54 .name = "mout_mpll_user",
57 }, 55 },
58 .sources = &clk_src_mpll_user, 56 .sources = &clk_src_mpll_user,
59 .reg_src = { .reg = S5P_CLKSRC_CPU, .shift = 24, .size = 1 }, 57 .reg_src = { .reg = EXYNOS4_CLKSRC_CPU, .shift = 24, .size = 1 },
60}; 58};
61 59
62static struct clksrc_clk *sysclks[] = { 60static struct clksrc_clk *sysclks[] = {
@@ -89,7 +87,7 @@ static void exynos4212_clock_resume(void)
89#define exynos4212_clock_resume NULL 87#define exynos4212_clock_resume NULL
90#endif 88#endif
91 89
92struct syscore_ops exynos4212_clock_syscore_ops = { 90static struct syscore_ops exynos4212_clock_syscore_ops = {
93 .suspend = exynos4212_clock_suspend, 91 .suspend = exynos4212_clock_suspend,
94 .resume = exynos4212_clock_resume, 92 .resume = exynos4212_clock_resume,
95}; 93};
@@ -99,15 +97,15 @@ void __init exynos4212_register_clocks(void)
99 int ptr; 97 int ptr;
100 98
101 /* usbphy1 is removed */ 99 /* usbphy1 is removed */
102 clkset_group_list[4] = NULL; 100 exynos4_clkset_group_list[4] = NULL;
103 101
104 /* mout_mpll_user is used */ 102 /* mout_mpll_user is used */
105 clkset_group_list[6] = &clk_mout_mpll_user.clk; 103 exynos4_clkset_group_list[6] = &clk_mout_mpll_user.clk;
106 clkset_aclk_top_list[0] = &clk_mout_mpll_user.clk; 104 exynos4_clkset_aclk_top_list[0] = &clk_mout_mpll_user.clk;
107 105
108 clk_mout_mpll.reg_src.reg = S5P_CLKSRC_DMC; 106 exynos4_clk_mout_mpll.reg_src.reg = EXYNOS4_CLKSRC_DMC;
109 clk_mout_mpll.reg_src.shift = 12; 107 exynos4_clk_mout_mpll.reg_src.shift = 12;
110 clk_mout_mpll.reg_src.size = 1; 108 exynos4_clk_mout_mpll.reg_src.size = 1;
111 109
112 for (ptr = 0; ptr < ARRAY_SIZE(sysclks); ptr++) 110 for (ptr = 0; ptr < ARRAY_SIZE(sysclks); ptr++)
113 s3c_register_clksrc(sysclks[ptr], 1); 111 s3c_register_clksrc(sysclks[ptr], 1);
diff --git a/arch/arm/mach-exynos/clock.c b/arch/arm/mach-exynos/clock.c
deleted file mode 100644
index ac249e46a21c..000000000000
--- a/arch/arm/mach-exynos/clock.c
+++ /dev/null
@@ -1,1569 +0,0 @@
1/* linux/arch/arm/mach-exynos4/clock.c
2 *
3 * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
4 * http://www.samsung.com
5 *
6 * EXYNOS4 - Clock support
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11*/
12
13#include <linux/kernel.h>
14#include <linux/err.h>
15#include <linux/io.h>
16#include <linux/syscore_ops.h>
17
18#include <plat/cpu-freq.h>
19#include <plat/clock.h>
20#include <plat/cpu.h>
21#include <plat/pll.h>
22#include <plat/s5p-clock.h>
23#include <plat/clock-clksrc.h>
24#include <plat/pm.h>
25
26#include <mach/map.h>
27#include <mach/regs-clock.h>
28#include <mach/sysmmu.h>
29#include <mach/exynos4-clock.h>
30
31#include "common.h"
32
33#ifdef CONFIG_PM_SLEEP
34static struct sleep_save exynos4_clock_save[] = {
35 SAVE_ITEM(S5P_CLKDIV_LEFTBUS),
36 SAVE_ITEM(S5P_CLKGATE_IP_LEFTBUS),
37 SAVE_ITEM(S5P_CLKDIV_RIGHTBUS),
38 SAVE_ITEM(S5P_CLKGATE_IP_RIGHTBUS),
39 SAVE_ITEM(S5P_CLKSRC_TOP0),
40 SAVE_ITEM(S5P_CLKSRC_TOP1),
41 SAVE_ITEM(S5P_CLKSRC_CAM),
42 SAVE_ITEM(S5P_CLKSRC_TV),
43 SAVE_ITEM(S5P_CLKSRC_MFC),
44 SAVE_ITEM(S5P_CLKSRC_G3D),
45 SAVE_ITEM(S5P_CLKSRC_LCD0),
46 SAVE_ITEM(S5P_CLKSRC_MAUDIO),
47 SAVE_ITEM(S5P_CLKSRC_FSYS),
48 SAVE_ITEM(S5P_CLKSRC_PERIL0),
49 SAVE_ITEM(S5P_CLKSRC_PERIL1),
50 SAVE_ITEM(S5P_CLKDIV_CAM),
51 SAVE_ITEM(S5P_CLKDIV_TV),
52 SAVE_ITEM(S5P_CLKDIV_MFC),
53 SAVE_ITEM(S5P_CLKDIV_G3D),
54 SAVE_ITEM(S5P_CLKDIV_LCD0),
55 SAVE_ITEM(S5P_CLKDIV_MAUDIO),
56 SAVE_ITEM(S5P_CLKDIV_FSYS0),
57 SAVE_ITEM(S5P_CLKDIV_FSYS1),
58 SAVE_ITEM(S5P_CLKDIV_FSYS2),
59 SAVE_ITEM(S5P_CLKDIV_FSYS3),
60 SAVE_ITEM(S5P_CLKDIV_PERIL0),
61 SAVE_ITEM(S5P_CLKDIV_PERIL1),
62 SAVE_ITEM(S5P_CLKDIV_PERIL2),
63 SAVE_ITEM(S5P_CLKDIV_PERIL3),
64 SAVE_ITEM(S5P_CLKDIV_PERIL4),
65 SAVE_ITEM(S5P_CLKDIV_PERIL5),
66 SAVE_ITEM(S5P_CLKDIV_TOP),
67 SAVE_ITEM(S5P_CLKSRC_MASK_TOP),
68 SAVE_ITEM(S5P_CLKSRC_MASK_CAM),
69 SAVE_ITEM(S5P_CLKSRC_MASK_TV),
70 SAVE_ITEM(S5P_CLKSRC_MASK_LCD0),
71 SAVE_ITEM(S5P_CLKSRC_MASK_MAUDIO),
72 SAVE_ITEM(S5P_CLKSRC_MASK_FSYS),
73 SAVE_ITEM(S5P_CLKSRC_MASK_PERIL0),
74 SAVE_ITEM(S5P_CLKSRC_MASK_PERIL1),
75 SAVE_ITEM(S5P_CLKDIV2_RATIO),
76 SAVE_ITEM(S5P_CLKGATE_SCLKCAM),
77 SAVE_ITEM(S5P_CLKGATE_IP_CAM),
78 SAVE_ITEM(S5P_CLKGATE_IP_TV),
79 SAVE_ITEM(S5P_CLKGATE_IP_MFC),
80 SAVE_ITEM(S5P_CLKGATE_IP_G3D),
81 SAVE_ITEM(S5P_CLKGATE_IP_LCD0),
82 SAVE_ITEM(S5P_CLKGATE_IP_FSYS),
83 SAVE_ITEM(S5P_CLKGATE_IP_GPS),
84 SAVE_ITEM(S5P_CLKGATE_IP_PERIL),
85 SAVE_ITEM(S5P_CLKGATE_BLOCK),
86 SAVE_ITEM(S5P_CLKSRC_MASK_DMC),
87 SAVE_ITEM(S5P_CLKSRC_DMC),
88 SAVE_ITEM(S5P_CLKDIV_DMC0),
89 SAVE_ITEM(S5P_CLKDIV_DMC1),
90 SAVE_ITEM(S5P_CLKGATE_IP_DMC),
91 SAVE_ITEM(S5P_CLKSRC_CPU),
92 SAVE_ITEM(S5P_CLKDIV_CPU),
93 SAVE_ITEM(S5P_CLKDIV_CPU + 0x4),
94 SAVE_ITEM(S5P_CLKGATE_SCLKCPU),
95 SAVE_ITEM(S5P_CLKGATE_IP_CPU),
96};
97#endif
98
99struct clk clk_sclk_hdmi27m = {
100 .name = "sclk_hdmi27m",
101 .rate = 27000000,
102};
103
104struct clk clk_sclk_hdmiphy = {
105 .name = "sclk_hdmiphy",
106};
107
108struct clk clk_sclk_usbphy0 = {
109 .name = "sclk_usbphy0",
110 .rate = 27000000,
111};
112
113struct clk clk_sclk_usbphy1 = {
114 .name = "sclk_usbphy1",
115};
116
117static struct clk dummy_apb_pclk = {
118 .name = "apb_pclk",
119 .id = -1,
120};
121
122static int exynos4_clksrc_mask_top_ctrl(struct clk *clk, int enable)
123{
124 return s5p_gatectrl(S5P_CLKSRC_MASK_TOP, clk, enable);
125}
126
127static int exynos4_clksrc_mask_cam_ctrl(struct clk *clk, int enable)
128{
129 return s5p_gatectrl(S5P_CLKSRC_MASK_CAM, clk, enable);
130}
131
132static int exynos4_clksrc_mask_lcd0_ctrl(struct clk *clk, int enable)
133{
134 return s5p_gatectrl(S5P_CLKSRC_MASK_LCD0, clk, enable);
135}
136
137int exynos4_clksrc_mask_fsys_ctrl(struct clk *clk, int enable)
138{
139 return s5p_gatectrl(S5P_CLKSRC_MASK_FSYS, clk, enable);
140}
141
142static int exynos4_clksrc_mask_peril0_ctrl(struct clk *clk, int enable)
143{
144 return s5p_gatectrl(S5P_CLKSRC_MASK_PERIL0, clk, enable);
145}
146
147static int exynos4_clksrc_mask_peril1_ctrl(struct clk *clk, int enable)
148{
149 return s5p_gatectrl(S5P_CLKSRC_MASK_PERIL1, clk, enable);
150}
151
152static int exynos4_clk_ip_mfc_ctrl(struct clk *clk, int enable)
153{
154 return s5p_gatectrl(S5P_CLKGATE_IP_MFC, clk, enable);
155}
156
157static int exynos4_clksrc_mask_tv_ctrl(struct clk *clk, int enable)
158{
159 return s5p_gatectrl(S5P_CLKSRC_MASK_TV, clk, enable);
160}
161
162static int exynos4_clk_ip_cam_ctrl(struct clk *clk, int enable)
163{
164 return s5p_gatectrl(S5P_CLKGATE_IP_CAM, clk, enable);
165}
166
167static int exynos4_clk_ip_tv_ctrl(struct clk *clk, int enable)
168{
169 return s5p_gatectrl(S5P_CLKGATE_IP_TV, clk, enable);
170}
171
172static int exynos4_clk_ip_image_ctrl(struct clk *clk, int enable)
173{
174 return s5p_gatectrl(S5P_CLKGATE_IP_IMAGE, clk, enable);
175}
176
177static int exynos4_clk_ip_lcd0_ctrl(struct clk *clk, int enable)
178{
179 return s5p_gatectrl(S5P_CLKGATE_IP_LCD0, clk, enable);
180}
181
182int exynos4_clk_ip_lcd1_ctrl(struct clk *clk, int enable)
183{
184 return s5p_gatectrl(S5P_CLKGATE_IP_LCD1, clk, enable);
185}
186
187int exynos4_clk_ip_fsys_ctrl(struct clk *clk, int enable)
188{
189 return s5p_gatectrl(S5P_CLKGATE_IP_FSYS, clk, enable);
190}
191
192static int exynos4_clk_ip_peril_ctrl(struct clk *clk, int enable)
193{
194 return s5p_gatectrl(S5P_CLKGATE_IP_PERIL, clk, enable);
195}
196
197static int exynos4_clk_ip_perir_ctrl(struct clk *clk, int enable)
198{
199 return s5p_gatectrl(S5P_CLKGATE_IP_PERIR, clk, enable);
200}
201
202static int exynos4_clk_hdmiphy_ctrl(struct clk *clk, int enable)
203{
204 return s5p_gatectrl(S5P_HDMI_PHY_CONTROL, clk, enable);
205}
206
207static int exynos4_clk_dac_ctrl(struct clk *clk, int enable)
208{
209 return s5p_gatectrl(S5P_DAC_PHY_CONTROL, clk, enable);
210}
211
212/* Core list of CMU_CPU side */
213
214static struct clksrc_clk clk_mout_apll = {
215 .clk = {
216 .name = "mout_apll",
217 },
218 .sources = &clk_src_apll,
219 .reg_src = { .reg = S5P_CLKSRC_CPU, .shift = 0, .size = 1 },
220};
221
222struct clksrc_clk clk_sclk_apll = {
223 .clk = {
224 .name = "sclk_apll",
225 .parent = &clk_mout_apll.clk,
226 },
227 .reg_div = { .reg = S5P_CLKDIV_CPU, .shift = 24, .size = 3 },
228};
229
230struct clksrc_clk clk_mout_epll = {
231 .clk = {
232 .name = "mout_epll",
233 },
234 .sources = &clk_src_epll,
235 .reg_src = { .reg = S5P_CLKSRC_TOP0, .shift = 4, .size = 1 },
236};
237
238struct clksrc_clk clk_mout_mpll = {
239 .clk = {
240 .name = "mout_mpll",
241 },
242 .sources = &clk_src_mpll,
243
244 /* reg_src will be added in each SoCs' clock */
245};
246
247static struct clk *clkset_moutcore_list[] = {
248 [0] = &clk_mout_apll.clk,
249 [1] = &clk_mout_mpll.clk,
250};
251
252static struct clksrc_sources clkset_moutcore = {
253 .sources = clkset_moutcore_list,
254 .nr_sources = ARRAY_SIZE(clkset_moutcore_list),
255};
256
257static struct clksrc_clk clk_moutcore = {
258 .clk = {
259 .name = "moutcore",
260 },
261 .sources = &clkset_moutcore,
262 .reg_src = { .reg = S5P_CLKSRC_CPU, .shift = 16, .size = 1 },
263};
264
265static struct clksrc_clk clk_coreclk = {
266 .clk = {
267 .name = "core_clk",
268 .parent = &clk_moutcore.clk,
269 },
270 .reg_div = { .reg = S5P_CLKDIV_CPU, .shift = 0, .size = 3 },
271};
272
273static struct clksrc_clk clk_armclk = {
274 .clk = {
275 .name = "armclk",
276 .parent = &clk_coreclk.clk,
277 },
278};
279
280static struct clksrc_clk clk_aclk_corem0 = {
281 .clk = {
282 .name = "aclk_corem0",
283 .parent = &clk_coreclk.clk,
284 },
285 .reg_div = { .reg = S5P_CLKDIV_CPU, .shift = 4, .size = 3 },
286};
287
288static struct clksrc_clk clk_aclk_cores = {
289 .clk = {
290 .name = "aclk_cores",
291 .parent = &clk_coreclk.clk,
292 },
293 .reg_div = { .reg = S5P_CLKDIV_CPU, .shift = 4, .size = 3 },
294};
295
296static struct clksrc_clk clk_aclk_corem1 = {
297 .clk = {
298 .name = "aclk_corem1",
299 .parent = &clk_coreclk.clk,
300 },
301 .reg_div = { .reg = S5P_CLKDIV_CPU, .shift = 8, .size = 3 },
302};
303
304static struct clksrc_clk clk_periphclk = {
305 .clk = {
306 .name = "periphclk",
307 .parent = &clk_coreclk.clk,
308 },
309 .reg_div = { .reg = S5P_CLKDIV_CPU, .shift = 12, .size = 3 },
310};
311
312/* Core list of CMU_CORE side */
313
314struct clk *clkset_corebus_list[] = {
315 [0] = &clk_mout_mpll.clk,
316 [1] = &clk_sclk_apll.clk,
317};
318
319struct clksrc_sources clkset_mout_corebus = {
320 .sources = clkset_corebus_list,
321 .nr_sources = ARRAY_SIZE(clkset_corebus_list),
322};
323
324static struct clksrc_clk clk_mout_corebus = {
325 .clk = {
326 .name = "mout_corebus",
327 },
328 .sources = &clkset_mout_corebus,
329 .reg_src = { .reg = S5P_CLKSRC_DMC, .shift = 4, .size = 1 },
330};
331
332static struct clksrc_clk clk_sclk_dmc = {
333 .clk = {
334 .name = "sclk_dmc",
335 .parent = &clk_mout_corebus.clk,
336 },
337 .reg_div = { .reg = S5P_CLKDIV_DMC0, .shift = 12, .size = 3 },
338};
339
340static struct clksrc_clk clk_aclk_cored = {
341 .clk = {
342 .name = "aclk_cored",
343 .parent = &clk_sclk_dmc.clk,
344 },
345 .reg_div = { .reg = S5P_CLKDIV_DMC0, .shift = 16, .size = 3 },
346};
347
348static struct clksrc_clk clk_aclk_corep = {
349 .clk = {
350 .name = "aclk_corep",
351 .parent = &clk_aclk_cored.clk,
352 },
353 .reg_div = { .reg = S5P_CLKDIV_DMC0, .shift = 20, .size = 3 },
354};
355
356static struct clksrc_clk clk_aclk_acp = {
357 .clk = {
358 .name = "aclk_acp",
359 .parent = &clk_mout_corebus.clk,
360 },
361 .reg_div = { .reg = S5P_CLKDIV_DMC0, .shift = 0, .size = 3 },
362};
363
364static struct clksrc_clk clk_pclk_acp = {
365 .clk = {
366 .name = "pclk_acp",
367 .parent = &clk_aclk_acp.clk,
368 },
369 .reg_div = { .reg = S5P_CLKDIV_DMC0, .shift = 4, .size = 3 },
370};
371
372/* Core list of CMU_TOP side */
373
374struct clk *clkset_aclk_top_list[] = {
375 [0] = &clk_mout_mpll.clk,
376 [1] = &clk_sclk_apll.clk,
377};
378
379struct clksrc_sources clkset_aclk = {
380 .sources = clkset_aclk_top_list,
381 .nr_sources = ARRAY_SIZE(clkset_aclk_top_list),
382};
383
384static struct clksrc_clk clk_aclk_200 = {
385 .clk = {
386 .name = "aclk_200",
387 },
388 .sources = &clkset_aclk,
389 .reg_src = { .reg = S5P_CLKSRC_TOP0, .shift = 12, .size = 1 },
390 .reg_div = { .reg = S5P_CLKDIV_TOP, .shift = 0, .size = 3 },
391};
392
393static struct clksrc_clk clk_aclk_100 = {
394 .clk = {
395 .name = "aclk_100",
396 },
397 .sources = &clkset_aclk,
398 .reg_src = { .reg = S5P_CLKSRC_TOP0, .shift = 16, .size = 1 },
399 .reg_div = { .reg = S5P_CLKDIV_TOP, .shift = 4, .size = 4 },
400};
401
402static struct clksrc_clk clk_aclk_160 = {
403 .clk = {
404 .name = "aclk_160",
405 },
406 .sources = &clkset_aclk,
407 .reg_src = { .reg = S5P_CLKSRC_TOP0, .shift = 20, .size = 1 },
408 .reg_div = { .reg = S5P_CLKDIV_TOP, .shift = 8, .size = 3 },
409};
410
411struct clksrc_clk clk_aclk_133 = {
412 .clk = {
413 .name = "aclk_133",
414 },
415 .sources = &clkset_aclk,
416 .reg_src = { .reg = S5P_CLKSRC_TOP0, .shift = 24, .size = 1 },
417 .reg_div = { .reg = S5P_CLKDIV_TOP, .shift = 12, .size = 3 },
418};
419
420static struct clk *clkset_vpllsrc_list[] = {
421 [0] = &clk_fin_vpll,
422 [1] = &clk_sclk_hdmi27m,
423};
424
425static struct clksrc_sources clkset_vpllsrc = {
426 .sources = clkset_vpllsrc_list,
427 .nr_sources = ARRAY_SIZE(clkset_vpllsrc_list),
428};
429
430static struct clksrc_clk clk_vpllsrc = {
431 .clk = {
432 .name = "vpll_src",
433 .enable = exynos4_clksrc_mask_top_ctrl,
434 .ctrlbit = (1 << 0),
435 },
436 .sources = &clkset_vpllsrc,
437 .reg_src = { .reg = S5P_CLKSRC_TOP1, .shift = 0, .size = 1 },
438};
439
440static struct clk *clkset_sclk_vpll_list[] = {
441 [0] = &clk_vpllsrc.clk,
442 [1] = &clk_fout_vpll,
443};
444
445static struct clksrc_sources clkset_sclk_vpll = {
446 .sources = clkset_sclk_vpll_list,
447 .nr_sources = ARRAY_SIZE(clkset_sclk_vpll_list),
448};
449
450struct clksrc_clk clk_sclk_vpll = {
451 .clk = {
452 .name = "sclk_vpll",
453 },
454 .sources = &clkset_sclk_vpll,
455 .reg_src = { .reg = S5P_CLKSRC_TOP0, .shift = 8, .size = 1 },
456};
457
458static struct clk init_clocks_off[] = {
459 {
460 .name = "timers",
461 .parent = &clk_aclk_100.clk,
462 .enable = exynos4_clk_ip_peril_ctrl,
463 .ctrlbit = (1<<24),
464 }, {
465 .name = "csis",
466 .devname = "s5p-mipi-csis.0",
467 .enable = exynos4_clk_ip_cam_ctrl,
468 .ctrlbit = (1 << 4),
469 }, {
470 .name = "csis",
471 .devname = "s5p-mipi-csis.1",
472 .enable = exynos4_clk_ip_cam_ctrl,
473 .ctrlbit = (1 << 5),
474 }, {
475 .name = "jpeg",
476 .id = 0,
477 .enable = exynos4_clk_ip_cam_ctrl,
478 .ctrlbit = (1 << 6),
479 }, {
480 .name = "fimc",
481 .devname = "exynos4-fimc.0",
482 .enable = exynos4_clk_ip_cam_ctrl,
483 .ctrlbit = (1 << 0),
484 }, {
485 .name = "fimc",
486 .devname = "exynos4-fimc.1",
487 .enable = exynos4_clk_ip_cam_ctrl,
488 .ctrlbit = (1 << 1),
489 }, {
490 .name = "fimc",
491 .devname = "exynos4-fimc.2",
492 .enable = exynos4_clk_ip_cam_ctrl,
493 .ctrlbit = (1 << 2),
494 }, {
495 .name = "fimc",
496 .devname = "exynos4-fimc.3",
497 .enable = exynos4_clk_ip_cam_ctrl,
498 .ctrlbit = (1 << 3),
499 }, {
500 .name = "fimd",
501 .devname = "exynos4-fb.0",
502 .enable = exynos4_clk_ip_lcd0_ctrl,
503 .ctrlbit = (1 << 0),
504 }, {
505 .name = "hsmmc",
506 .devname = "s3c-sdhci.0",
507 .parent = &clk_aclk_133.clk,
508 .enable = exynos4_clk_ip_fsys_ctrl,
509 .ctrlbit = (1 << 5),
510 }, {
511 .name = "hsmmc",
512 .devname = "s3c-sdhci.1",
513 .parent = &clk_aclk_133.clk,
514 .enable = exynos4_clk_ip_fsys_ctrl,
515 .ctrlbit = (1 << 6),
516 }, {
517 .name = "hsmmc",
518 .devname = "s3c-sdhci.2",
519 .parent = &clk_aclk_133.clk,
520 .enable = exynos4_clk_ip_fsys_ctrl,
521 .ctrlbit = (1 << 7),
522 }, {
523 .name = "hsmmc",
524 .devname = "s3c-sdhci.3",
525 .parent = &clk_aclk_133.clk,
526 .enable = exynos4_clk_ip_fsys_ctrl,
527 .ctrlbit = (1 << 8),
528 }, {
529 .name = "dwmmc",
530 .parent = &clk_aclk_133.clk,
531 .enable = exynos4_clk_ip_fsys_ctrl,
532 .ctrlbit = (1 << 9),
533 }, {
534 .name = "dac",
535 .devname = "s5p-sdo",
536 .enable = exynos4_clk_ip_tv_ctrl,
537 .ctrlbit = (1 << 2),
538 }, {
539 .name = "mixer",
540 .devname = "s5p-mixer",
541 .enable = exynos4_clk_ip_tv_ctrl,
542 .ctrlbit = (1 << 1),
543 }, {
544 .name = "vp",
545 .devname = "s5p-mixer",
546 .enable = exynos4_clk_ip_tv_ctrl,
547 .ctrlbit = (1 << 0),
548 }, {
549 .name = "hdmi",
550 .devname = "exynos4-hdmi",
551 .enable = exynos4_clk_ip_tv_ctrl,
552 .ctrlbit = (1 << 3),
553 }, {
554 .name = "hdmiphy",
555 .devname = "exynos4-hdmi",
556 .enable = exynos4_clk_hdmiphy_ctrl,
557 .ctrlbit = (1 << 0),
558 }, {
559 .name = "dacphy",
560 .devname = "s5p-sdo",
561 .enable = exynos4_clk_dac_ctrl,
562 .ctrlbit = (1 << 0),
563 }, {
564 .name = "adc",
565 .enable = exynos4_clk_ip_peril_ctrl,
566 .ctrlbit = (1 << 15),
567 }, {
568 .name = "keypad",
569 .enable = exynos4_clk_ip_perir_ctrl,
570 .ctrlbit = (1 << 16),
571 }, {
572 .name = "rtc",
573 .enable = exynos4_clk_ip_perir_ctrl,
574 .ctrlbit = (1 << 15),
575 }, {
576 .name = "watchdog",
577 .parent = &clk_aclk_100.clk,
578 .enable = exynos4_clk_ip_perir_ctrl,
579 .ctrlbit = (1 << 14),
580 }, {
581 .name = "usbhost",
582 .enable = exynos4_clk_ip_fsys_ctrl ,
583 .ctrlbit = (1 << 12),
584 }, {
585 .name = "otg",
586 .enable = exynos4_clk_ip_fsys_ctrl,
587 .ctrlbit = (1 << 13),
588 }, {
589 .name = "spi",
590 .devname = "s3c64xx-spi.0",
591 .enable = exynos4_clk_ip_peril_ctrl,
592 .ctrlbit = (1 << 16),
593 }, {
594 .name = "spi",
595 .devname = "s3c64xx-spi.1",
596 .enable = exynos4_clk_ip_peril_ctrl,
597 .ctrlbit = (1 << 17),
598 }, {
599 .name = "spi",
600 .devname = "s3c64xx-spi.2",
601 .enable = exynos4_clk_ip_peril_ctrl,
602 .ctrlbit = (1 << 18),
603 }, {
604 .name = "iis",
605 .devname = "samsung-i2s.0",
606 .enable = exynos4_clk_ip_peril_ctrl,
607 .ctrlbit = (1 << 19),
608 }, {
609 .name = "iis",
610 .devname = "samsung-i2s.1",
611 .enable = exynos4_clk_ip_peril_ctrl,
612 .ctrlbit = (1 << 20),
613 }, {
614 .name = "iis",
615 .devname = "samsung-i2s.2",
616 .enable = exynos4_clk_ip_peril_ctrl,
617 .ctrlbit = (1 << 21),
618 }, {
619 .name = "ac97",
620 .devname = "samsung-ac97",
621 .enable = exynos4_clk_ip_peril_ctrl,
622 .ctrlbit = (1 << 27),
623 }, {
624 .name = "fimg2d",
625 .enable = exynos4_clk_ip_image_ctrl,
626 .ctrlbit = (1 << 0),
627 }, {
628 .name = "mfc",
629 .devname = "s5p-mfc",
630 .enable = exynos4_clk_ip_mfc_ctrl,
631 .ctrlbit = (1 << 0),
632 }, {
633 .name = "i2c",
634 .devname = "s3c2440-i2c.0",
635 .parent = &clk_aclk_100.clk,
636 .enable = exynos4_clk_ip_peril_ctrl,
637 .ctrlbit = (1 << 6),
638 }, {
639 .name = "i2c",
640 .devname = "s3c2440-i2c.1",
641 .parent = &clk_aclk_100.clk,
642 .enable = exynos4_clk_ip_peril_ctrl,
643 .ctrlbit = (1 << 7),
644 }, {
645 .name = "i2c",
646 .devname = "s3c2440-i2c.2",
647 .parent = &clk_aclk_100.clk,
648 .enable = exynos4_clk_ip_peril_ctrl,
649 .ctrlbit = (1 << 8),
650 }, {
651 .name = "i2c",
652 .devname = "s3c2440-i2c.3",
653 .parent = &clk_aclk_100.clk,
654 .enable = exynos4_clk_ip_peril_ctrl,
655 .ctrlbit = (1 << 9),
656 }, {
657 .name = "i2c",
658 .devname = "s3c2440-i2c.4",
659 .parent = &clk_aclk_100.clk,
660 .enable = exynos4_clk_ip_peril_ctrl,
661 .ctrlbit = (1 << 10),
662 }, {
663 .name = "i2c",
664 .devname = "s3c2440-i2c.5",
665 .parent = &clk_aclk_100.clk,
666 .enable = exynos4_clk_ip_peril_ctrl,
667 .ctrlbit = (1 << 11),
668 }, {
669 .name = "i2c",
670 .devname = "s3c2440-i2c.6",
671 .parent = &clk_aclk_100.clk,
672 .enable = exynos4_clk_ip_peril_ctrl,
673 .ctrlbit = (1 << 12),
674 }, {
675 .name = "i2c",
676 .devname = "s3c2440-i2c.7",
677 .parent = &clk_aclk_100.clk,
678 .enable = exynos4_clk_ip_peril_ctrl,
679 .ctrlbit = (1 << 13),
680 }, {
681 .name = "i2c",
682 .devname = "s3c2440-hdmiphy-i2c",
683 .parent = &clk_aclk_100.clk,
684 .enable = exynos4_clk_ip_peril_ctrl,
685 .ctrlbit = (1 << 14),
686 }, {
687 .name = "SYSMMU_MDMA",
688 .enable = exynos4_clk_ip_image_ctrl,
689 .ctrlbit = (1 << 5),
690 }, {
691 .name = "SYSMMU_FIMC0",
692 .enable = exynos4_clk_ip_cam_ctrl,
693 .ctrlbit = (1 << 7),
694 }, {
695 .name = "SYSMMU_FIMC1",
696 .enable = exynos4_clk_ip_cam_ctrl,
697 .ctrlbit = (1 << 8),
698 }, {
699 .name = "SYSMMU_FIMC2",
700 .enable = exynos4_clk_ip_cam_ctrl,
701 .ctrlbit = (1 << 9),
702 }, {
703 .name = "SYSMMU_FIMC3",
704 .enable = exynos4_clk_ip_cam_ctrl,
705 .ctrlbit = (1 << 10),
706 }, {
707 .name = "SYSMMU_JPEG",
708 .enable = exynos4_clk_ip_cam_ctrl,
709 .ctrlbit = (1 << 11),
710 }, {
711 .name = "SYSMMU_FIMD0",
712 .enable = exynos4_clk_ip_lcd0_ctrl,
713 .ctrlbit = (1 << 4),
714 }, {
715 .name = "SYSMMU_FIMD1",
716 .enable = exynos4_clk_ip_lcd1_ctrl,
717 .ctrlbit = (1 << 4),
718 }, {
719 .name = "SYSMMU_PCIe",
720 .enable = exynos4_clk_ip_fsys_ctrl,
721 .ctrlbit = (1 << 18),
722 }, {
723 .name = "SYSMMU_G2D",
724 .enable = exynos4_clk_ip_image_ctrl,
725 .ctrlbit = (1 << 3),
726 }, {
727 .name = "SYSMMU_ROTATOR",
728 .enable = exynos4_clk_ip_image_ctrl,
729 .ctrlbit = (1 << 4),
730 }, {
731 .name = "SYSMMU_TV",
732 .enable = exynos4_clk_ip_tv_ctrl,
733 .ctrlbit = (1 << 4),
734 }, {
735 .name = "SYSMMU_MFC_L",
736 .enable = exynos4_clk_ip_mfc_ctrl,
737 .ctrlbit = (1 << 1),
738 }, {
739 .name = "SYSMMU_MFC_R",
740 .enable = exynos4_clk_ip_mfc_ctrl,
741 .ctrlbit = (1 << 2),
742 }
743};
744
745static struct clk init_clocks[] = {
746 {
747 .name = "uart",
748 .devname = "s5pv210-uart.0",
749 .enable = exynos4_clk_ip_peril_ctrl,
750 .ctrlbit = (1 << 0),
751 }, {
752 .name = "uart",
753 .devname = "s5pv210-uart.1",
754 .enable = exynos4_clk_ip_peril_ctrl,
755 .ctrlbit = (1 << 1),
756 }, {
757 .name = "uart",
758 .devname = "s5pv210-uart.2",
759 .enable = exynos4_clk_ip_peril_ctrl,
760 .ctrlbit = (1 << 2),
761 }, {
762 .name = "uart",
763 .devname = "s5pv210-uart.3",
764 .enable = exynos4_clk_ip_peril_ctrl,
765 .ctrlbit = (1 << 3),
766 }, {
767 .name = "uart",
768 .devname = "s5pv210-uart.4",
769 .enable = exynos4_clk_ip_peril_ctrl,
770 .ctrlbit = (1 << 4),
771 }, {
772 .name = "uart",
773 .devname = "s5pv210-uart.5",
774 .enable = exynos4_clk_ip_peril_ctrl,
775 .ctrlbit = (1 << 5),
776 }
777};
778
779static struct clk clk_pdma0 = {
780 .name = "dma",
781 .devname = "dma-pl330.0",
782 .enable = exynos4_clk_ip_fsys_ctrl,
783 .ctrlbit = (1 << 0),
784};
785
786static struct clk clk_pdma1 = {
787 .name = "dma",
788 .devname = "dma-pl330.1",
789 .enable = exynos4_clk_ip_fsys_ctrl,
790 .ctrlbit = (1 << 1),
791};
792
793struct clk *clkset_group_list[] = {
794 [0] = &clk_ext_xtal_mux,
795 [1] = &clk_xusbxti,
796 [2] = &clk_sclk_hdmi27m,
797 [3] = &clk_sclk_usbphy0,
798 [4] = &clk_sclk_usbphy1,
799 [5] = &clk_sclk_hdmiphy,
800 [6] = &clk_mout_mpll.clk,
801 [7] = &clk_mout_epll.clk,
802 [8] = &clk_sclk_vpll.clk,
803};
804
805struct clksrc_sources clkset_group = {
806 .sources = clkset_group_list,
807 .nr_sources = ARRAY_SIZE(clkset_group_list),
808};
809
810static struct clk *clkset_mout_g2d0_list[] = {
811 [0] = &clk_mout_mpll.clk,
812 [1] = &clk_sclk_apll.clk,
813};
814
815static struct clksrc_sources clkset_mout_g2d0 = {
816 .sources = clkset_mout_g2d0_list,
817 .nr_sources = ARRAY_SIZE(clkset_mout_g2d0_list),
818};
819
820static struct clksrc_clk clk_mout_g2d0 = {
821 .clk = {
822 .name = "mout_g2d0",
823 },
824 .sources = &clkset_mout_g2d0,
825 .reg_src = { .reg = S5P_CLKSRC_IMAGE, .shift = 0, .size = 1 },
826};
827
828static struct clk *clkset_mout_g2d1_list[] = {
829 [0] = &clk_mout_epll.clk,
830 [1] = &clk_sclk_vpll.clk,
831};
832
833static struct clksrc_sources clkset_mout_g2d1 = {
834 .sources = clkset_mout_g2d1_list,
835 .nr_sources = ARRAY_SIZE(clkset_mout_g2d1_list),
836};
837
838static struct clksrc_clk clk_mout_g2d1 = {
839 .clk = {
840 .name = "mout_g2d1",
841 },
842 .sources = &clkset_mout_g2d1,
843 .reg_src = { .reg = S5P_CLKSRC_IMAGE, .shift = 4, .size = 1 },
844};
845
846static struct clk *clkset_mout_g2d_list[] = {
847 [0] = &clk_mout_g2d0.clk,
848 [1] = &clk_mout_g2d1.clk,
849};
850
851static struct clksrc_sources clkset_mout_g2d = {
852 .sources = clkset_mout_g2d_list,
853 .nr_sources = ARRAY_SIZE(clkset_mout_g2d_list),
854};
855
856static struct clk *clkset_mout_mfc0_list[] = {
857 [0] = &clk_mout_mpll.clk,
858 [1] = &clk_sclk_apll.clk,
859};
860
861static struct clksrc_sources clkset_mout_mfc0 = {
862 .sources = clkset_mout_mfc0_list,
863 .nr_sources = ARRAY_SIZE(clkset_mout_mfc0_list),
864};
865
866static struct clksrc_clk clk_mout_mfc0 = {
867 .clk = {
868 .name = "mout_mfc0",
869 },
870 .sources = &clkset_mout_mfc0,
871 .reg_src = { .reg = S5P_CLKSRC_MFC, .shift = 0, .size = 1 },
872};
873
874static struct clk *clkset_mout_mfc1_list[] = {
875 [0] = &clk_mout_epll.clk,
876 [1] = &clk_sclk_vpll.clk,
877};
878
879static struct clksrc_sources clkset_mout_mfc1 = {
880 .sources = clkset_mout_mfc1_list,
881 .nr_sources = ARRAY_SIZE(clkset_mout_mfc1_list),
882};
883
884static struct clksrc_clk clk_mout_mfc1 = {
885 .clk = {
886 .name = "mout_mfc1",
887 },
888 .sources = &clkset_mout_mfc1,
889 .reg_src = { .reg = S5P_CLKSRC_MFC, .shift = 4, .size = 1 },
890};
891
892static struct clk *clkset_mout_mfc_list[] = {
893 [0] = &clk_mout_mfc0.clk,
894 [1] = &clk_mout_mfc1.clk,
895};
896
897static struct clksrc_sources clkset_mout_mfc = {
898 .sources = clkset_mout_mfc_list,
899 .nr_sources = ARRAY_SIZE(clkset_mout_mfc_list),
900};
901
902static struct clk *clkset_sclk_dac_list[] = {
903 [0] = &clk_sclk_vpll.clk,
904 [1] = &clk_sclk_hdmiphy,
905};
906
907static struct clksrc_sources clkset_sclk_dac = {
908 .sources = clkset_sclk_dac_list,
909 .nr_sources = ARRAY_SIZE(clkset_sclk_dac_list),
910};
911
912static struct clksrc_clk clk_sclk_dac = {
913 .clk = {
914 .name = "sclk_dac",
915 .enable = exynos4_clksrc_mask_tv_ctrl,
916 .ctrlbit = (1 << 8),
917 },
918 .sources = &clkset_sclk_dac,
919 .reg_src = { .reg = S5P_CLKSRC_TV, .shift = 8, .size = 1 },
920};
921
922static struct clksrc_clk clk_sclk_pixel = {
923 .clk = {
924 .name = "sclk_pixel",
925 .parent = &clk_sclk_vpll.clk,
926 },
927 .reg_div = { .reg = S5P_CLKDIV_TV, .shift = 0, .size = 4 },
928};
929
930static struct clk *clkset_sclk_hdmi_list[] = {
931 [0] = &clk_sclk_pixel.clk,
932 [1] = &clk_sclk_hdmiphy,
933};
934
935static struct clksrc_sources clkset_sclk_hdmi = {
936 .sources = clkset_sclk_hdmi_list,
937 .nr_sources = ARRAY_SIZE(clkset_sclk_hdmi_list),
938};
939
940static struct clksrc_clk clk_sclk_hdmi = {
941 .clk = {
942 .name = "sclk_hdmi",
943 .enable = exynos4_clksrc_mask_tv_ctrl,
944 .ctrlbit = (1 << 0),
945 },
946 .sources = &clkset_sclk_hdmi,
947 .reg_src = { .reg = S5P_CLKSRC_TV, .shift = 0, .size = 1 },
948};
949
950static struct clk *clkset_sclk_mixer_list[] = {
951 [0] = &clk_sclk_dac.clk,
952 [1] = &clk_sclk_hdmi.clk,
953};
954
955static struct clksrc_sources clkset_sclk_mixer = {
956 .sources = clkset_sclk_mixer_list,
957 .nr_sources = ARRAY_SIZE(clkset_sclk_mixer_list),
958};
959
960static struct clksrc_clk clk_sclk_mixer = {
961 .clk = {
962 .name = "sclk_mixer",
963 .enable = exynos4_clksrc_mask_tv_ctrl,
964 .ctrlbit = (1 << 4),
965 },
966 .sources = &clkset_sclk_mixer,
967 .reg_src = { .reg = S5P_CLKSRC_TV, .shift = 4, .size = 1 },
968};
969
970static struct clksrc_clk *sclk_tv[] = {
971 &clk_sclk_dac,
972 &clk_sclk_pixel,
973 &clk_sclk_hdmi,
974 &clk_sclk_mixer,
975};
976
977static struct clksrc_clk clk_dout_mmc0 = {
978 .clk = {
979 .name = "dout_mmc0",
980 },
981 .sources = &clkset_group,
982 .reg_src = { .reg = S5P_CLKSRC_FSYS, .shift = 0, .size = 4 },
983 .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 0, .size = 4 },
984};
985
986static struct clksrc_clk clk_dout_mmc1 = {
987 .clk = {
988 .name = "dout_mmc1",
989 },
990 .sources = &clkset_group,
991 .reg_src = { .reg = S5P_CLKSRC_FSYS, .shift = 4, .size = 4 },
992 .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 16, .size = 4 },
993};
994
995static struct clksrc_clk clk_dout_mmc2 = {
996 .clk = {
997 .name = "dout_mmc2",
998 },
999 .sources = &clkset_group,
1000 .reg_src = { .reg = S5P_CLKSRC_FSYS, .shift = 8, .size = 4 },
1001 .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 0, .size = 4 },
1002};
1003
1004static struct clksrc_clk clk_dout_mmc3 = {
1005 .clk = {
1006 .name = "dout_mmc3",
1007 },
1008 .sources = &clkset_group,
1009 .reg_src = { .reg = S5P_CLKSRC_FSYS, .shift = 12, .size = 4 },
1010 .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 16, .size = 4 },
1011};
1012
1013static struct clksrc_clk clk_dout_mmc4 = {
1014 .clk = {
1015 .name = "dout_mmc4",
1016 },
1017 .sources = &clkset_group,
1018 .reg_src = { .reg = S5P_CLKSRC_FSYS, .shift = 16, .size = 4 },
1019 .reg_div = { .reg = S5P_CLKDIV_FSYS3, .shift = 0, .size = 4 },
1020};
1021
1022static struct clksrc_clk clksrcs[] = {
1023 {
1024 .clk = {
1025 .name = "sclk_pwm",
1026 .enable = exynos4_clksrc_mask_peril0_ctrl,
1027 .ctrlbit = (1 << 24),
1028 },
1029 .sources = &clkset_group,
1030 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 24, .size = 4 },
1031 .reg_div = { .reg = S5P_CLKDIV_PERIL3, .shift = 0, .size = 4 },
1032 }, {
1033 .clk = {
1034 .name = "sclk_csis",
1035 .devname = "s5p-mipi-csis.0",
1036 .enable = exynos4_clksrc_mask_cam_ctrl,
1037 .ctrlbit = (1 << 24),
1038 },
1039 .sources = &clkset_group,
1040 .reg_src = { .reg = S5P_CLKSRC_CAM, .shift = 24, .size = 4 },
1041 .reg_div = { .reg = S5P_CLKDIV_CAM, .shift = 24, .size = 4 },
1042 }, {
1043 .clk = {
1044 .name = "sclk_csis",
1045 .devname = "s5p-mipi-csis.1",
1046 .enable = exynos4_clksrc_mask_cam_ctrl,
1047 .ctrlbit = (1 << 28),
1048 },
1049 .sources = &clkset_group,
1050 .reg_src = { .reg = S5P_CLKSRC_CAM, .shift = 28, .size = 4 },
1051 .reg_div = { .reg = S5P_CLKDIV_CAM, .shift = 28, .size = 4 },
1052 }, {
1053 .clk = {
1054 .name = "sclk_cam0",
1055 .enable = exynos4_clksrc_mask_cam_ctrl,
1056 .ctrlbit = (1 << 16),
1057 },
1058 .sources = &clkset_group,
1059 .reg_src = { .reg = S5P_CLKSRC_CAM, .shift = 16, .size = 4 },
1060 .reg_div = { .reg = S5P_CLKDIV_CAM, .shift = 16, .size = 4 },
1061 }, {
1062 .clk = {
1063 .name = "sclk_cam1",
1064 .enable = exynos4_clksrc_mask_cam_ctrl,
1065 .ctrlbit = (1 << 20),
1066 },
1067 .sources = &clkset_group,
1068 .reg_src = { .reg = S5P_CLKSRC_CAM, .shift = 20, .size = 4 },
1069 .reg_div = { .reg = S5P_CLKDIV_CAM, .shift = 20, .size = 4 },
1070 }, {
1071 .clk = {
1072 .name = "sclk_fimc",
1073 .devname = "exynos4-fimc.0",
1074 .enable = exynos4_clksrc_mask_cam_ctrl,
1075 .ctrlbit = (1 << 0),
1076 },
1077 .sources = &clkset_group,
1078 .reg_src = { .reg = S5P_CLKSRC_CAM, .shift = 0, .size = 4 },
1079 .reg_div = { .reg = S5P_CLKDIV_CAM, .shift = 0, .size = 4 },
1080 }, {
1081 .clk = {
1082 .name = "sclk_fimc",
1083 .devname = "exynos4-fimc.1",
1084 .enable = exynos4_clksrc_mask_cam_ctrl,
1085 .ctrlbit = (1 << 4),
1086 },
1087 .sources = &clkset_group,
1088 .reg_src = { .reg = S5P_CLKSRC_CAM, .shift = 4, .size = 4 },
1089 .reg_div = { .reg = S5P_CLKDIV_CAM, .shift = 4, .size = 4 },
1090 }, {
1091 .clk = {
1092 .name = "sclk_fimc",
1093 .devname = "exynos4-fimc.2",
1094 .enable = exynos4_clksrc_mask_cam_ctrl,
1095 .ctrlbit = (1 << 8),
1096 },
1097 .sources = &clkset_group,
1098 .reg_src = { .reg = S5P_CLKSRC_CAM, .shift = 8, .size = 4 },
1099 .reg_div = { .reg = S5P_CLKDIV_CAM, .shift = 8, .size = 4 },
1100 }, {
1101 .clk = {
1102 .name = "sclk_fimc",
1103 .devname = "exynos4-fimc.3",
1104 .enable = exynos4_clksrc_mask_cam_ctrl,
1105 .ctrlbit = (1 << 12),
1106 },
1107 .sources = &clkset_group,
1108 .reg_src = { .reg = S5P_CLKSRC_CAM, .shift = 12, .size = 4 },
1109 .reg_div = { .reg = S5P_CLKDIV_CAM, .shift = 12, .size = 4 },
1110 }, {
1111 .clk = {
1112 .name = "sclk_fimd",
1113 .devname = "exynos4-fb.0",
1114 .enable = exynos4_clksrc_mask_lcd0_ctrl,
1115 .ctrlbit = (1 << 0),
1116 },
1117 .sources = &clkset_group,
1118 .reg_src = { .reg = S5P_CLKSRC_LCD0, .shift = 0, .size = 4 },
1119 .reg_div = { .reg = S5P_CLKDIV_LCD0, .shift = 0, .size = 4 },
1120 }, {
1121 .clk = {
1122 .name = "sclk_fimg2d",
1123 },
1124 .sources = &clkset_mout_g2d,
1125 .reg_src = { .reg = S5P_CLKSRC_IMAGE, .shift = 8, .size = 1 },
1126 .reg_div = { .reg = S5P_CLKDIV_IMAGE, .shift = 0, .size = 4 },
1127 }, {
1128 .clk = {
1129 .name = "sclk_mfc",
1130 .devname = "s5p-mfc",
1131 },
1132 .sources = &clkset_mout_mfc,
1133 .reg_src = { .reg = S5P_CLKSRC_MFC, .shift = 8, .size = 1 },
1134 .reg_div = { .reg = S5P_CLKDIV_MFC, .shift = 0, .size = 4 },
1135 }, {
1136 .clk = {
1137 .name = "sclk_dwmmc",
1138 .parent = &clk_dout_mmc4.clk,
1139 .enable = exynos4_clksrc_mask_fsys_ctrl,
1140 .ctrlbit = (1 << 16),
1141 },
1142 .reg_div = { .reg = S5P_CLKDIV_FSYS3, .shift = 8, .size = 8 },
1143 }
1144};
1145
1146static struct clksrc_clk clk_sclk_uart0 = {
1147 .clk = {
1148 .name = "uclk1",
1149 .devname = "exynos4210-uart.0",
1150 .enable = exynos4_clksrc_mask_peril0_ctrl,
1151 .ctrlbit = (1 << 0),
1152 },
1153 .sources = &clkset_group,
1154 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 0, .size = 4 },
1155 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 0, .size = 4 },
1156};
1157
1158static struct clksrc_clk clk_sclk_uart1 = {
1159 .clk = {
1160 .name = "uclk1",
1161 .devname = "exynos4210-uart.1",
1162 .enable = exynos4_clksrc_mask_peril0_ctrl,
1163 .ctrlbit = (1 << 4),
1164 },
1165 .sources = &clkset_group,
1166 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 4, .size = 4 },
1167 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 4, .size = 4 },
1168};
1169
1170static struct clksrc_clk clk_sclk_uart2 = {
1171 .clk = {
1172 .name = "uclk1",
1173 .devname = "exynos4210-uart.2",
1174 .enable = exynos4_clksrc_mask_peril0_ctrl,
1175 .ctrlbit = (1 << 8),
1176 },
1177 .sources = &clkset_group,
1178 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 8, .size = 4 },
1179 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 8, .size = 4 },
1180};
1181
1182static struct clksrc_clk clk_sclk_uart3 = {
1183 .clk = {
1184 .name = "uclk1",
1185 .devname = "exynos4210-uart.3",
1186 .enable = exynos4_clksrc_mask_peril0_ctrl,
1187 .ctrlbit = (1 << 12),
1188 },
1189 .sources = &clkset_group,
1190 .reg_src = { .reg = S5P_CLKSRC_PERIL0, .shift = 12, .size = 4 },
1191 .reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 },
1192};
1193
1194static struct clksrc_clk clk_sclk_mmc0 = {
1195 .clk = {
1196 .name = "sclk_mmc",
1197 .devname = "s3c-sdhci.0",
1198 .parent = &clk_dout_mmc0.clk,
1199 .enable = exynos4_clksrc_mask_fsys_ctrl,
1200 .ctrlbit = (1 << 0),
1201 },
1202 .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 8, .size = 8 },
1203};
1204
1205static struct clksrc_clk clk_sclk_mmc1 = {
1206 .clk = {
1207 .name = "sclk_mmc",
1208 .devname = "s3c-sdhci.1",
1209 .parent = &clk_dout_mmc1.clk,
1210 .enable = exynos4_clksrc_mask_fsys_ctrl,
1211 .ctrlbit = (1 << 4),
1212 },
1213 .reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 24, .size = 8 },
1214};
1215
1216static struct clksrc_clk clk_sclk_mmc2 = {
1217 .clk = {
1218 .name = "sclk_mmc",
1219 .devname = "s3c-sdhci.2",
1220 .parent = &clk_dout_mmc2.clk,
1221 .enable = exynos4_clksrc_mask_fsys_ctrl,
1222 .ctrlbit = (1 << 8),
1223 },
1224 .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 8, .size = 8 },
1225};
1226
1227static struct clksrc_clk clk_sclk_mmc3 = {
1228 .clk = {
1229 .name = "sclk_mmc",
1230 .devname = "s3c-sdhci.3",
1231 .parent = &clk_dout_mmc3.clk,
1232 .enable = exynos4_clksrc_mask_fsys_ctrl,
1233 .ctrlbit = (1 << 12),
1234 },
1235 .reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 24, .size = 8 },
1236};
1237
1238static struct clksrc_clk clk_sclk_spi0 = {
1239 .clk = {
1240 .name = "sclk_spi",
1241 .devname = "s3c64xx-spi.0",
1242 .enable = exynos4_clksrc_mask_peril1_ctrl,
1243 .ctrlbit = (1 << 16),
1244 },
1245 .sources = &clkset_group,
1246 .reg_src = { .reg = S5P_CLKSRC_PERIL1, .shift = 16, .size = 4 },
1247 .reg_div = { .reg = S5P_CLKDIV_PERIL1, .shift = 0, .size = 4 },
1248};
1249
1250static struct clksrc_clk clk_sclk_spi1 = {
1251 .clk = {
1252 .name = "sclk_spi",
1253 .devname = "s3c64xx-spi.1",
1254 .enable = exynos4_clksrc_mask_peril1_ctrl,
1255 .ctrlbit = (1 << 20),
1256 },
1257 .sources = &clkset_group,
1258 .reg_src = { .reg = S5P_CLKSRC_PERIL1, .shift = 20, .size = 4 },
1259 .reg_div = { .reg = S5P_CLKDIV_PERIL1, .shift = 16, .size = 4 },
1260};
1261
1262static struct clksrc_clk clk_sclk_spi2 = {
1263 .clk = {
1264 .name = "sclk_spi",
1265 .devname = "s3c64xx-spi.2",
1266 .enable = exynos4_clksrc_mask_peril1_ctrl,
1267 .ctrlbit = (1 << 24),
1268 },
1269 .sources = &clkset_group,
1270 .reg_src = { .reg = S5P_CLKSRC_PERIL1, .shift = 24, .size = 4 },
1271 .reg_div = { .reg = S5P_CLKDIV_PERIL2, .shift = 0, .size = 4 },
1272};
1273
1274/* Clock initialization code */
1275static struct clksrc_clk *sysclks[] = {
1276 &clk_mout_apll,
1277 &clk_sclk_apll,
1278 &clk_mout_epll,
1279 &clk_mout_mpll,
1280 &clk_moutcore,
1281 &clk_coreclk,
1282 &clk_armclk,
1283 &clk_aclk_corem0,
1284 &clk_aclk_cores,
1285 &clk_aclk_corem1,
1286 &clk_periphclk,
1287 &clk_mout_corebus,
1288 &clk_sclk_dmc,
1289 &clk_aclk_cored,
1290 &clk_aclk_corep,
1291 &clk_aclk_acp,
1292 &clk_pclk_acp,
1293 &clk_vpllsrc,
1294 &clk_sclk_vpll,
1295 &clk_aclk_200,
1296 &clk_aclk_100,
1297 &clk_aclk_160,
1298 &clk_aclk_133,
1299 &clk_dout_mmc0,
1300 &clk_dout_mmc1,
1301 &clk_dout_mmc2,
1302 &clk_dout_mmc3,
1303 &clk_dout_mmc4,
1304 &clk_mout_mfc0,
1305 &clk_mout_mfc1,
1306};
1307
1308static struct clk *clk_cdev[] = {
1309 &clk_pdma0,
1310 &clk_pdma1,
1311};
1312
1313static struct clksrc_clk *clksrc_cdev[] = {
1314 &clk_sclk_uart0,
1315 &clk_sclk_uart1,
1316 &clk_sclk_uart2,
1317 &clk_sclk_uart3,
1318 &clk_sclk_mmc0,
1319 &clk_sclk_mmc1,
1320 &clk_sclk_mmc2,
1321 &clk_sclk_mmc3,
1322 &clk_sclk_spi0,
1323 &clk_sclk_spi1,
1324 &clk_sclk_spi2,
1325
1326};
1327
1328static struct clk_lookup exynos4_clk_lookup[] = {
1329 CLKDEV_INIT("exynos4210-uart.0", "clk_uart_baud0", &clk_sclk_uart0.clk),
1330 CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &clk_sclk_uart1.clk),
1331 CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &clk_sclk_uart2.clk),
1332 CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &clk_sclk_uart3.clk),
1333 CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk),
1334 CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk),
1335 CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk),
1336 CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &clk_sclk_mmc3.clk),
1337 CLKDEV_INIT("dma-pl330.0", "apb_pclk", &clk_pdma0),
1338 CLKDEV_INIT("dma-pl330.1", "apb_pclk", &clk_pdma1),
1339 CLKDEV_INIT("s3c64xx-spi.0", "spi_busclk0", &clk_sclk_spi0.clk),
1340 CLKDEV_INIT("s3c64xx-spi.1", "spi_busclk0", &clk_sclk_spi1.clk),
1341 CLKDEV_INIT("s3c64xx-spi.2", "spi_busclk0", &clk_sclk_spi2.clk),
1342};
1343
1344static int xtal_rate;
1345
1346static unsigned long exynos4_fout_apll_get_rate(struct clk *clk)
1347{
1348 if (soc_is_exynos4210())
1349 return s5p_get_pll45xx(xtal_rate, __raw_readl(S5P_APLL_CON0),
1350 pll_4508);
1351 else if (soc_is_exynos4212() || soc_is_exynos4412())
1352 return s5p_get_pll35xx(xtal_rate, __raw_readl(S5P_APLL_CON0));
1353 else
1354 return 0;
1355}
1356
1357static struct clk_ops exynos4_fout_apll_ops = {
1358 .get_rate = exynos4_fout_apll_get_rate,
1359};
1360
1361static u32 vpll_div[][8] = {
1362 { 54000000, 3, 53, 3, 1024, 0, 17, 0 },
1363 { 108000000, 3, 53, 2, 1024, 0, 17, 0 },
1364};
1365
1366static unsigned long exynos4_vpll_get_rate(struct clk *clk)
1367{
1368 return clk->rate;
1369}
1370
1371static int exynos4_vpll_set_rate(struct clk *clk, unsigned long rate)
1372{
1373 unsigned int vpll_con0, vpll_con1 = 0;
1374 unsigned int i;
1375
1376 /* Return if nothing changed */
1377 if (clk->rate == rate)
1378 return 0;
1379
1380 vpll_con0 = __raw_readl(S5P_VPLL_CON0);
1381 vpll_con0 &= ~(0x1 << 27 | \
1382 PLL90XX_MDIV_MASK << PLL46XX_MDIV_SHIFT | \
1383 PLL90XX_PDIV_MASK << PLL46XX_PDIV_SHIFT | \
1384 PLL90XX_SDIV_MASK << PLL46XX_SDIV_SHIFT);
1385
1386 vpll_con1 = __raw_readl(S5P_VPLL_CON1);
1387 vpll_con1 &= ~(PLL46XX_MRR_MASK << PLL46XX_MRR_SHIFT | \
1388 PLL46XX_MFR_MASK << PLL46XX_MFR_SHIFT | \
1389 PLL4650C_KDIV_MASK << PLL46XX_KDIV_SHIFT);
1390
1391 for (i = 0; i < ARRAY_SIZE(vpll_div); i++) {
1392 if (vpll_div[i][0] == rate) {
1393 vpll_con0 |= vpll_div[i][1] << PLL46XX_PDIV_SHIFT;
1394 vpll_con0 |= vpll_div[i][2] << PLL46XX_MDIV_SHIFT;
1395 vpll_con0 |= vpll_div[i][3] << PLL46XX_SDIV_SHIFT;
1396 vpll_con1 |= vpll_div[i][4] << PLL46XX_KDIV_SHIFT;
1397 vpll_con1 |= vpll_div[i][5] << PLL46XX_MFR_SHIFT;
1398 vpll_con1 |= vpll_div[i][6] << PLL46XX_MRR_SHIFT;
1399 vpll_con0 |= vpll_div[i][7] << 27;
1400 break;
1401 }
1402 }
1403
1404 if (i == ARRAY_SIZE(vpll_div)) {
1405 printk(KERN_ERR "%s: Invalid Clock VPLL Frequency\n",
1406 __func__);
1407 return -EINVAL;
1408 }
1409
1410 __raw_writel(vpll_con0, S5P_VPLL_CON0);
1411 __raw_writel(vpll_con1, S5P_VPLL_CON1);
1412
1413 /* Wait for VPLL lock */
1414 while (!(__raw_readl(S5P_VPLL_CON0) & (1 << PLL46XX_LOCKED_SHIFT)))
1415 continue;
1416
1417 clk->rate = rate;
1418 return 0;
1419}
1420
1421static struct clk_ops exynos4_vpll_ops = {
1422 .get_rate = exynos4_vpll_get_rate,
1423 .set_rate = exynos4_vpll_set_rate,
1424};
1425
1426void __init_or_cpufreq exynos4_setup_clocks(void)
1427{
1428 struct clk *xtal_clk;
1429 unsigned long apll = 0;
1430 unsigned long mpll = 0;
1431 unsigned long epll = 0;
1432 unsigned long vpll = 0;
1433 unsigned long vpllsrc;
1434 unsigned long xtal;
1435 unsigned long armclk;
1436 unsigned long sclk_dmc;
1437 unsigned long aclk_200;
1438 unsigned long aclk_100;
1439 unsigned long aclk_160;
1440 unsigned long aclk_133;
1441 unsigned int ptr;
1442
1443 printk(KERN_DEBUG "%s: registering clocks\n", __func__);
1444
1445 xtal_clk = clk_get(NULL, "xtal");
1446 BUG_ON(IS_ERR(xtal_clk));
1447
1448 xtal = clk_get_rate(xtal_clk);
1449
1450 xtal_rate = xtal;
1451
1452 clk_put(xtal_clk);
1453
1454 printk(KERN_DEBUG "%s: xtal is %ld\n", __func__, xtal);
1455
1456 if (soc_is_exynos4210()) {
1457 apll = s5p_get_pll45xx(xtal, __raw_readl(S5P_APLL_CON0),
1458 pll_4508);
1459 mpll = s5p_get_pll45xx(xtal, __raw_readl(S5P_MPLL_CON0),
1460 pll_4508);
1461 epll = s5p_get_pll46xx(xtal, __raw_readl(S5P_EPLL_CON0),
1462 __raw_readl(S5P_EPLL_CON1), pll_4600);
1463
1464 vpllsrc = clk_get_rate(&clk_vpllsrc.clk);
1465 vpll = s5p_get_pll46xx(vpllsrc, __raw_readl(S5P_VPLL_CON0),
1466 __raw_readl(S5P_VPLL_CON1), pll_4650c);
1467 } else if (soc_is_exynos4212() || soc_is_exynos4412()) {
1468 apll = s5p_get_pll35xx(xtal, __raw_readl(S5P_APLL_CON0));
1469 mpll = s5p_get_pll35xx(xtal, __raw_readl(S5P_MPLL_CON0));
1470 epll = s5p_get_pll36xx(xtal, __raw_readl(S5P_EPLL_CON0),
1471 __raw_readl(S5P_EPLL_CON1));
1472
1473 vpllsrc = clk_get_rate(&clk_vpllsrc.clk);
1474 vpll = s5p_get_pll36xx(vpllsrc, __raw_readl(S5P_VPLL_CON0),
1475 __raw_readl(S5P_VPLL_CON1));
1476 } else {
1477 /* nothing */
1478 }
1479
1480 clk_fout_apll.ops = &exynos4_fout_apll_ops;
1481 clk_fout_mpll.rate = mpll;
1482 clk_fout_epll.rate = epll;
1483 clk_fout_vpll.ops = &exynos4_vpll_ops;
1484 clk_fout_vpll.rate = vpll;
1485
1486 printk(KERN_INFO "EXYNOS4: PLL settings, A=%ld, M=%ld, E=%ld V=%ld",
1487 apll, mpll, epll, vpll);
1488
1489 armclk = clk_get_rate(&clk_armclk.clk);
1490 sclk_dmc = clk_get_rate(&clk_sclk_dmc.clk);
1491
1492 aclk_200 = clk_get_rate(&clk_aclk_200.clk);
1493 aclk_100 = clk_get_rate(&clk_aclk_100.clk);
1494 aclk_160 = clk_get_rate(&clk_aclk_160.clk);
1495 aclk_133 = clk_get_rate(&clk_aclk_133.clk);
1496
1497 printk(KERN_INFO "EXYNOS4: ARMCLK=%ld, DMC=%ld, ACLK200=%ld\n"
1498 "ACLK100=%ld, ACLK160=%ld, ACLK133=%ld\n",
1499 armclk, sclk_dmc, aclk_200,
1500 aclk_100, aclk_160, aclk_133);
1501
1502 clk_f.rate = armclk;
1503 clk_h.rate = sclk_dmc;
1504 clk_p.rate = aclk_100;
1505
1506 for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++)
1507 s3c_set_clksrc(&clksrcs[ptr], true);
1508}
1509
1510static struct clk *clks[] __initdata = {
1511 &clk_sclk_hdmi27m,
1512 &clk_sclk_hdmiphy,
1513 &clk_sclk_usbphy0,
1514 &clk_sclk_usbphy1,
1515};
1516
1517#ifdef CONFIG_PM_SLEEP
1518static int exynos4_clock_suspend(void)
1519{
1520 s3c_pm_do_save(exynos4_clock_save, ARRAY_SIZE(exynos4_clock_save));
1521 return 0;
1522}
1523
1524static void exynos4_clock_resume(void)
1525{
1526 s3c_pm_do_restore_core(exynos4_clock_save, ARRAY_SIZE(exynos4_clock_save));
1527}
1528
1529#else
1530#define exynos4_clock_suspend NULL
1531#define exynos4_clock_resume NULL
1532#endif
1533
1534struct syscore_ops exynos4_clock_syscore_ops = {
1535 .suspend = exynos4_clock_suspend,
1536 .resume = exynos4_clock_resume,
1537};
1538
1539void __init exynos4_register_clocks(void)
1540{
1541 int ptr;
1542
1543 s3c24xx_register_clocks(clks, ARRAY_SIZE(clks));
1544
1545 for (ptr = 0; ptr < ARRAY_SIZE(sysclks); ptr++)
1546 s3c_register_clksrc(sysclks[ptr], 1);
1547
1548 for (ptr = 0; ptr < ARRAY_SIZE(sclk_tv); ptr++)
1549 s3c_register_clksrc(sclk_tv[ptr], 1);
1550
1551 for (ptr = 0; ptr < ARRAY_SIZE(clksrc_cdev); ptr++)
1552 s3c_register_clksrc(clksrc_cdev[ptr], 1);
1553
1554 s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs));
1555 s3c_register_clocks(init_clocks, ARRAY_SIZE(init_clocks));
1556
1557 s3c24xx_register_clocks(clk_cdev, ARRAY_SIZE(clk_cdev));
1558 for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++)
1559 s3c_disable_clocks(clk_cdev[ptr], 1);
1560
1561 s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
1562 s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
1563 clkdev_add_table(exynos4_clk_lookup, ARRAY_SIZE(exynos4_clk_lookup));
1564
1565 register_syscore_ops(&exynos4_clock_syscore_ops);
1566 s3c24xx_register_clock(&dummy_apb_pclk);
1567
1568 s3c_pwmclk_init();
1569}
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c
index 7f1f2687147d..519ef0ecd0fa 100644
--- a/arch/arm/mach-exynos/common.c
+++ b/arch/arm/mach-exynos/common.c
@@ -695,7 +695,7 @@ static void exynos4_irq_eint0_15(unsigned int irq, struct irq_desc *desc)
695 chained_irq_exit(chip, desc); 695 chained_irq_exit(chip, desc);
696} 696}
697 697
698int __init exynos4_init_irq_eint(void) 698static int __init exynos4_init_irq_eint(void)
699{ 699{
700 int irq; 700 int irq;
701 701
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h
index 1ac49de0f398..8c1efe692c20 100644
--- a/arch/arm/mach-exynos/common.h
+++ b/arch/arm/mach-exynos/common.h
@@ -15,12 +15,21 @@
15void exynos_init_io(struct map_desc *mach_desc, int size); 15void exynos_init_io(struct map_desc *mach_desc, int size);
16void exynos4_init_irq(void); 16void exynos4_init_irq(void);
17 17
18#ifdef CONFIG_ARCH_EXYNOS4
18void exynos4_register_clocks(void); 19void exynos4_register_clocks(void);
19void exynos4_setup_clocks(void); 20void exynos4_setup_clocks(void);
20 21
21void exynos4210_register_clocks(void); 22void exynos4210_register_clocks(void);
22void exynos4212_register_clocks(void); 23void exynos4212_register_clocks(void);
23 24
25#else
26#define exynos4_register_clocks()
27#define exynos4_setup_clocks()
28
29#define exynos4210_register_clocks()
30#define exynos4212_register_clocks()
31#endif
32
24void exynos4_restart(char mode, const char *cmd); 33void exynos4_restart(char mode, const char *cmd);
25 34
26extern struct sys_timer exynos4_timer; 35extern struct sys_timer exynos4_timer;
diff --git a/arch/arm/mach-exynos/dma.c b/arch/arm/mach-exynos/dma.c
index 91370def4a70..25f3ef2c36e5 100644
--- a/arch/arm/mach-exynos/dma.c
+++ b/arch/arm/mach-exynos/dma.c
@@ -36,7 +36,7 @@
36 36
37static u64 dma_dmamask = DMA_BIT_MASK(32); 37static u64 dma_dmamask = DMA_BIT_MASK(32);
38 38
39u8 pdma0_peri[] = { 39static u8 pdma0_peri[] = {
40 DMACH_PCM0_RX, 40 DMACH_PCM0_RX,
41 DMACH_PCM0_TX, 41 DMACH_PCM0_TX,
42 DMACH_PCM2_RX, 42 DMACH_PCM2_RX,
@@ -69,15 +69,15 @@ u8 pdma0_peri[] = {
69 DMACH_AC97_PCMOUT, 69 DMACH_AC97_PCMOUT,
70}; 70};
71 71
72struct dma_pl330_platdata exynos4_pdma0_pdata = { 72static struct dma_pl330_platdata exynos4_pdma0_pdata = {
73 .nr_valid_peri = ARRAY_SIZE(pdma0_peri), 73 .nr_valid_peri = ARRAY_SIZE(pdma0_peri),
74 .peri_id = pdma0_peri, 74 .peri_id = pdma0_peri,
75}; 75};
76 76
77AMBA_AHB_DEVICE(exynos4_pdma0, "dma-pl330.0", 0x00041330, EXYNOS4_PA_PDMA0, 77static AMBA_AHB_DEVICE(exynos4_pdma0, "dma-pl330.0", 0x00041330,
78 {IRQ_PDMA0}, &exynos4_pdma0_pdata); 78 EXYNOS4_PA_PDMA0, {IRQ_PDMA0}, &exynos4_pdma0_pdata);
79 79
80u8 pdma1_peri[] = { 80static u8 pdma1_peri[] = {
81 DMACH_PCM0_RX, 81 DMACH_PCM0_RX,
82 DMACH_PCM0_TX, 82 DMACH_PCM0_TX,
83 DMACH_PCM1_RX, 83 DMACH_PCM1_RX,
@@ -105,13 +105,13 @@ u8 pdma1_peri[] = {
105 DMACH_SLIMBUS5_TX, 105 DMACH_SLIMBUS5_TX,
106}; 106};
107 107
108struct dma_pl330_platdata exynos4_pdma1_pdata = { 108static struct dma_pl330_platdata exynos4_pdma1_pdata = {
109 .nr_valid_peri = ARRAY_SIZE(pdma1_peri), 109 .nr_valid_peri = ARRAY_SIZE(pdma1_peri),
110 .peri_id = pdma1_peri, 110 .peri_id = pdma1_peri,
111}; 111};
112 112
113AMBA_AHB_DEVICE(exynos4_pdma1, "dma-pl330.1", 0x00041330, EXYNOS4_PA_PDMA1, 113static AMBA_AHB_DEVICE(exynos4_pdma1, "dma-pl330.1", 0x00041330,
114 {IRQ_PDMA1}, &exynos4_pdma1_pdata); 114 EXYNOS4_PA_PDMA1, {IRQ_PDMA1}, &exynos4_pdma1_pdata);
115 115
116static int __init exynos4_dma_init(void) 116static int __init exynos4_dma_init(void)
117{ 117{
diff --git a/arch/arm/mach-exynos/include/mach/exynos4-clock.h b/arch/arm/mach-exynos/include/mach/exynos4-clock.h
deleted file mode 100644
index a07fcbf55251..000000000000
--- a/arch/arm/mach-exynos/include/mach/exynos4-clock.h
+++ /dev/null
@@ -1,43 +0,0 @@
1/*
2 * linux/arch/arm/mach-exynos4/include/mach/exynos4-clock.h
3 *
4 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
5 * http://www.samsung.com
6 *
7 * Header file for exynos4 clock support
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12*/
13
14#ifndef __ASM_ARCH_CLOCK_H
15#define __ASM_ARCH_CLOCK_H __FILE__
16
17#include <linux/clk.h>
18
19extern struct clk clk_sclk_hdmi27m;
20extern struct clk clk_sclk_usbphy0;
21extern struct clk clk_sclk_usbphy1;
22extern struct clk clk_sclk_hdmiphy;
23
24extern struct clksrc_clk clk_sclk_apll;
25extern struct clksrc_clk clk_mout_mpll;
26extern struct clksrc_clk clk_aclk_133;
27extern struct clksrc_clk clk_mout_epll;
28extern struct clksrc_clk clk_sclk_vpll;
29
30extern struct clk *clkset_corebus_list[];
31extern struct clksrc_sources clkset_mout_corebus;
32
33extern struct clk *clkset_aclk_top_list[];
34extern struct clksrc_sources clkset_aclk;
35
36extern struct clk *clkset_group_list[];
37extern struct clksrc_sources clkset_group;
38
39extern int exynos4_clksrc_mask_fsys_ctrl(struct clk *clk, int enable);
40extern int exynos4_clk_ip_fsys_ctrl(struct clk *clk, int enable);
41extern int exynos4_clk_ip_lcd1_ctrl(struct clk *clk, int enable);
42
43#endif /* __ASM_ARCH_CLOCK_H */
diff --git a/arch/arm/mach-exynos/include/mach/regs-clock.h b/arch/arm/mach-exynos/include/mach/regs-clock.h
index 6c37ebe94829..1e4abd64a547 100644
--- a/arch/arm/mach-exynos/include/mach/regs-clock.h
+++ b/arch/arm/mach-exynos/include/mach/regs-clock.h
@@ -16,195 +16,247 @@
16#include <plat/cpu.h> 16#include <plat/cpu.h>
17#include <mach/map.h> 17#include <mach/map.h>
18 18
19#define S5P_CLKREG(x) (S5P_VA_CMU + (x)) 19#define EXYNOS_CLKREG(x) (S5P_VA_CMU + (x))
20 20
21#define S5P_CLKDIV_LEFTBUS S5P_CLKREG(0x04500) 21#define EXYNOS4_CLKDIV_LEFTBUS EXYNOS_CLKREG(0x04500)
22#define S5P_CLKDIV_STAT_LEFTBUS S5P_CLKREG(0x04600) 22#define EXYNOS4_CLKDIV_STAT_LEFTBUS EXYNOS_CLKREG(0x04600)
23#define S5P_CLKGATE_IP_LEFTBUS S5P_CLKREG(0x04800) 23#define EXYNOS4_CLKGATE_IP_LEFTBUS EXYNOS_CLKREG(0x04800)
24 24
25#define S5P_CLKDIV_RIGHTBUS S5P_CLKREG(0x08500) 25#define EXYNOS4_CLKDIV_RIGHTBUS EXYNOS_CLKREG(0x08500)
26#define S5P_CLKDIV_STAT_RIGHTBUS S5P_CLKREG(0x08600) 26#define EXYNOS4_CLKDIV_STAT_RIGHTBUS EXYNOS_CLKREG(0x08600)
27#define S5P_CLKGATE_IP_RIGHTBUS S5P_CLKREG(0x08800) 27#define EXYNOS4_CLKGATE_IP_RIGHTBUS EXYNOS_CLKREG(0x08800)
28 28
29#define S5P_EPLL_LOCK S5P_CLKREG(0x0C010) 29#define EXYNOS4_EPLL_LOCK EXYNOS_CLKREG(0x0C010)
30#define S5P_VPLL_LOCK S5P_CLKREG(0x0C020) 30#define EXYNOS4_VPLL_LOCK EXYNOS_CLKREG(0x0C020)
31 31
32#define S5P_EPLL_CON0 S5P_CLKREG(0x0C110) 32#define EXYNOS4_EPLL_CON0 EXYNOS_CLKREG(0x0C110)
33#define S5P_EPLL_CON1 S5P_CLKREG(0x0C114) 33#define EXYNOS4_EPLL_CON1 EXYNOS_CLKREG(0x0C114)
34#define S5P_VPLL_CON0 S5P_CLKREG(0x0C120) 34#define EXYNOS4_VPLL_CON0 EXYNOS_CLKREG(0x0C120)
35#define S5P_VPLL_CON1 S5P_CLKREG(0x0C124) 35#define EXYNOS4_VPLL_CON1 EXYNOS_CLKREG(0x0C124)
36 36
37#define S5P_CLKSRC_TOP0 S5P_CLKREG(0x0C210) 37#define EXYNOS4_CLKSRC_TOP0 EXYNOS_CLKREG(0x0C210)
38#define S5P_CLKSRC_TOP1 S5P_CLKREG(0x0C214) 38#define EXYNOS4_CLKSRC_TOP1 EXYNOS_CLKREG(0x0C214)
39#define S5P_CLKSRC_CAM S5P_CLKREG(0x0C220) 39#define EXYNOS4_CLKSRC_CAM EXYNOS_CLKREG(0x0C220)
40#define S5P_CLKSRC_TV S5P_CLKREG(0x0C224) 40#define EXYNOS4_CLKSRC_TV EXYNOS_CLKREG(0x0C224)
41#define S5P_CLKSRC_MFC S5P_CLKREG(0x0C228) 41#define EXYNOS4_CLKSRC_MFC EXYNOS_CLKREG(0x0C228)
42#define S5P_CLKSRC_G3D S5P_CLKREG(0x0C22C) 42#define EXYNOS4_CLKSRC_G3D EXYNOS_CLKREG(0x0C22C)
43#define S5P_CLKSRC_IMAGE S5P_CLKREG(0x0C230) 43#define EXYNOS4_CLKSRC_IMAGE EXYNOS_CLKREG(0x0C230)
44#define S5P_CLKSRC_LCD0 S5P_CLKREG(0x0C234) 44#define EXYNOS4_CLKSRC_LCD0 EXYNOS_CLKREG(0x0C234)
45#define S5P_CLKSRC_MAUDIO S5P_CLKREG(0x0C23C) 45#define EXYNOS4_CLKSRC_MAUDIO EXYNOS_CLKREG(0x0C23C)
46#define S5P_CLKSRC_FSYS S5P_CLKREG(0x0C240) 46#define EXYNOS4_CLKSRC_FSYS EXYNOS_CLKREG(0x0C240)
47#define S5P_CLKSRC_PERIL0 S5P_CLKREG(0x0C250) 47#define EXYNOS4_CLKSRC_PERIL0 EXYNOS_CLKREG(0x0C250)
48#define S5P_CLKSRC_PERIL1 S5P_CLKREG(0x0C254) 48#define EXYNOS4_CLKSRC_PERIL1 EXYNOS_CLKREG(0x0C254)
49 49
50#define S5P_CLKSRC_MASK_TOP S5P_CLKREG(0x0C310) 50#define EXYNOS4_CLKSRC_MASK_TOP EXYNOS_CLKREG(0x0C310)
51#define S5P_CLKSRC_MASK_CAM S5P_CLKREG(0x0C320) 51#define EXYNOS4_CLKSRC_MASK_CAM EXYNOS_CLKREG(0x0C320)
52#define S5P_CLKSRC_MASK_TV S5P_CLKREG(0x0C324) 52#define EXYNOS4_CLKSRC_MASK_TV EXYNOS_CLKREG(0x0C324)
53#define S5P_CLKSRC_MASK_LCD0 S5P_CLKREG(0x0C334) 53#define EXYNOS4_CLKSRC_MASK_LCD0 EXYNOS_CLKREG(0x0C334)
54#define S5P_CLKSRC_MASK_MAUDIO S5P_CLKREG(0x0C33C) 54#define EXYNOS4_CLKSRC_MASK_MAUDIO EXYNOS_CLKREG(0x0C33C)
55#define S5P_CLKSRC_MASK_FSYS S5P_CLKREG(0x0C340) 55#define EXYNOS4_CLKSRC_MASK_FSYS EXYNOS_CLKREG(0x0C340)
56#define S5P_CLKSRC_MASK_PERIL0 S5P_CLKREG(0x0C350) 56#define EXYNOS4_CLKSRC_MASK_PERIL0 EXYNOS_CLKREG(0x0C350)
57#define S5P_CLKSRC_MASK_PERIL1 S5P_CLKREG(0x0C354) 57#define EXYNOS4_CLKSRC_MASK_PERIL1 EXYNOS_CLKREG(0x0C354)
58 58
59#define S5P_CLKDIV_TOP S5P_CLKREG(0x0C510) 59#define EXYNOS4_CLKDIV_TOP EXYNOS_CLKREG(0x0C510)
60#define S5P_CLKDIV_CAM S5P_CLKREG(0x0C520) 60#define EXYNOS4_CLKDIV_CAM EXYNOS_CLKREG(0x0C520)
61#define S5P_CLKDIV_TV S5P_CLKREG(0x0C524) 61#define EXYNOS4_CLKDIV_TV EXYNOS_CLKREG(0x0C524)
62#define S5P_CLKDIV_MFC S5P_CLKREG(0x0C528) 62#define EXYNOS4_CLKDIV_MFC EXYNOS_CLKREG(0x0C528)
63#define S5P_CLKDIV_G3D S5P_CLKREG(0x0C52C) 63#define EXYNOS4_CLKDIV_G3D EXYNOS_CLKREG(0x0C52C)
64#define S5P_CLKDIV_IMAGE S5P_CLKREG(0x0C530) 64#define EXYNOS4_CLKDIV_IMAGE EXYNOS_CLKREG(0x0C530)
65#define S5P_CLKDIV_LCD0 S5P_CLKREG(0x0C534) 65#define EXYNOS4_CLKDIV_LCD0 EXYNOS_CLKREG(0x0C534)
66#define S5P_CLKDIV_MAUDIO S5P_CLKREG(0x0C53C) 66#define EXYNOS4_CLKDIV_MAUDIO EXYNOS_CLKREG(0x0C53C)
67#define S5P_CLKDIV_FSYS0 S5P_CLKREG(0x0C540) 67#define EXYNOS4_CLKDIV_FSYS0 EXYNOS_CLKREG(0x0C540)
68#define S5P_CLKDIV_FSYS1 S5P_CLKREG(0x0C544) 68#define EXYNOS4_CLKDIV_FSYS1 EXYNOS_CLKREG(0x0C544)
69#define S5P_CLKDIV_FSYS2 S5P_CLKREG(0x0C548) 69#define EXYNOS4_CLKDIV_FSYS2 EXYNOS_CLKREG(0x0C548)
70#define S5P_CLKDIV_FSYS3 S5P_CLKREG(0x0C54C) 70#define EXYNOS4_CLKDIV_FSYS3 EXYNOS_CLKREG(0x0C54C)
71#define S5P_CLKDIV_PERIL0 S5P_CLKREG(0x0C550) 71#define EXYNOS4_CLKDIV_PERIL0 EXYNOS_CLKREG(0x0C550)
72#define S5P_CLKDIV_PERIL1 S5P_CLKREG(0x0C554) 72#define EXYNOS4_CLKDIV_PERIL1 EXYNOS_CLKREG(0x0C554)
73#define S5P_CLKDIV_PERIL2 S5P_CLKREG(0x0C558) 73#define EXYNOS4_CLKDIV_PERIL2 EXYNOS_CLKREG(0x0C558)
74#define S5P_CLKDIV_PERIL3 S5P_CLKREG(0x0C55C) 74#define EXYNOS4_CLKDIV_PERIL3 EXYNOS_CLKREG(0x0C55C)
75#define S5P_CLKDIV_PERIL4 S5P_CLKREG(0x0C560) 75#define EXYNOS4_CLKDIV_PERIL4 EXYNOS_CLKREG(0x0C560)
76#define S5P_CLKDIV_PERIL5 S5P_CLKREG(0x0C564) 76#define EXYNOS4_CLKDIV_PERIL5 EXYNOS_CLKREG(0x0C564)
77#define S5P_CLKDIV2_RATIO S5P_CLKREG(0x0C580) 77#define EXYNOS4_CLKDIV2_RATIO EXYNOS_CLKREG(0x0C580)
78 78
79#define S5P_CLKDIV_STAT_TOP S5P_CLKREG(0x0C610) 79#define EXYNOS4_CLKDIV_STAT_TOP EXYNOS_CLKREG(0x0C610)
80 80#define EXYNOS4_CLKDIV_STAT_MFC EXYNOS_CLKREG(0x0C628)
81#define S5P_CLKGATE_SCLKCAM S5P_CLKREG(0x0C820) 81
82#define S5P_CLKGATE_IP_CAM S5P_CLKREG(0x0C920) 82#define EXYNOS4_CLKGATE_SCLKCAM EXYNOS_CLKREG(0x0C820)
83#define S5P_CLKGATE_IP_TV S5P_CLKREG(0x0C924) 83#define EXYNOS4_CLKGATE_IP_CAM EXYNOS_CLKREG(0x0C920)
84#define S5P_CLKGATE_IP_MFC S5P_CLKREG(0x0C928) 84#define EXYNOS4_CLKGATE_IP_TV EXYNOS_CLKREG(0x0C924)
85#define S5P_CLKGATE_IP_G3D S5P_CLKREG(0x0C92C) 85#define EXYNOS4_CLKGATE_IP_MFC EXYNOS_CLKREG(0x0C928)
86#define S5P_CLKGATE_IP_IMAGE (soc_is_exynos4210() ? \ 86#define EXYNOS4_CLKGATE_IP_G3D EXYNOS_CLKREG(0x0C92C)
87 S5P_CLKREG(0x0C930) : \ 87#define EXYNOS4_CLKGATE_IP_IMAGE (soc_is_exynos4210() ? \
88 S5P_CLKREG(0x04930)) 88 EXYNOS_CLKREG(0x0C930) : \
89#define S5P_CLKGATE_IP_IMAGE_4210 S5P_CLKREG(0x0C930) 89 EXYNOS_CLKREG(0x04930))
90#define S5P_CLKGATE_IP_IMAGE_4212 S5P_CLKREG(0x04930) 90#define EXYNOS4210_CLKGATE_IP_IMAGE EXYNOS_CLKREG(0x0C930)
91#define S5P_CLKGATE_IP_LCD0 S5P_CLKREG(0x0C934) 91#define EXYNOS4212_CLKGATE_IP_IMAGE EXYNOS_CLKREG(0x04930)
92#define S5P_CLKGATE_IP_FSYS S5P_CLKREG(0x0C940) 92#define EXYNOS4_CLKGATE_IP_LCD0 EXYNOS_CLKREG(0x0C934)
93#define S5P_CLKGATE_IP_GPS S5P_CLKREG(0x0C94C) 93#define EXYNOS4_CLKGATE_IP_FSYS EXYNOS_CLKREG(0x0C940)
94#define S5P_CLKGATE_IP_PERIL S5P_CLKREG(0x0C950) 94#define EXYNOS4_CLKGATE_IP_GPS EXYNOS_CLKREG(0x0C94C)
95#define S5P_CLKGATE_IP_PERIR (soc_is_exynos4210() ? \ 95#define EXYNOS4_CLKGATE_IP_PERIL EXYNOS_CLKREG(0x0C950)
96 S5P_CLKREG(0x0C960) : \ 96#define EXYNOS4_CLKGATE_IP_PERIR (soc_is_exynos4210() ? \
97 S5P_CLKREG(0x08960)) 97 EXYNOS_CLKREG(0x0C960) : \
98#define S5P_CLKGATE_IP_PERIR_4210 S5P_CLKREG(0x0C960) 98 EXYNOS_CLKREG(0x08960))
99#define S5P_CLKGATE_IP_PERIR_4212 S5P_CLKREG(0x08960) 99#define EXYNOS4210_CLKGATE_IP_PERIR EXYNOS_CLKREG(0x0C960)
100#define S5P_CLKGATE_BLOCK S5P_CLKREG(0x0C970) 100#define EXYNOS4212_CLKGATE_IP_PERIR EXYNOS_CLKREG(0x08960)
101 101#define EXYNOS4_CLKGATE_BLOCK EXYNOS_CLKREG(0x0C970)
102#define S5P_CLKSRC_MASK_DMC S5P_CLKREG(0x10300) 102
103#define S5P_CLKSRC_DMC S5P_CLKREG(0x10200) 103#define EXYNOS4_CLKSRC_MASK_DMC EXYNOS_CLKREG(0x10300)
104#define S5P_CLKDIV_DMC0 S5P_CLKREG(0x10500) 104#define EXYNOS4_CLKSRC_DMC EXYNOS_CLKREG(0x10200)
105#define S5P_CLKDIV_DMC1 S5P_CLKREG(0x10504) 105#define EXYNOS4_CLKDIV_DMC0 EXYNOS_CLKREG(0x10500)
106#define S5P_CLKDIV_STAT_DMC0 S5P_CLKREG(0x10600) 106#define EXYNOS4_CLKDIV_DMC1 EXYNOS_CLKREG(0x10504)
107#define S5P_CLKGATE_IP_DMC S5P_CLKREG(0x10900) 107#define EXYNOS4_CLKDIV_STAT_DMC0 EXYNOS_CLKREG(0x10600)
108 108#define EXYNOS4_CLKDIV_STAT_DMC1 EXYNOS_CLKREG(0x10604)
109#define S5P_APLL_LOCK S5P_CLKREG(0x14000) 109#define EXYNOS4_CLKGATE_IP_DMC EXYNOS_CLKREG(0x10900)
110#define S5P_MPLL_LOCK (soc_is_exynos4210() ? \ 110
111 S5P_CLKREG(0x14004) : \ 111#define EXYNOS4_DMC_PAUSE_CTRL EXYNOS_CLKREG(0x11094)
112 S5P_CLKREG(0x10008)) 112#define EXYNOS4_DMC_PAUSE_ENABLE (1 << 0)
113#define S5P_APLL_CON0 S5P_CLKREG(0x14100) 113
114#define S5P_APLL_CON1 S5P_CLKREG(0x14104) 114#define EXYNOS4_APLL_LOCK EXYNOS_CLKREG(0x14000)
115#define S5P_MPLL_CON0 (soc_is_exynos4210() ? \ 115#define EXYNOS4_MPLL_LOCK (soc_is_exynos4210() ? \
116 S5P_CLKREG(0x14108) : \ 116 EXYNOS_CLKREG(0x14004) : \
117 S5P_CLKREG(0x10108)) 117 EXYNOS_CLKREG(0x10008))
118#define S5P_MPLL_CON1 (soc_is_exynos4210() ? \ 118#define EXYNOS4_APLL_CON0 EXYNOS_CLKREG(0x14100)
119 S5P_CLKREG(0x1410C) : \ 119#define EXYNOS4_APLL_CON1 EXYNOS_CLKREG(0x14104)
120 S5P_CLKREG(0x1010C)) 120#define EXYNOS4_MPLL_CON0 (soc_is_exynos4210() ? \
121 121 EXYNOS_CLKREG(0x14108) : \
122#define S5P_CLKSRC_CPU S5P_CLKREG(0x14200) 122 EXYNOS_CLKREG(0x10108))
123#define S5P_CLKMUX_STATCPU S5P_CLKREG(0x14400) 123#define EXYNOS4_MPLL_CON1 (soc_is_exynos4210() ? \
124 124 EXYNOS_CLKREG(0x1410C) : \
125#define S5P_CLKDIV_CPU S5P_CLKREG(0x14500) 125 EXYNOS_CLKREG(0x1010C))
126#define S5P_CLKDIV_CPU1 S5P_CLKREG(0x14504) 126
127#define S5P_CLKDIV_STATCPU S5P_CLKREG(0x14600) 127#define EXYNOS4_CLKSRC_CPU EXYNOS_CLKREG(0x14200)
128#define S5P_CLKDIV_STATCPU1 S5P_CLKREG(0x14604) 128#define EXYNOS4_CLKMUX_STATCPU EXYNOS_CLKREG(0x14400)
129 129
130#define S5P_CLKGATE_SCLKCPU S5P_CLKREG(0x14800) 130#define EXYNOS4_CLKDIV_CPU EXYNOS_CLKREG(0x14500)
131#define S5P_CLKGATE_IP_CPU S5P_CLKREG(0x14900) 131#define EXYNOS4_CLKDIV_CPU1 EXYNOS_CLKREG(0x14504)
132 132#define EXYNOS4_CLKDIV_STATCPU EXYNOS_CLKREG(0x14600)
133#define S5P_APLL_LOCKTIME (0x1C20) /* 300us */ 133#define EXYNOS4_CLKDIV_STATCPU1 EXYNOS_CLKREG(0x14604)
134 134
135#define S5P_APLLCON0_ENABLE_SHIFT (31) 135#define EXYNOS4_CLKGATE_SCLKCPU EXYNOS_CLKREG(0x14800)
136#define S5P_APLLCON0_LOCKED_SHIFT (29) 136#define EXYNOS4_CLKGATE_IP_CPU EXYNOS_CLKREG(0x14900)
137#define S5P_APLL_VAL_1000 ((250 << 16) | (6 << 8) | 1) 137
138#define S5P_APLL_VAL_800 ((200 << 16) | (6 << 8) | 1) 138#define EXYNOS4_APLL_LOCKTIME (0x1C20) /* 300us */
139 139
140#define S5P_EPLLCON0_ENABLE_SHIFT (31) 140#define EXYNOS4_APLLCON0_ENABLE_SHIFT (31)
141#define S5P_EPLLCON0_LOCKED_SHIFT (29) 141#define EXYNOS4_APLLCON0_LOCKED_SHIFT (29)
142 142#define EXYNOS4_APLL_VAL_1000 ((250 << 16) | (6 << 8) | 1)
143#define S5P_VPLLCON0_ENABLE_SHIFT (31) 143#define EXYNOS4_APLL_VAL_800 ((200 << 16) | (6 << 8) | 1)
144#define S5P_VPLLCON0_LOCKED_SHIFT (29) 144
145 145#define EXYNOS4_EPLLCON0_ENABLE_SHIFT (31)
146#define S5P_CLKSRC_CPU_MUXCORE_SHIFT (16) 146#define EXYNOS4_EPLLCON0_LOCKED_SHIFT (29)
147#define S5P_CLKMUX_STATCPU_MUXCORE_MASK (0x7 << S5P_CLKSRC_CPU_MUXCORE_SHIFT) 147
148 148#define EXYNOS4_VPLLCON0_ENABLE_SHIFT (31)
149#define S5P_CLKDIV_CPU0_CORE_SHIFT (0) 149#define EXYNOS4_VPLLCON0_LOCKED_SHIFT (29)
150#define S5P_CLKDIV_CPU0_CORE_MASK (0x7 << S5P_CLKDIV_CPU0_CORE_SHIFT) 150
151#define S5P_CLKDIV_CPU0_COREM0_SHIFT (4) 151#define EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT (16)
152#define S5P_CLKDIV_CPU0_COREM0_MASK (0x7 << S5P_CLKDIV_CPU0_COREM0_SHIFT) 152#define EXYNOS4_CLKMUX_STATCPU_MUXCORE_MASK (0x7 << EXYNOS4_CLKSRC_CPU_MUXCORE_SHIFT)
153#define S5P_CLKDIV_CPU0_COREM1_SHIFT (8) 153
154#define S5P_CLKDIV_CPU0_COREM1_MASK (0x7 << S5P_CLKDIV_CPU0_COREM1_SHIFT) 154#define EXYNOS4_CLKDIV_CPU0_CORE_SHIFT (0)
155#define S5P_CLKDIV_CPU0_PERIPH_SHIFT (12) 155#define EXYNOS4_CLKDIV_CPU0_CORE_MASK (0x7 << EXYNOS4_CLKDIV_CPU0_CORE_SHIFT)
156#define S5P_CLKDIV_CPU0_PERIPH_MASK (0x7 << S5P_CLKDIV_CPU0_PERIPH_SHIFT) 156#define EXYNOS4_CLKDIV_CPU0_COREM0_SHIFT (4)
157#define S5P_CLKDIV_CPU0_ATB_SHIFT (16) 157#define EXYNOS4_CLKDIV_CPU0_COREM0_MASK (0x7 << EXYNOS4_CLKDIV_CPU0_COREM0_SHIFT)
158#define S5P_CLKDIV_CPU0_ATB_MASK (0x7 << S5P_CLKDIV_CPU0_ATB_SHIFT) 158#define EXYNOS4_CLKDIV_CPU0_COREM1_SHIFT (8)
159#define S5P_CLKDIV_CPU0_PCLKDBG_SHIFT (20) 159#define EXYNOS4_CLKDIV_CPU0_COREM1_MASK (0x7 << EXYNOS4_CLKDIV_CPU0_COREM1_SHIFT)
160#define S5P_CLKDIV_CPU0_PCLKDBG_MASK (0x7 << S5P_CLKDIV_CPU0_PCLKDBG_SHIFT) 160#define EXYNOS4_CLKDIV_CPU0_PERIPH_SHIFT (12)
161#define S5P_CLKDIV_CPU0_APLL_SHIFT (24) 161#define EXYNOS4_CLKDIV_CPU0_PERIPH_MASK (0x7 << EXYNOS4_CLKDIV_CPU0_PERIPH_SHIFT)
162#define S5P_CLKDIV_CPU0_APLL_MASK (0x7 << S5P_CLKDIV_CPU0_APLL_SHIFT) 162#define EXYNOS4_CLKDIV_CPU0_ATB_SHIFT (16)
163 163#define EXYNOS4_CLKDIV_CPU0_ATB_MASK (0x7 << EXYNOS4_CLKDIV_CPU0_ATB_SHIFT)
164#define S5P_CLKDIV_DMC0_ACP_SHIFT (0) 164#define EXYNOS4_CLKDIV_CPU0_PCLKDBG_SHIFT (20)
165#define S5P_CLKDIV_DMC0_ACP_MASK (0x7 << S5P_CLKDIV_DMC0_ACP_SHIFT) 165#define EXYNOS4_CLKDIV_CPU0_PCLKDBG_MASK (0x7 << EXYNOS4_CLKDIV_CPU0_PCLKDBG_SHIFT)
166#define S5P_CLKDIV_DMC0_ACPPCLK_SHIFT (4) 166#define EXYNOS4_CLKDIV_CPU0_APLL_SHIFT (24)
167#define S5P_CLKDIV_DMC0_ACPPCLK_MASK (0x7 << S5P_CLKDIV_DMC0_ACPPCLK_SHIFT) 167#define EXYNOS4_CLKDIV_CPU0_APLL_MASK (0x7 << EXYNOS4_CLKDIV_CPU0_APLL_SHIFT)
168#define S5P_CLKDIV_DMC0_DPHY_SHIFT (8) 168#define EXYNOS4_CLKDIV_CPU0_CORE2_SHIFT 28
169#define S5P_CLKDIV_DMC0_DPHY_MASK (0x7 << S5P_CLKDIV_DMC0_DPHY_SHIFT) 169#define EXYNOS4_CLKDIV_CPU0_CORE2_MASK (0x7 << EXYNOS4_CLKDIV_CPU0_CORE2_SHIFT)
170#define S5P_CLKDIV_DMC0_DMC_SHIFT (12) 170
171#define S5P_CLKDIV_DMC0_DMC_MASK (0x7 << S5P_CLKDIV_DMC0_DMC_SHIFT) 171#define EXYNOS4_CLKDIV_CPU1_COPY_SHIFT 0
172#define S5P_CLKDIV_DMC0_DMCD_SHIFT (16) 172#define EXYNOS4_CLKDIV_CPU1_COPY_MASK (0x7 << EXYNOS4_CLKDIV_CPU1_COPY_SHIFT)
173#define S5P_CLKDIV_DMC0_DMCD_MASK (0x7 << S5P_CLKDIV_DMC0_DMCD_SHIFT) 173#define EXYNOS4_CLKDIV_CPU1_HPM_SHIFT 4
174#define S5P_CLKDIV_DMC0_DMCP_SHIFT (20) 174#define EXYNOS4_CLKDIV_CPU1_HPM_MASK (0x7 << EXYNOS4_CLKDIV_CPU1_HPM_SHIFT)
175#define S5P_CLKDIV_DMC0_DMCP_MASK (0x7 << S5P_CLKDIV_DMC0_DMCP_SHIFT) 175#define EXYNOS4_CLKDIV_CPU1_CORES_SHIFT 8
176#define S5P_CLKDIV_DMC0_COPY2_SHIFT (24) 176#define EXYNOS4_CLKDIV_CPU1_CORES_MASK (0x7 << EXYNOS4_CLKDIV_CPU1_CORES_SHIFT)
177#define S5P_CLKDIV_DMC0_COPY2_MASK (0x7 << S5P_CLKDIV_DMC0_COPY2_SHIFT) 177
178#define S5P_CLKDIV_DMC0_CORETI_SHIFT (28) 178#define EXYNOS4_CLKDIV_DMC0_ACP_SHIFT (0)
179#define S5P_CLKDIV_DMC0_CORETI_MASK (0x7 << S5P_CLKDIV_DMC0_CORETI_SHIFT) 179#define EXYNOS4_CLKDIV_DMC0_ACP_MASK (0x7 << EXYNOS4_CLKDIV_DMC0_ACP_SHIFT)
180 180#define EXYNOS4_CLKDIV_DMC0_ACPPCLK_SHIFT (4)
181#define S5P_CLKDIV_TOP_ACLK200_SHIFT (0) 181#define EXYNOS4_CLKDIV_DMC0_ACPPCLK_MASK (0x7 << EXYNOS4_CLKDIV_DMC0_ACPPCLK_SHIFT)
182#define S5P_CLKDIV_TOP_ACLK200_MASK (0x7 << S5P_CLKDIV_TOP_ACLK200_SHIFT) 182#define EXYNOS4_CLKDIV_DMC0_DPHY_SHIFT (8)
183#define S5P_CLKDIV_TOP_ACLK100_SHIFT (4) 183#define EXYNOS4_CLKDIV_DMC0_DPHY_MASK (0x7 << EXYNOS4_CLKDIV_DMC0_DPHY_SHIFT)
184#define S5P_CLKDIV_TOP_ACLK100_MASK (0xf << S5P_CLKDIV_TOP_ACLK100_SHIFT) 184#define EXYNOS4_CLKDIV_DMC0_DMC_SHIFT (12)
185#define S5P_CLKDIV_TOP_ACLK160_SHIFT (8) 185#define EXYNOS4_CLKDIV_DMC0_DMC_MASK (0x7 << EXYNOS4_CLKDIV_DMC0_DMC_SHIFT)
186#define S5P_CLKDIV_TOP_ACLK160_MASK (0x7 << S5P_CLKDIV_TOP_ACLK160_SHIFT) 186#define EXYNOS4_CLKDIV_DMC0_DMCD_SHIFT (16)
187#define S5P_CLKDIV_TOP_ACLK133_SHIFT (12) 187#define EXYNOS4_CLKDIV_DMC0_DMCD_MASK (0x7 << EXYNOS4_CLKDIV_DMC0_DMCD_SHIFT)
188#define S5P_CLKDIV_TOP_ACLK133_MASK (0x7 << S5P_CLKDIV_TOP_ACLK133_SHIFT) 188#define EXYNOS4_CLKDIV_DMC0_DMCP_SHIFT (20)
189#define S5P_CLKDIV_TOP_ONENAND_SHIFT (16) 189#define EXYNOS4_CLKDIV_DMC0_DMCP_MASK (0x7 << EXYNOS4_CLKDIV_DMC0_DMCP_SHIFT)
190#define S5P_CLKDIV_TOP_ONENAND_MASK (0x7 << S5P_CLKDIV_TOP_ONENAND_SHIFT) 190#define EXYNOS4_CLKDIV_DMC0_COPY2_SHIFT (24)
191 191#define EXYNOS4_CLKDIV_DMC0_COPY2_MASK (0x7 << EXYNOS4_CLKDIV_DMC0_COPY2_SHIFT)
192#define S5P_CLKDIV_BUS_GDLR_SHIFT (0) 192#define EXYNOS4_CLKDIV_DMC0_CORETI_SHIFT (28)
193#define S5P_CLKDIV_BUS_GDLR_MASK (0x7 << S5P_CLKDIV_BUS_GDLR_SHIFT) 193#define EXYNOS4_CLKDIV_DMC0_CORETI_MASK (0x7 << EXYNOS4_CLKDIV_DMC0_CORETI_SHIFT)
194#define S5P_CLKDIV_BUS_GPLR_SHIFT (4) 194
195#define S5P_CLKDIV_BUS_GPLR_MASK (0x7 << S5P_CLKDIV_BUS_GPLR_SHIFT) 195#define EXYNOS4_CLKDIV_DMC1_G2D_ACP_SHIFT (0)
196#define EXYNOS4_CLKDIV_DMC1_G2D_ACP_MASK (0xf << EXYNOS4_CLKDIV_DMC1_G2D_ACP_SHIFT)
197#define EXYNOS4_CLKDIV_DMC1_C2C_SHIFT (4)
198#define EXYNOS4_CLKDIV_DMC1_C2C_MASK (0x7 << EXYNOS4_CLKDIV_DMC1_C2C_SHIFT)
199#define EXYNOS4_CLKDIV_DMC1_PWI_SHIFT (8)
200#define EXYNOS4_CLKDIV_DMC1_PWI_MASK (0xf << EXYNOS4_CLKDIV_DMC1_PWI_SHIFT)
201#define EXYNOS4_CLKDIV_DMC1_C2CACLK_SHIFT (12)
202#define EXYNOS4_CLKDIV_DMC1_C2CACLK_MASK (0x7 << EXYNOS4_CLKDIV_DMC1_C2CACLK_SHIFT)
203#define EXYNOS4_CLKDIV_DMC1_DVSEM_SHIFT (16)
204#define EXYNOS4_CLKDIV_DMC1_DVSEM_MASK (0x7f << EXYNOS4_CLKDIV_DMC1_DVSEM_SHIFT)
205#define EXYNOS4_CLKDIV_DMC1_DPM_SHIFT (24)
206#define EXYNOS4_CLKDIV_DMC1_DPM_MASK (0x7f << EXYNOS4_CLKDIV_DMC1_DPM_SHIFT)
207
208#define EXYNOS4_CLKDIV_MFC_SHIFT (0)
209#define EXYNOS4_CLKDIV_MFC_MASK (0x7 << EXYNOS4_CLKDIV_MFC_SHIFT)
210
211#define EXYNOS4_CLKDIV_TOP_ACLK200_SHIFT (0)
212#define EXYNOS4_CLKDIV_TOP_ACLK200_MASK (0x7 << EXYNOS4_CLKDIV_TOP_ACLK200_SHIFT)
213#define EXYNOS4_CLKDIV_TOP_ACLK100_SHIFT (4)
214#define EXYNOS4_CLKDIV_TOP_ACLK100_MASK (0xF << EXYNOS4_CLKDIV_TOP_ACLK100_SHIFT)
215#define EXYNOS4_CLKDIV_TOP_ACLK160_SHIFT (8)
216#define EXYNOS4_CLKDIV_TOP_ACLK160_MASK (0x7 << EXYNOS4_CLKDIV_TOP_ACLK160_SHIFT)
217#define EXYNOS4_CLKDIV_TOP_ACLK133_SHIFT (12)
218#define EXYNOS4_CLKDIV_TOP_ACLK133_MASK (0x7 << EXYNOS4_CLKDIV_TOP_ACLK133_SHIFT)
219#define EXYNOS4_CLKDIV_TOP_ONENAND_SHIFT (16)
220#define EXYNOS4_CLKDIV_TOP_ONENAND_MASK (0x7 << EXYNOS4_CLKDIV_TOP_ONENAND_SHIFT)
221#define EXYNOS4_CLKDIV_TOP_ACLK266_GPS_SHIFT (20)
222#define EXYNOS4_CLKDIV_TOP_ACLK266_GPS_MASK (0x7 << EXYNOS4_CLKDIV_TOP_ACLK266_GPS_SHIFT)
223#define EXYNOS4_CLKDIV_TOP_ACLK400_MCUISP_SHIFT (24)
224#define EXYNOS4_CLKDIV_TOP_ACLK400_MCUISP_MASK (0x7 << EXYNOS4_CLKDIV_TOP_ACLK400_MCUISP_SHIFT)
225
226#define EXYNOS4_CLKDIV_BUS_GDLR_SHIFT (0)
227#define EXYNOS4_CLKDIV_BUS_GDLR_MASK (0x7 << EXYNOS4_CLKDIV_BUS_GDLR_SHIFT)
228#define EXYNOS4_CLKDIV_BUS_GPLR_SHIFT (4)
229#define EXYNOS4_CLKDIV_BUS_GPLR_MASK (0x7 << EXYNOS4_CLKDIV_BUS_GPLR_SHIFT)
230
231#define EXYNOS4_CLKDIV_CAM_FIMC0_SHIFT (0)
232#define EXYNOS4_CLKDIV_CAM_FIMC0_MASK (0xf << EXYNOS4_CLKDIV_CAM_FIMC0_SHIFT)
233#define EXYNOS4_CLKDIV_CAM_FIMC1_SHIFT (4)
234#define EXYNOS4_CLKDIV_CAM_FIMC1_MASK (0xf << EXYNOS4_CLKDIV_CAM_FIMC1_SHIFT)
235#define EXYNOS4_CLKDIV_CAM_FIMC2_SHIFT (8)
236#define EXYNOS4_CLKDIV_CAM_FIMC2_MASK (0xf << EXYNOS4_CLKDIV_CAM_FIMC2_SHIFT)
237#define EXYNOS4_CLKDIV_CAM_FIMC3_SHIFT (12)
238#define EXYNOS4_CLKDIV_CAM_FIMC3_MASK (0xf << EXYNOS4_CLKDIV_CAM_FIMC3_SHIFT)
196 239
197/* Only for EXYNOS4210 */ 240/* Only for EXYNOS4210 */
198 241
199#define S5P_CLKSRC_LCD1 S5P_CLKREG(0x0C238) 242#define EXYNOS4210_CLKSRC_LCD1 EXYNOS_CLKREG(0x0C238)
200#define S5P_CLKSRC_MASK_LCD1 S5P_CLKREG(0x0C338) 243#define EXYNOS4210_CLKSRC_MASK_LCD1 EXYNOS_CLKREG(0x0C338)
201#define S5P_CLKDIV_LCD1 S5P_CLKREG(0x0C538) 244#define EXYNOS4210_CLKDIV_LCD1 EXYNOS_CLKREG(0x0C538)
202#define S5P_CLKGATE_IP_LCD1 S5P_CLKREG(0x0C938) 245#define EXYNOS4210_CLKGATE_IP_LCD1 EXYNOS_CLKREG(0x0C938)
246
247/* Only for EXYNOS4212 */
248
249#define EXYNOS4_CLKDIV_CAM1 EXYNOS_CLKREG(0x0C568)
250
251#define EXYNOS4_CLKDIV_STAT_CAM1 EXYNOS_CLKREG(0x0C668)
252
253#define EXYNOS4_CLKDIV_CAM1_JPEG_SHIFT (0)
254#define EXYNOS4_CLKDIV_CAM1_JPEG_MASK (0xf << EXYNOS4_CLKDIV_CAM1_JPEG_SHIFT)
203 255
204/* Compatibility defines and inclusion */ 256/* Compatibility defines and inclusion */
205 257
206#include <mach/regs-pmu.h> 258#include <mach/regs-pmu.h>
207 259
208#define S5P_EPLL_CON S5P_EPLL_CON0 260#define S5P_EPLL_CON EXYNOS4_EPLL_CON0
209 261
210#endif /* __ASM_ARCH_REGS_CLOCK_H */ 262#endif /* __ASM_ARCH_REGS_CLOCK_H */
diff --git a/arch/arm/mach-exynos/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c
index 0679b8ad2d1e..3ec3ccf9f35c 100644
--- a/arch/arm/mach-exynos/mach-origen.c
+++ b/arch/arm/mach-exynos/mach-origen.c
@@ -412,7 +412,7 @@ static struct max8997_regulator_data __initdata origen_max8997_regulators[] = {
412 { MAX8997_BUCK7, &max8997_buck7_data }, 412 { MAX8997_BUCK7, &max8997_buck7_data },
413}; 413};
414 414
415struct max8997_platform_data __initdata origen_max8997_pdata = { 415static struct max8997_platform_data __initdata origen_max8997_pdata = {
416 .num_regulators = ARRAY_SIZE(origen_max8997_regulators), 416 .num_regulators = ARRAY_SIZE(origen_max8997_regulators),
417 .regulators = origen_max8997_regulators, 417 .regulators = origen_max8997_regulators,
418 418
diff --git a/arch/arm/mach-exynos/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c
index 38939956c34f..5ca91ec12642 100644
--- a/arch/arm/mach-exynos/mach-universal_c210.c
+++ b/arch/arm/mach-exynos/mach-universal_c210.c
@@ -999,7 +999,7 @@ static void __init universal_map_io(void)
999 s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs)); 999 s3c24xx_init_uarts(universal_uartcfgs, ARRAY_SIZE(universal_uartcfgs));
1000} 1000}
1001 1001
1002void s5p_tv_setup(void) 1002static void s5p_tv_setup(void)
1003{ 1003{
1004 /* direct HPD to HDMI chip */ 1004 /* direct HPD to HDMI chip */
1005 gpio_request_one(EXYNOS4_GPX3(7), GPIOF_IN, "hpd-plug"); 1005 gpio_request_one(EXYNOS4_GPX3(7), GPIOF_IN, "hpd-plug");
diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c
index 481682745e7d..428cfeb57724 100644
--- a/arch/arm/mach-exynos/pm.c
+++ b/arch/arm/mach-exynos/pm.c
@@ -38,29 +38,29 @@
38#include <mach/pmu.h> 38#include <mach/pmu.h>
39 39
40static struct sleep_save exynos4_set_clksrc[] = { 40static struct sleep_save exynos4_set_clksrc[] = {
41 { .reg = S5P_CLKSRC_MASK_TOP , .val = 0x00000001, }, 41 { .reg = EXYNOS4_CLKSRC_MASK_TOP , .val = 0x00000001, },
42 { .reg = S5P_CLKSRC_MASK_CAM , .val = 0x11111111, }, 42 { .reg = EXYNOS4_CLKSRC_MASK_CAM , .val = 0x11111111, },
43 { .reg = S5P_CLKSRC_MASK_TV , .val = 0x00000111, }, 43 { .reg = EXYNOS4_CLKSRC_MASK_TV , .val = 0x00000111, },
44 { .reg = S5P_CLKSRC_MASK_LCD0 , .val = 0x00001111, }, 44 { .reg = EXYNOS4_CLKSRC_MASK_LCD0 , .val = 0x00001111, },
45 { .reg = S5P_CLKSRC_MASK_MAUDIO , .val = 0x00000001, }, 45 { .reg = EXYNOS4_CLKSRC_MASK_MAUDIO , .val = 0x00000001, },
46 { .reg = S5P_CLKSRC_MASK_FSYS , .val = 0x01011111, }, 46 { .reg = EXYNOS4_CLKSRC_MASK_FSYS , .val = 0x01011111, },
47 { .reg = S5P_CLKSRC_MASK_PERIL0 , .val = 0x01111111, }, 47 { .reg = EXYNOS4_CLKSRC_MASK_PERIL0 , .val = 0x01111111, },
48 { .reg = S5P_CLKSRC_MASK_PERIL1 , .val = 0x01110111, }, 48 { .reg = EXYNOS4_CLKSRC_MASK_PERIL1 , .val = 0x01110111, },
49 { .reg = S5P_CLKSRC_MASK_DMC , .val = 0x00010000, }, 49 { .reg = EXYNOS4_CLKSRC_MASK_DMC , .val = 0x00010000, },
50}; 50};
51 51
52static struct sleep_save exynos4210_set_clksrc[] = { 52static struct sleep_save exynos4210_set_clksrc[] = {
53 { .reg = S5P_CLKSRC_MASK_LCD1 , .val = 0x00001111, }, 53 { .reg = EXYNOS4210_CLKSRC_MASK_LCD1 , .val = 0x00001111, },
54}; 54};
55 55
56static struct sleep_save exynos4_epll_save[] = { 56static struct sleep_save exynos4_epll_save[] = {
57 SAVE_ITEM(S5P_EPLL_CON0), 57 SAVE_ITEM(EXYNOS4_EPLL_CON0),
58 SAVE_ITEM(S5P_EPLL_CON1), 58 SAVE_ITEM(EXYNOS4_EPLL_CON1),
59}; 59};
60 60
61static struct sleep_save exynos4_vpll_save[] = { 61static struct sleep_save exynos4_vpll_save[] = {
62 SAVE_ITEM(S5P_VPLL_CON0), 62 SAVE_ITEM(EXYNOS4_VPLL_CON0),
63 SAVE_ITEM(S5P_VPLL_CON1), 63 SAVE_ITEM(EXYNOS4_VPLL_CON1),
64}; 64};
65 65
66static struct sleep_save exynos4_core_save[] = { 66static struct sleep_save exynos4_core_save[] = {
@@ -231,7 +231,7 @@ static void exynos4_restore_pll(void)
231 locktime = (3000 / pll_in_rate) * p_div; 231 locktime = (3000 / pll_in_rate) * p_div;
232 lockcnt = locktime * 10000 / (10000 / pll_in_rate); 232 lockcnt = locktime * 10000 / (10000 / pll_in_rate);
233 233
234 __raw_writel(lockcnt, S5P_EPLL_LOCK); 234 __raw_writel(lockcnt, EXYNOS4_EPLL_LOCK);
235 235
236 s3c_pm_do_restore_core(exynos4_epll_save, 236 s3c_pm_do_restore_core(exynos4_epll_save,
237 ARRAY_SIZE(exynos4_epll_save)); 237 ARRAY_SIZE(exynos4_epll_save));
@@ -249,7 +249,7 @@ static void exynos4_restore_pll(void)
249 locktime = 750; 249 locktime = 750;
250 lockcnt = locktime * 10000 / (10000 / pll_in_rate); 250 lockcnt = locktime * 10000 / (10000 / pll_in_rate);
251 251
252 __raw_writel(lockcnt, S5P_VPLL_LOCK); 252 __raw_writel(lockcnt, EXYNOS4_VPLL_LOCK);
253 253
254 s3c_pm_do_restore_core(exynos4_vpll_save, 254 s3c_pm_do_restore_core(exynos4_vpll_save,
255 ARRAY_SIZE(exynos4_vpll_save)); 255 ARRAY_SIZE(exynos4_vpll_save));
@@ -260,14 +260,14 @@ static void exynos4_restore_pll(void)
260 260
261 do { 261 do {
262 if (epll_wait) { 262 if (epll_wait) {
263 pll_con = __raw_readl(S5P_EPLL_CON0); 263 pll_con = __raw_readl(EXYNOS4_EPLL_CON0);
264 if (pll_con & (1 << S5P_EPLLCON0_LOCKED_SHIFT)) 264 if (pll_con & (1 << EXYNOS4_EPLLCON0_LOCKED_SHIFT))
265 epll_wait = 0; 265 epll_wait = 0;
266 } 266 }
267 267
268 if (vpll_wait) { 268 if (vpll_wait) {
269 pll_con = __raw_readl(S5P_VPLL_CON0); 269 pll_con = __raw_readl(EXYNOS4_VPLL_CON0);
270 if (pll_con & (1 << S5P_VPLLCON0_LOCKED_SHIFT)) 270 if (pll_con & (1 << EXYNOS4_VPLLCON0_LOCKED_SHIFT))
271 vpll_wait = 0; 271 vpll_wait = 0;
272 } 272 }
273 } while (epll_wait || vpll_wait); 273 } while (epll_wait || vpll_wait);
diff --git a/arch/arm/mach-s3c2410/mach-h1940.c b/arch/arm/mach-s3c2410/mach-h1940.c
index 41245a603981..6b21ba107eab 100644
--- a/arch/arm/mach-s3c2410/mach-h1940.c
+++ b/arch/arm/mach-s3c2410/mach-h1940.c
@@ -162,7 +162,7 @@ static int h1940_gpiolib_latch_get(struct gpio_chip *chip,
162 return (latch_state >> (offset + 16)) & 1; 162 return (latch_state >> (offset + 16)) & 1;
163} 163}
164 164
165struct gpio_chip h1940_latch_gpiochip = { 165static struct gpio_chip h1940_latch_gpiochip = {
166 .base = H1940_LATCH_GPIO(0), 166 .base = H1940_LATCH_GPIO(0),
167 .owner = THIS_MODULE, 167 .owner = THIS_MODULE,
168 .label = "H1940_LATCH", 168 .label = "H1940_LATCH",
@@ -304,7 +304,7 @@ static const struct s3c_adc_bat_thresh bat_lut_acin[] = {
304 { .volt = 3841, .cur = 0, .level = 0}, 304 { .volt = 3841, .cur = 0, .level = 0},
305}; 305};
306 306
307int h1940_bat_init(void) 307static int h1940_bat_init(void)
308{ 308{
309 int ret; 309 int ret;
310 310
@@ -317,17 +317,17 @@ int h1940_bat_init(void)
317 317
318} 318}
319 319
320void h1940_bat_exit(void) 320static void h1940_bat_exit(void)
321{ 321{
322 gpio_free(H1940_LATCH_SM803_ENABLE); 322 gpio_free(H1940_LATCH_SM803_ENABLE);
323} 323}
324 324
325void h1940_enable_charger(void) 325static void h1940_enable_charger(void)
326{ 326{
327 gpio_set_value(H1940_LATCH_SM803_ENABLE, 1); 327 gpio_set_value(H1940_LATCH_SM803_ENABLE, 1);
328} 328}
329 329
330void h1940_disable_charger(void) 330static void h1940_disable_charger(void)
331{ 331{
332 gpio_set_value(H1940_LATCH_SM803_ENABLE, 0); 332 gpio_set_value(H1940_LATCH_SM803_ENABLE, 0);
333} 333}
@@ -364,7 +364,7 @@ static struct platform_device h1940_battery = {
364 }, 364 },
365}; 365};
366 366
367DEFINE_SPINLOCK(h1940_blink_spin); 367static DEFINE_SPINLOCK(h1940_blink_spin);
368 368
369int h1940_led_blink_set(unsigned gpio, int state, 369int h1940_led_blink_set(unsigned gpio, int state,
370 unsigned long *delay_on, unsigned long *delay_off) 370 unsigned long *delay_on, unsigned long *delay_off)
diff --git a/arch/arm/mach-s3c2416/clock.c b/arch/arm/mach-s3c2416/clock.c
index 59f54d1d7f8b..e01490db0993 100644
--- a/arch/arm/mach-s3c2416/clock.c
+++ b/arch/arm/mach-s3c2416/clock.c
@@ -132,12 +132,6 @@ static struct clk hsmmc0_clk = {
132 .ctrlbit = S3C2416_HCLKCON_HSMMC0, 132 .ctrlbit = S3C2416_HCLKCON_HSMMC0,
133}; 133};
134 134
135void __init_or_cpufreq s3c2416_setup_clocks(void)
136{
137 s3c2443_common_setup_clocks(s3c2416_get_pll);
138}
139
140
141static struct clksrc_clk *clksrcs[] __initdata = { 135static struct clksrc_clk *clksrcs[] __initdata = {
142 &hsspi_eplldiv, 136 &hsspi_eplldiv,
143 &hsspi_mux, 137 &hsspi_mux,
diff --git a/arch/arm/mach-s3c2416/mach-smdk2416.c b/arch/arm/mach-s3c2416/mach-smdk2416.c
index eebe1e72b93e..30a44f806e01 100644
--- a/arch/arm/mach-s3c2416/mach-smdk2416.c
+++ b/arch/arm/mach-s3c2416/mach-smdk2416.c
@@ -125,7 +125,7 @@ static struct s3c2410_uartcfg smdk2416_uartcfgs[] __initdata = {
125 } 125 }
126}; 126};
127 127
128void smdk2416_hsudc_gpio_init(void) 128static void smdk2416_hsudc_gpio_init(void)
129{ 129{
130 s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_UP); 130 s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_UP);
131 s3c_gpio_setpull(S3C2410_GPF(2), S3C_GPIO_PULL_NONE); 131 s3c_gpio_setpull(S3C2410_GPF(2), S3C_GPIO_PULL_NONE);
@@ -133,20 +133,20 @@ void smdk2416_hsudc_gpio_init(void)
133 s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 0); 133 s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 0);
134} 134}
135 135
136void smdk2416_hsudc_gpio_uninit(void) 136static void smdk2416_hsudc_gpio_uninit(void)
137{ 137{
138 s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 1); 138 s3c2410_modify_misccr(S3C2416_MISCCR_SEL_SUSPND, 1);
139 s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_NONE); 139 s3c_gpio_setpull(S3C2410_GPH(14), S3C_GPIO_PULL_NONE);
140 s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(0)); 140 s3c_gpio_cfgpin(S3C2410_GPH(14), S3C_GPIO_SFN(0));
141} 141}
142 142
143struct s3c24xx_hsudc_platdata smdk2416_hsudc_platdata = { 143static struct s3c24xx_hsudc_platdata smdk2416_hsudc_platdata = {
144 .epnum = 9, 144 .epnum = 9,
145 .gpio_init = smdk2416_hsudc_gpio_init, 145 .gpio_init = smdk2416_hsudc_gpio_init,
146 .gpio_uninit = smdk2416_hsudc_gpio_uninit, 146 .gpio_uninit = smdk2416_hsudc_gpio_uninit,
147}; 147};
148 148
149struct s3c_fb_pd_win smdk2416_fb_win[] = { 149static struct s3c_fb_pd_win smdk2416_fb_win[] = {
150 [0] = { 150 [0] = {
151 /* think this is the same as the smdk6410 */ 151 /* think this is the same as the smdk6410 */
152 .win_mode = { 152 .win_mode = {
diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c
index 9a4a5bc008e6..cfd20202e944 100644
--- a/arch/arm/mach-s3c2440/mach-gta02.c
+++ b/arch/arm/mach-s3c2440/mach-gta02.c
@@ -258,7 +258,7 @@ static struct pcf50633_bl_platform_data gta02_backlight_data = {
258 .ramp_time = 5, 258 .ramp_time = 5,
259}; 259};
260 260
261struct pcf50633_platform_data gta02_pcf_pdata = { 261static struct pcf50633_platform_data gta02_pcf_pdata = {
262 .resumers = { 262 .resumers = {
263 [0] = PCF50633_INT1_USBINS | 263 [0] = PCF50633_INT1_USBINS |
264 PCF50633_INT1_USBREM | 264 PCF50633_INT1_USBREM |
@@ -404,7 +404,7 @@ static struct platform_device gta02_nor_flash = {
404}; 404};
405 405
406 406
407struct platform_device s3c24xx_pwm_device = { 407static struct platform_device s3c24xx_pwm_device = {
408 .name = "s3c24xx_pwm", 408 .name = "s3c24xx_pwm",
409 .num_resources = 0, 409 .num_resources = 0,
410}; 410};
diff --git a/arch/arm/mach-s3c2440/mach-rx1950.c b/arch/arm/mach-s3c2440/mach-rx1950.c
index 6f68abf44fab..200debb4c72d 100644
--- a/arch/arm/mach-s3c2440/mach-rx1950.c
+++ b/arch/arm/mach-s3c2440/mach-rx1950.c
@@ -217,7 +217,7 @@ static const struct s3c_adc_bat_thresh bat_lut_acin[] = {
217 { .volt = 3820, .cur = 0, .level = 0}, 217 { .volt = 3820, .cur = 0, .level = 0},
218}; 218};
219 219
220int rx1950_bat_init(void) 220static int rx1950_bat_init(void)
221{ 221{
222 int ret; 222 int ret;
223 223
@@ -236,25 +236,25 @@ err_gpio1:
236 return ret; 236 return ret;
237} 237}
238 238
239void rx1950_bat_exit(void) 239static void rx1950_bat_exit(void)
240{ 240{
241 gpio_free(S3C2410_GPJ(2)); 241 gpio_free(S3C2410_GPJ(2));
242 gpio_free(S3C2410_GPJ(3)); 242 gpio_free(S3C2410_GPJ(3));
243} 243}
244 244
245void rx1950_enable_charger(void) 245static void rx1950_enable_charger(void)
246{ 246{
247 gpio_direction_output(S3C2410_GPJ(2), 1); 247 gpio_direction_output(S3C2410_GPJ(2), 1);
248 gpio_direction_output(S3C2410_GPJ(3), 1); 248 gpio_direction_output(S3C2410_GPJ(3), 1);
249} 249}
250 250
251void rx1950_disable_charger(void) 251static void rx1950_disable_charger(void)
252{ 252{
253 gpio_direction_output(S3C2410_GPJ(2), 0); 253 gpio_direction_output(S3C2410_GPJ(2), 0);
254 gpio_direction_output(S3C2410_GPJ(3), 0); 254 gpio_direction_output(S3C2410_GPJ(3), 0);
255} 255}
256 256
257DEFINE_SPINLOCK(rx1950_blink_spin); 257static DEFINE_SPINLOCK(rx1950_blink_spin);
258 258
259static int rx1950_led_blink_set(unsigned gpio, int state, 259static int rx1950_led_blink_set(unsigned gpio, int state,
260 unsigned long *delay_on, unsigned long *delay_off) 260 unsigned long *delay_on, unsigned long *delay_off)
@@ -382,7 +382,7 @@ static struct s3c2410fb_mach_info rx1950_lcd_cfg = {
382 382
383static struct pwm_device *lcd_pwm; 383static struct pwm_device *lcd_pwm;
384 384
385void rx1950_lcd_power(int enable) 385static void rx1950_lcd_power(int enable)
386{ 386{
387 int i; 387 int i;
388 static int enabled; 388 static int enabled;
diff --git a/arch/arm/mach-s3c64xx/common.h b/arch/arm/mach-s3c64xx/common.h
index 5eb9c9a7d73b..7a10be629aba 100644
--- a/arch/arm/mach-s3c64xx/common.h
+++ b/arch/arm/mach-s3c64xx/common.h
@@ -25,8 +25,6 @@ void s3c64xx_setup_clocks(void);
25 25
26void s3c64xx_restart(char mode, const char *cmd); 26void s3c64xx_restart(char mode, const char *cmd);
27 27
28extern struct syscore_ops s3c64xx_irq_syscore_ops;
29
30#ifdef CONFIG_CPU_S3C6400 28#ifdef CONFIG_CPU_S3C6400
31 29
32extern int s3c6400_init(void); 30extern int s3c6400_init(void);
diff --git a/arch/arm/mach-s3c64xx/irq-pm.c b/arch/arm/mach-s3c64xx/irq-pm.c
index 8bec61e242c7..0c7e1d960ca4 100644
--- a/arch/arm/mach-s3c64xx/irq-pm.c
+++ b/arch/arm/mach-s3c64xx/irq-pm.c
@@ -96,7 +96,7 @@ static void s3c64xx_irq_pm_resume(void)
96 S3C_PMDBG("%s: IRQ configuration restored\n", __func__); 96 S3C_PMDBG("%s: IRQ configuration restored\n", __func__);
97} 97}
98 98
99struct syscore_ops s3c64xx_irq_syscore_ops = { 99static struct syscore_ops s3c64xx_irq_syscore_ops = {
100 .suspend = s3c64xx_irq_pm_suspend, 100 .suspend = s3c64xx_irq_pm_suspend,
101 .resume = s3c64xx_irq_pm_resume, 101 .resume = s3c64xx_irq_pm_resume,
102}; 102};
diff --git a/arch/arm/mach-s5p64x0/clock.c b/arch/arm/mach-s5p64x0/clock.c
index 241d0e645c85..57e718957ef3 100644
--- a/arch/arm/mach-s5p64x0/clock.c
+++ b/arch/arm/mach-s5p64x0/clock.c
@@ -73,7 +73,7 @@ static const u32 clock_table[][3] = {
73 {L2 * 1000, (3 << ARM_DIV_RATIO_SHIFT), (0 << S5P64X0_CLKDIV0_HCLK_SHIFT)}, 73 {L2 * 1000, (3 << ARM_DIV_RATIO_SHIFT), (0 << S5P64X0_CLKDIV0_HCLK_SHIFT)},
74}; 74};
75 75
76unsigned long s5p64x0_armclk_get_rate(struct clk *clk) 76static unsigned long s5p64x0_armclk_get_rate(struct clk *clk)
77{ 77{
78 unsigned long rate = clk_get_rate(clk->parent); 78 unsigned long rate = clk_get_rate(clk->parent);
79 u32 clkdiv; 79 u32 clkdiv;
@@ -84,7 +84,8 @@ unsigned long s5p64x0_armclk_get_rate(struct clk *clk)
84 return rate / (clkdiv + 1); 84 return rate / (clkdiv + 1);
85} 85}
86 86
87unsigned long s5p64x0_armclk_round_rate(struct clk *clk, unsigned long rate) 87static unsigned long s5p64x0_armclk_round_rate(struct clk *clk,
88 unsigned long rate)
88{ 89{
89 u32 iter; 90 u32 iter;
90 91
@@ -96,7 +97,7 @@ unsigned long s5p64x0_armclk_round_rate(struct clk *clk, unsigned long rate)
96 return clock_table[ARRAY_SIZE(clock_table) - 1][0]; 97 return clock_table[ARRAY_SIZE(clock_table) - 1][0];
97} 98}
98 99
99int s5p64x0_armclk_set_rate(struct clk *clk, unsigned long rate) 100static int s5p64x0_armclk_set_rate(struct clk *clk, unsigned long rate)
100{ 101{
101 u32 round_tmp; 102 u32 round_tmp;
102 u32 iter; 103 u32 iter;
@@ -148,7 +149,7 @@ int s5p64x0_armclk_set_rate(struct clk *clk, unsigned long rate)
148 return 0; 149 return 0;
149} 150}
150 151
151struct clk_ops s5p64x0_clkarm_ops = { 152static struct clk_ops s5p64x0_clkarm_ops = {
152 .get_rate = s5p64x0_armclk_get_rate, 153 .get_rate = s5p64x0_armclk_get_rate,
153 .set_rate = s5p64x0_armclk_set_rate, 154 .set_rate = s5p64x0_armclk_set_rate,
154 .round_rate = s5p64x0_armclk_round_rate, 155 .round_rate = s5p64x0_armclk_round_rate,
@@ -173,7 +174,7 @@ struct clksrc_clk clk_dout_mpll = {
173 .reg_div = { .reg = S5P64X0_CLK_DIV0, .shift = 4, .size = 1 }, 174 .reg_div = { .reg = S5P64X0_CLK_DIV0, .shift = 4, .size = 1 },
174}; 175};
175 176
176struct clk *clkset_hclk_low_list[] = { 177static struct clk *clkset_hclk_low_list[] = {
177 &clk_mout_apll.clk, 178 &clk_mout_apll.clk,
178 &clk_mout_mpll.clk, 179 &clk_mout_mpll.clk,
179}; 180};
diff --git a/arch/arm/mach-s5p64x0/dma.c b/arch/arm/mach-s5p64x0/dma.c
index f7f68ad77910..2ee5dc069b37 100644
--- a/arch/arm/mach-s5p64x0/dma.c
+++ b/arch/arm/mach-s5p64x0/dma.c
@@ -38,7 +38,7 @@
38 38
39static u64 dma_dmamask = DMA_BIT_MASK(32); 39static u64 dma_dmamask = DMA_BIT_MASK(32);
40 40
41u8 s5p6440_pdma_peri[] = { 41static u8 s5p6440_pdma_peri[] = {
42 DMACH_UART0_RX, 42 DMACH_UART0_RX,
43 DMACH_UART0_TX, 43 DMACH_UART0_TX,
44 DMACH_UART1_RX, 44 DMACH_UART1_RX,
@@ -63,12 +63,12 @@ u8 s5p6440_pdma_peri[] = {
63 DMACH_SPI1_RX, 63 DMACH_SPI1_RX,
64}; 64};
65 65
66struct dma_pl330_platdata s5p6440_pdma_pdata = { 66static struct dma_pl330_platdata s5p6440_pdma_pdata = {
67 .nr_valid_peri = ARRAY_SIZE(s5p6440_pdma_peri), 67 .nr_valid_peri = ARRAY_SIZE(s5p6440_pdma_peri),
68 .peri_id = s5p6440_pdma_peri, 68 .peri_id = s5p6440_pdma_peri,
69}; 69};
70 70
71u8 s5p6450_pdma_peri[] = { 71static u8 s5p6450_pdma_peri[] = {
72 DMACH_UART0_RX, 72 DMACH_UART0_RX,
73 DMACH_UART0_TX, 73 DMACH_UART0_TX,
74 DMACH_UART1_RX, 74 DMACH_UART1_RX,
@@ -103,13 +103,13 @@ u8 s5p6450_pdma_peri[] = {
103 DMACH_UART5_TX, 103 DMACH_UART5_TX,
104}; 104};
105 105
106struct dma_pl330_platdata s5p6450_pdma_pdata = { 106static struct dma_pl330_platdata s5p6450_pdma_pdata = {
107 .nr_valid_peri = ARRAY_SIZE(s5p6450_pdma_peri), 107 .nr_valid_peri = ARRAY_SIZE(s5p6450_pdma_peri),
108 .peri_id = s5p6450_pdma_peri, 108 .peri_id = s5p6450_pdma_peri,
109}; 109};
110 110
111AMBA_AHB_DEVICE(s5p64x0_pdma, "dma-pl330", 0x00041330, S5P64X0_PA_PDMA, 111static AMBA_AHB_DEVICE(s5p64x0_pdma, "dma-pl330", 0x00041330,
112 {IRQ_DMA0}, NULL); 112 S5P64X0_PA_PDMA, {IRQ_DMA0}, NULL);
113 113
114static int __init s5p64x0_dma_init(void) 114static int __init s5p64x0_dma_init(void)
115{ 115{
diff --git a/arch/arm/mach-s5p64x0/include/mach/s5p64x0-clock.h b/arch/arm/mach-s5p64x0/include/mach/s5p64x0-clock.h
index ff85b4b6e8d9..0ef47d1b7670 100644
--- a/arch/arm/mach-s5p64x0/include/mach/s5p64x0-clock.h
+++ b/arch/arm/mach-s5p64x0/include/mach/s5p64x0-clock.h
@@ -22,16 +22,9 @@ extern struct clksrc_clk clk_mout_epll;
22extern int s5p64x0_epll_enable(struct clk *clk, int enable); 22extern int s5p64x0_epll_enable(struct clk *clk, int enable);
23extern unsigned long s5p64x0_epll_get_rate(struct clk *clk); 23extern unsigned long s5p64x0_epll_get_rate(struct clk *clk);
24 24
25extern unsigned long s5p64x0_armclk_get_rate(struct clk *clk);
26extern unsigned long s5p64x0_armclk_round_rate(struct clk *clk, unsigned long rate);
27extern int s5p64x0_armclk_set_rate(struct clk *clk, unsigned long rate);
28
29extern struct clk_ops s5p64x0_clkarm_ops;
30
31extern struct clksrc_clk clk_armclk; 25extern struct clksrc_clk clk_armclk;
32extern struct clksrc_clk clk_dout_mpll; 26extern struct clksrc_clk clk_dout_mpll;
33 27
34extern struct clk *clkset_hclk_low_list[];
35extern struct clksrc_sources clkset_hclk_low; 28extern struct clksrc_sources clkset_hclk_low;
36 29
37extern int s5p64x0_pclk_ctrl(struct clk *clk, int enable); 30extern int s5p64x0_pclk_ctrl(struct clk *clk, int enable);
diff --git a/arch/arm/mach-s5pc100/clock.c b/arch/arm/mach-s5pc100/clock.c
index 247194dd366c..16eca4ea2010 100644
--- a/arch/arm/mach-s5pc100/clock.c
+++ b/arch/arm/mach-s5pc100/clock.c
@@ -170,7 +170,7 @@ static struct clk *clk_src_mout_am_list[] = {
170 [1] = &clk_div_apll2.clk, 170 [1] = &clk_div_apll2.clk,
171}; 171};
172 172
173struct clksrc_sources clk_src_mout_am = { 173static struct clksrc_sources clk_src_mout_am = {
174 .sources = clk_src_mout_am_list, 174 .sources = clk_src_mout_am_list,
175 .nr_sources = ARRAY_SIZE(clk_src_mout_am_list), 175 .nr_sources = ARRAY_SIZE(clk_src_mout_am_list),
176}; 176};
@@ -212,7 +212,7 @@ static struct clk *clk_src_mout_onenand_list[] = {
212 [1] = &clk_div_d1_bus.clk, 212 [1] = &clk_div_d1_bus.clk,
213}; 213};
214 214
215struct clksrc_sources clk_src_mout_onenand = { 215static struct clksrc_sources clk_src_mout_onenand = {
216 .sources = clk_src_mout_onenand_list, 216 .sources = clk_src_mout_onenand_list,
217 .nr_sources = ARRAY_SIZE(clk_src_mout_onenand_list), 217 .nr_sources = ARRAY_SIZE(clk_src_mout_onenand_list),
218}; 218};
@@ -756,7 +756,7 @@ static struct clk *clk_src_group1_list[] = {
756 [3] = &clk_mout_hpll.clk, 756 [3] = &clk_mout_hpll.clk,
757}; 757};
758 758
759struct clksrc_sources clk_src_group1 = { 759static struct clksrc_sources clk_src_group1 = {
760 .sources = clk_src_group1_list, 760 .sources = clk_src_group1_list,
761 .nr_sources = ARRAY_SIZE(clk_src_group1_list), 761 .nr_sources = ARRAY_SIZE(clk_src_group1_list),
762}; 762};
@@ -766,7 +766,7 @@ static struct clk *clk_src_group2_list[] = {
766 [1] = &clk_div_mpll.clk, 766 [1] = &clk_div_mpll.clk,
767}; 767};
768 768
769struct clksrc_sources clk_src_group2 = { 769static struct clksrc_sources clk_src_group2 = {
770 .sources = clk_src_group2_list, 770 .sources = clk_src_group2_list,
771 .nr_sources = ARRAY_SIZE(clk_src_group2_list), 771 .nr_sources = ARRAY_SIZE(clk_src_group2_list),
772}; 772};
@@ -780,7 +780,7 @@ static struct clk *clk_src_group3_list[] = {
780 [5] = &clk_mout_hpll.clk, 780 [5] = &clk_mout_hpll.clk,
781}; 781};
782 782
783struct clksrc_sources clk_src_group3 = { 783static struct clksrc_sources clk_src_group3 = {
784 .sources = clk_src_group3_list, 784 .sources = clk_src_group3_list,
785 .nr_sources = ARRAY_SIZE(clk_src_group3_list), 785 .nr_sources = ARRAY_SIZE(clk_src_group3_list),
786}; 786};
@@ -806,7 +806,7 @@ static struct clk *clk_src_group4_list[] = {
806 [5] = &clk_mout_hpll.clk, 806 [5] = &clk_mout_hpll.clk,
807}; 807};
808 808
809struct clksrc_sources clk_src_group4 = { 809static struct clksrc_sources clk_src_group4 = {
810 .sources = clk_src_group4_list, 810 .sources = clk_src_group4_list,
811 .nr_sources = ARRAY_SIZE(clk_src_group4_list), 811 .nr_sources = ARRAY_SIZE(clk_src_group4_list),
812}; 812};
@@ -831,7 +831,7 @@ static struct clk *clk_src_group5_list[] = {
831 [4] = &clk_mout_hpll.clk, 831 [4] = &clk_mout_hpll.clk,
832}; 832};
833 833
834struct clksrc_sources clk_src_group5 = { 834static struct clksrc_sources clk_src_group5 = {
835 .sources = clk_src_group5_list, 835 .sources = clk_src_group5_list,
836 .nr_sources = ARRAY_SIZE(clk_src_group5_list), 836 .nr_sources = ARRAY_SIZE(clk_src_group5_list),
837}; 837};
@@ -854,7 +854,7 @@ static struct clk *clk_src_group6_list[] = {
854 [2] = &clk_div_hdmi.clk, 854 [2] = &clk_div_hdmi.clk,
855}; 855};
856 856
857struct clksrc_sources clk_src_group6 = { 857static struct clksrc_sources clk_src_group6 = {
858 .sources = clk_src_group6_list, 858 .sources = clk_src_group6_list,
859 .nr_sources = ARRAY_SIZE(clk_src_group6_list), 859 .nr_sources = ARRAY_SIZE(clk_src_group6_list),
860}; 860};
@@ -866,7 +866,7 @@ static struct clk *clk_src_group7_list[] = {
866 [3] = &clk_vclk54m, 866 [3] = &clk_vclk54m,
867}; 867};
868 868
869struct clksrc_sources clk_src_group7 = { 869static struct clksrc_sources clk_src_group7 = {
870 .sources = clk_src_group7_list, 870 .sources = clk_src_group7_list,
871 .nr_sources = ARRAY_SIZE(clk_src_group7_list), 871 .nr_sources = ARRAY_SIZE(clk_src_group7_list),
872}; 872};
@@ -877,7 +877,7 @@ static struct clk *clk_src_mmc0_list[] = {
877 [2] = &clk_fin_epll, 877 [2] = &clk_fin_epll,
878}; 878};
879 879
880struct clksrc_sources clk_src_mmc0 = { 880static struct clksrc_sources clk_src_mmc0 = {
881 .sources = clk_src_mmc0_list, 881 .sources = clk_src_mmc0_list,
882 .nr_sources = ARRAY_SIZE(clk_src_mmc0_list), 882 .nr_sources = ARRAY_SIZE(clk_src_mmc0_list),
883}; 883};
@@ -889,7 +889,7 @@ static struct clk *clk_src_mmc12_list[] = {
889 [3] = &clk_mout_hpll.clk, 889 [3] = &clk_mout_hpll.clk,
890}; 890};
891 891
892struct clksrc_sources clk_src_mmc12 = { 892static struct clksrc_sources clk_src_mmc12 = {
893 .sources = clk_src_mmc12_list, 893 .sources = clk_src_mmc12_list,
894 .nr_sources = ARRAY_SIZE(clk_src_mmc12_list), 894 .nr_sources = ARRAY_SIZE(clk_src_mmc12_list),
895}; 895};
@@ -901,7 +901,7 @@ static struct clk *clk_src_irda_usb_list[] = {
901 [3] = &clk_mout_hpll.clk, 901 [3] = &clk_mout_hpll.clk,
902}; 902};
903 903
904struct clksrc_sources clk_src_irda_usb = { 904static struct clksrc_sources clk_src_irda_usb = {
905 .sources = clk_src_irda_usb_list, 905 .sources = clk_src_irda_usb_list,
906 .nr_sources = ARRAY_SIZE(clk_src_irda_usb_list), 906 .nr_sources = ARRAY_SIZE(clk_src_irda_usb_list),
907}; 907};
@@ -912,7 +912,7 @@ static struct clk *clk_src_pwi_list[] = {
912 [2] = &clk_div_mpll.clk, 912 [2] = &clk_div_mpll.clk,
913}; 913};
914 914
915struct clksrc_sources clk_src_pwi = { 915static struct clksrc_sources clk_src_pwi = {
916 .sources = clk_src_pwi_list, 916 .sources = clk_src_pwi_list,
917 .nr_sources = ARRAY_SIZE(clk_src_pwi_list), 917 .nr_sources = ARRAY_SIZE(clk_src_pwi_list),
918}; 918};
@@ -923,7 +923,7 @@ static struct clk *clk_sclk_spdif_list[] = {
923 [2] = &clk_sclk_audio2.clk, 923 [2] = &clk_sclk_audio2.clk,
924}; 924};
925 925
926struct clksrc_sources clk_src_sclk_spdif = { 926static struct clksrc_sources clk_src_sclk_spdif = {
927 .sources = clk_sclk_spdif_list, 927 .sources = clk_sclk_spdif_list,
928 .nr_sources = ARRAY_SIZE(clk_sclk_spdif_list), 928 .nr_sources = ARRAY_SIZE(clk_sclk_spdif_list),
929}; 929};
diff --git a/arch/arm/mach-s5pc100/dma.c b/arch/arm/mach-s5pc100/dma.c
index 96b1ab3dcd48..afd8db2d5991 100644
--- a/arch/arm/mach-s5pc100/dma.c
+++ b/arch/arm/mach-s5pc100/dma.c
@@ -35,7 +35,7 @@
35 35
36static u64 dma_dmamask = DMA_BIT_MASK(32); 36static u64 dma_dmamask = DMA_BIT_MASK(32);
37 37
38u8 pdma0_peri[] = { 38static u8 pdma0_peri[] = {
39 DMACH_UART0_RX, 39 DMACH_UART0_RX,
40 DMACH_UART0_TX, 40 DMACH_UART0_TX,
41 DMACH_UART1_RX, 41 DMACH_UART1_RX,
@@ -68,15 +68,15 @@ u8 pdma0_peri[] = {
68 DMACH_HSI_TX, 68 DMACH_HSI_TX,
69}; 69};
70 70
71struct dma_pl330_platdata s5pc100_pdma0_pdata = { 71static struct dma_pl330_platdata s5pc100_pdma0_pdata = {
72 .nr_valid_peri = ARRAY_SIZE(pdma0_peri), 72 .nr_valid_peri = ARRAY_SIZE(pdma0_peri),
73 .peri_id = pdma0_peri, 73 .peri_id = pdma0_peri,
74}; 74};
75 75
76AMBA_AHB_DEVICE(s5pc100_pdma0, "dma-pl330.0", 0x00041330, S5PC100_PA_PDMA0, 76static AMBA_AHB_DEVICE(s5pc100_pdma0, "dma-pl330.0", 0x00041330,
77 {IRQ_PDMA0}, &s5pc100_pdma0_pdata); 77 S5PC100_PA_PDMA0, {IRQ_PDMA0}, &s5pc100_pdma0_pdata);
78 78
79u8 pdma1_peri[] = { 79static u8 pdma1_peri[] = {
80 DMACH_UART0_RX, 80 DMACH_UART0_RX,
81 DMACH_UART0_TX, 81 DMACH_UART0_TX,
82 DMACH_UART1_RX, 82 DMACH_UART1_RX,
@@ -109,13 +109,13 @@ u8 pdma1_peri[] = {
109 DMACH_MSM_REQ3, 109 DMACH_MSM_REQ3,
110}; 110};
111 111
112struct dma_pl330_platdata s5pc100_pdma1_pdata = { 112static struct dma_pl330_platdata s5pc100_pdma1_pdata = {
113 .nr_valid_peri = ARRAY_SIZE(pdma1_peri), 113 .nr_valid_peri = ARRAY_SIZE(pdma1_peri),
114 .peri_id = pdma1_peri, 114 .peri_id = pdma1_peri,
115}; 115};
116 116
117AMBA_AHB_DEVICE(s5pc100_pdma1, "dma-pl330.1", 0x00041330, S5PC100_PA_PDMA1, 117static AMBA_AHB_DEVICE(s5pc100_pdma1, "dma-pl330.1", 0x00041330,
118 {IRQ_PDMA1}, &s5pc100_pdma1_pdata); 118 S5PC100_PA_PDMA1, {IRQ_PDMA1}, &s5pc100_pdma1_pdata);
119 119
120static int __init s5pc100_dma_init(void) 120static int __init s5pc100_dma_init(void)
121{ 121{
diff --git a/arch/arm/mach-s5pv210/dma.c b/arch/arm/mach-s5pv210/dma.c
index f6885d247d14..86ce62f66190 100644
--- a/arch/arm/mach-s5pv210/dma.c
+++ b/arch/arm/mach-s5pv210/dma.c
@@ -35,7 +35,7 @@
35 35
36static u64 dma_dmamask = DMA_BIT_MASK(32); 36static u64 dma_dmamask = DMA_BIT_MASK(32);
37 37
38u8 pdma0_peri[] = { 38static u8 pdma0_peri[] = {
39 DMACH_UART0_RX, 39 DMACH_UART0_RX,
40 DMACH_UART0_TX, 40 DMACH_UART0_TX,
41 DMACH_UART1_RX, 41 DMACH_UART1_RX,
@@ -66,15 +66,15 @@ u8 pdma0_peri[] = {
66 DMACH_SPDIF, 66 DMACH_SPDIF,
67}; 67};
68 68
69struct dma_pl330_platdata s5pv210_pdma0_pdata = { 69static struct dma_pl330_platdata s5pv210_pdma0_pdata = {
70 .nr_valid_peri = ARRAY_SIZE(pdma0_peri), 70 .nr_valid_peri = ARRAY_SIZE(pdma0_peri),
71 .peri_id = pdma0_peri, 71 .peri_id = pdma0_peri,
72}; 72};
73 73
74AMBA_AHB_DEVICE(s5pv210_pdma0, "dma-pl330.0", 0x00041330, S5PV210_PA_PDMA0, 74static AMBA_AHB_DEVICE(s5pv210_pdma0, "dma-pl330.0", 0x00041330,
75 {IRQ_PDMA0}, &s5pv210_pdma0_pdata); 75 S5PV210_PA_PDMA0, {IRQ_PDMA0}, &s5pv210_pdma0_pdata);
76 76
77u8 pdma1_peri[] = { 77static u8 pdma1_peri[] = {
78 DMACH_UART0_RX, 78 DMACH_UART0_RX,
79 DMACH_UART0_TX, 79 DMACH_UART0_TX,
80 DMACH_UART1_RX, 80 DMACH_UART1_RX,
@@ -109,13 +109,13 @@ u8 pdma1_peri[] = {
109 DMACH_PCM2_TX, 109 DMACH_PCM2_TX,
110}; 110};
111 111
112struct dma_pl330_platdata s5pv210_pdma1_pdata = { 112static struct dma_pl330_platdata s5pv210_pdma1_pdata = {
113 .nr_valid_peri = ARRAY_SIZE(pdma1_peri), 113 .nr_valid_peri = ARRAY_SIZE(pdma1_peri),
114 .peri_id = pdma1_peri, 114 .peri_id = pdma1_peri,
115}; 115};
116 116
117AMBA_AHB_DEVICE(s5pv210_pdma1, "dma-pl330.1", 0x00041330, S5PV210_PA_PDMA1, 117static AMBA_AHB_DEVICE(s5pv210_pdma1, "dma-pl330.1", 0x00041330,
118 {IRQ_PDMA1}, &s5pv210_pdma1_pdata); 118 S5PV210_PA_PDMA1, {IRQ_PDMA1}, &s5pv210_pdma1_pdata);
119 119
120static int __init s5pv210_dma_init(void) 120static int __init s5pv210_dma_init(void)
121{ 121{
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c
index ff9152610439..2cf5ed75f390 100644
--- a/arch/arm/mach-s5pv210/mach-goni.c
+++ b/arch/arm/mach-s5pv210/mach-goni.c
@@ -844,7 +844,7 @@ static struct s5p_fimc_isp_info goni_camera_sensors[] = {
844 }, 844 },
845}; 845};
846 846
847struct s5p_platform_fimc goni_fimc_md_platdata __initdata = { 847static struct s5p_platform_fimc goni_fimc_md_platdata __initdata = {
848 .isp_info = goni_camera_sensors, 848 .isp_info = goni_camera_sensors,
849 .num_clients = ARRAY_SIZE(goni_camera_sensors), 849 .num_clients = ARRAY_SIZE(goni_camera_sensors),
850}; 850};
diff --git a/arch/arm/mach-s5pv210/mach-smdkv210.c b/arch/arm/mach-s5pv210/mach-smdkv210.c
index dff9ea7b5bba..0933c8e1eb7b 100644
--- a/arch/arm/mach-s5pv210/mach-smdkv210.c
+++ b/arch/arm/mach-s5pv210/mach-smdkv210.c
@@ -140,7 +140,7 @@ static struct dm9000_plat_data smdkv210_dm9000_platdata = {
140 .dev_addr = { 0x00, 0x09, 0xc0, 0xff, 0xec, 0x48 }, 140 .dev_addr = { 0x00, 0x09, 0xc0, 0xff, 0xec, 0x48 },
141}; 141};
142 142
143struct platform_device smdkv210_dm9000 = { 143static struct platform_device smdkv210_dm9000 = {
144 .name = "dm9000", 144 .name = "dm9000",
145 .id = -1, 145 .id = -1,
146 .num_resources = ARRAY_SIZE(smdkv210_dm9000_resources), 146 .num_resources = ARRAY_SIZE(smdkv210_dm9000_resources),
diff --git a/arch/arm/plat-s3c24xx/s3c2443-clock.c b/arch/arm/plat-s3c24xx/s3c2443-clock.c
index 95e68190d593..037b448992af 100644
--- a/arch/arm/plat-s3c24xx/s3c2443-clock.c
+++ b/arch/arm/plat-s3c24xx/s3c2443-clock.c
@@ -53,7 +53,7 @@ int s3c2443_clkcon_enable_s(struct clk *clk, int enable)
53 * elided as the EPLL can be either sourced by the XTAL or EXTCLK and as 53 * elided as the EPLL can be either sourced by the XTAL or EXTCLK and as
54 * such directly equating the two source clocks is impossible. 54 * such directly equating the two source clocks is impossible.
55 */ 55 */
56struct clk clk_mpllref = { 56static struct clk clk_mpllref = {
57 .name = "mpllref", 57 .name = "mpllref",
58 .parent = &clk_xtal, 58 .parent = &clk_xtal,
59}; 59};
diff --git a/arch/arm/plat-s5p/irq-eint.c b/arch/arm/plat-s5p/irq-eint.c
index c496b359c371..139c050918c5 100644
--- a/arch/arm/plat-s5p/irq-eint.c
+++ b/arch/arm/plat-s5p/irq-eint.c
@@ -200,7 +200,7 @@ static struct irq_chip s5p_irq_vic_eint = {
200#endif 200#endif
201}; 201};
202 202
203int __init s5p_init_irq_eint(void) 203static int __init s5p_init_irq_eint(void)
204{ 204{
205 int irq; 205 int irq;
206 206
diff --git a/arch/arm/plat-s5p/irq-gpioint.c b/arch/arm/plat-s5p/irq-gpioint.c
index 1fdfaa4599ce..82c7311017a2 100644
--- a/arch/arm/plat-s5p/irq-gpioint.c
+++ b/arch/arm/plat-s5p/irq-gpioint.c
@@ -41,7 +41,7 @@ struct s5p_gpioint_bank {
41 void (*handler)(unsigned int, struct irq_desc *); 41 void (*handler)(unsigned int, struct irq_desc *);
42}; 42};
43 43
44LIST_HEAD(banks); 44static LIST_HEAD(banks);
45 45
46static int s5p_gpioint_set_type(struct irq_data *d, unsigned int type) 46static int s5p_gpioint_set_type(struct irq_data *d, unsigned int type)
47{ 47{
diff --git a/arch/arm/plat-samsung/devs.c b/arch/arm/plat-samsung/devs.c
index 45d8e5c53ea5..8b928f9bc1c3 100644
--- a/arch/arm/plat-samsung/devs.c
+++ b/arch/arm/plat-samsung/devs.c
@@ -791,17 +791,6 @@ struct platform_device s3c_device_iis = {
791}; 791};
792#endif /* CONFIG_PLAT_S3C24XX */ 792#endif /* CONFIG_PLAT_S3C24XX */
793 793
794#ifdef CONFIG_CPU_S3C2440
795struct platform_device s3c2412_device_iis = {
796 .name = "s3c2412-iis",
797 .id = -1,
798 .dev = {
799 .dma_mask = &samsung_device_dma_mask,
800 .coherent_dma_mask = DMA_BIT_MASK(32),
801 }
802};
803#endif /* CONFIG_CPU_S3C2440 */
804
805/* IDE CFCON */ 794/* IDE CFCON */
806 795
807#ifdef CONFIG_SAMSUNG_DEV_IDE 796#ifdef CONFIG_SAMSUNG_DEV_IDE
@@ -1125,7 +1114,7 @@ static struct resource s5p_pmu_resource[] = {
1125 DEFINE_RES_IRQ(IRQ_PMU) 1114 DEFINE_RES_IRQ(IRQ_PMU)
1126}; 1115};
1127 1116
1128struct platform_device s5p_device_pmu = { 1117static struct platform_device s5p_device_pmu = {
1129 .name = "arm-pmu", 1118 .name = "arm-pmu",
1130 .id = ARM_PMU_DEVICE_CPU, 1119 .id = ARM_PMU_DEVICE_CPU,
1131 .num_resources = ARRAY_SIZE(s5p_pmu_resource), 1120 .num_resources = ARRAY_SIZE(s5p_pmu_resource),
diff --git a/arch/arm/plat-samsung/dma-ops.c b/arch/arm/plat-samsung/dma-ops.c
index 0747c77a2fd5..301d9c319d0b 100644
--- a/arch/arm/plat-samsung/dma-ops.c
+++ b/arch/arm/plat-samsung/dma-ops.c
@@ -116,7 +116,7 @@ static inline int samsung_dmadev_flush(unsigned ch)
116 return dmaengine_terminate_all((struct dma_chan *)ch); 116 return dmaengine_terminate_all((struct dma_chan *)ch);
117} 117}
118 118
119struct samsung_dma_ops dmadev_ops = { 119static struct samsung_dma_ops dmadev_ops = {
120 .request = samsung_dmadev_request, 120 .request = samsung_dmadev_request,
121 .release = samsung_dmadev_release, 121 .release = samsung_dmadev_release,
122 .prepare = samsung_dmadev_prepare, 122 .prepare = samsung_dmadev_prepare,