diff options
author | Ben Dooks <ben-linux@fluff.org> | 2008-10-21 09:06:34 -0400 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2008-12-15 16:46:02 -0500 |
commit | e24b864ab3e1a5916c87e13cfdc94c1d02f0578b (patch) | |
tree | f2c894494fc6831c72cd980b9d836efa900f5be3 /arch/arm/plat-s3c24xx | |
parent | 93bc6b6371b6b7303ffdae0d69dcdc443b8b0d8a (diff) |
[ARM] S3C24XX: Split pll code out of regs-clock.h
Move the PLL calculation code into it's own header
file for re-use with the other plat-s3c24xx based
systems such as the S3C24A0.
Note, we change the name of s3c2410_get_pll to the
more generically named s3c24xx_get_pll as well as
the related defintions.
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Diffstat (limited to 'arch/arm/plat-s3c24xx')
-rw-r--r-- | arch/arm/plat-s3c24xx/clock.c | 3 | ||||
-rw-r--r-- | arch/arm/plat-s3c24xx/include/plat/pll.h | 37 | ||||
-rw-r--r-- | arch/arm/plat-s3c24xx/s3c244x.c | 3 |
3 files changed, 41 insertions, 2 deletions
diff --git a/arch/arm/plat-s3c24xx/clock.c b/arch/arm/plat-s3c24xx/clock.c index bf2633bd3996..1ff1b9836042 100644 --- a/arch/arm/plat-s3c24xx/clock.c +++ b/arch/arm/plat-s3c24xx/clock.c | |||
@@ -49,6 +49,7 @@ | |||
49 | 49 | ||
50 | #include <plat/clock.h> | 50 | #include <plat/clock.h> |
51 | #include <plat/cpu.h> | 51 | #include <plat/cpu.h> |
52 | #include <plat/pll.h> | ||
52 | 53 | ||
53 | /* clock information */ | 54 | /* clock information */ |
54 | 55 | ||
@@ -332,7 +333,7 @@ int __init s3c24xx_setup_clocks(unsigned long xtal, | |||
332 | /* initialise the main system clocks */ | 333 | /* initialise the main system clocks */ |
333 | 334 | ||
334 | clk_xtal.rate = xtal; | 335 | clk_xtal.rate = xtal; |
335 | clk_upll.rate = s3c2410_get_pll(__raw_readl(S3C2410_UPLLCON), xtal); | 336 | clk_upll.rate = s3c24xx_get_pll(__raw_readl(S3C2410_UPLLCON), xtal); |
336 | 337 | ||
337 | clk_mpll.rate = fclk; | 338 | clk_mpll.rate = fclk; |
338 | clk_h.rate = hclk; | 339 | clk_h.rate = hclk; |
diff --git a/arch/arm/plat-s3c24xx/include/plat/pll.h b/arch/arm/plat-s3c24xx/include/plat/pll.h new file mode 100644 index 000000000000..7ea8bffa7a9c --- /dev/null +++ b/arch/arm/plat-s3c24xx/include/plat/pll.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/include/plat/pll.h | ||
2 | * | ||
3 | * Copyright 2008 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * http://armlinux.simtec.co.uk/ | ||
6 | * | ||
7 | * S3C24xx - common pll registers and code | ||
8 | */ | ||
9 | |||
10 | #define S3C24XX_PLLCON_MDIVSHIFT 12 | ||
11 | #define S3C24XX_PLLCON_PDIVSHIFT 4 | ||
12 | #define S3C24XX_PLLCON_SDIVSHIFT 0 | ||
13 | #define S3C24XX_PLLCON_MDIVMASK ((1<<(1+(19-12)))-1) | ||
14 | #define S3C24XX_PLLCON_PDIVMASK ((1<<5)-1) | ||
15 | #define S3C24XX_PLLCON_SDIVMASK 3 | ||
16 | |||
17 | #include <asm/div64.h> | ||
18 | |||
19 | static inline unsigned int | ||
20 | s3c24xx_get_pll(unsigned int pllval, unsigned int baseclk) | ||
21 | { | ||
22 | unsigned int mdiv, pdiv, sdiv; | ||
23 | uint64_t fvco; | ||
24 | |||
25 | mdiv = pllval >> S3C24XX_PLLCON_MDIVSHIFT; | ||
26 | pdiv = pllval >> S3C24XX_PLLCON_PDIVSHIFT; | ||
27 | sdiv = pllval >> S3C24XX_PLLCON_SDIVSHIFT; | ||
28 | |||
29 | mdiv &= S3C24XX_PLLCON_MDIVMASK; | ||
30 | pdiv &= S3C24XX_PLLCON_PDIVMASK; | ||
31 | sdiv &= S3C24XX_PLLCON_SDIVMASK; | ||
32 | |||
33 | fvco = (uint64_t)baseclk * (mdiv + 8); | ||
34 | do_div(fvco, (pdiv + 2) << sdiv); | ||
35 | |||
36 | return (unsigned int)fvco; | ||
37 | } | ||
diff --git a/arch/arm/plat-s3c24xx/s3c244x.c b/arch/arm/plat-s3c24xx/s3c244x.c index d1152d1f9ba0..7f33cef20bac 100644 --- a/arch/arm/plat-s3c24xx/s3c244x.c +++ b/arch/arm/plat-s3c24xx/s3c244x.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include <plat/devs.h> | 42 | #include <plat/devs.h> |
43 | #include <plat/cpu.h> | 43 | #include <plat/cpu.h> |
44 | #include <plat/pm.h> | 44 | #include <plat/pm.h> |
45 | #include <plat/pll.h> | ||
45 | 46 | ||
46 | static struct map_desc s3c244x_iodesc[] __initdata = { | 47 | static struct map_desc s3c244x_iodesc[] __initdata = { |
47 | IODESC_ENT(CLKPWR), | 48 | IODESC_ENT(CLKPWR), |
@@ -80,7 +81,7 @@ void __init s3c244x_init_clocks(int xtal) | |||
80 | /* now we've got our machine bits initialised, work out what | 81 | /* now we've got our machine bits initialised, work out what |
81 | * clocks we've got */ | 82 | * clocks we've got */ |
82 | 83 | ||
83 | fclk = s3c2410_get_pll(__raw_readl(S3C2410_MPLLCON), xtal) * 2; | 84 | fclk = s3c24xx_get_pll(__raw_readl(S3C2410_MPLLCON), xtal) * 2; |
84 | 85 | ||
85 | clkdiv = __raw_readl(S3C2410_CLKDIVN); | 86 | clkdiv = __raw_readl(S3C2410_CLKDIVN); |
86 | camdiv = __raw_readl(S3C2440_CAMDIVN); | 87 | camdiv = __raw_readl(S3C2440_CAMDIVN); |