diff options
author | Pavel Pisa <ppisa@pikron.com> | 2006-12-06 11:08:27 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-12-07 11:24:15 -0500 |
commit | 5c894cd1c89fc10907febd93e6ef35cd3c65e25e (patch) | |
tree | a7be88236384910ee326402748f1cafd64b9b5ca /arch/arm/mach-imx | |
parent | 9073341c2ba5d5e77b3d05d84cf9e3a16e8a7902 (diff) |
[ARM] 3990/1: i.MX/MX1 more precise PLL decode
The future high resolution support inclusion utilizes
imx_decode_pll() in timer base frequency computation.
This use requires more precise computation without
discarding 10 bits by shifting left.
Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r-- | arch/arm/mach-imx/generic.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/arm/mach-imx/generic.c b/arch/arm/mach-imx/generic.c index 12ea58a3b84f..b5aa49d00ca3 100644 --- a/arch/arm/mach-imx/generic.c +++ b/arch/arm/mach-imx/generic.c | |||
@@ -104,6 +104,9 @@ EXPORT_SYMBOL(imx_gpio_mode); | |||
104 | */ | 104 | */ |
105 | static unsigned int imx_decode_pll(unsigned int pll) | 105 | static unsigned int imx_decode_pll(unsigned int pll) |
106 | { | 106 | { |
107 | unsigned long long ll; | ||
108 | unsigned long quot; | ||
109 | |||
107 | u32 mfi = (pll >> 10) & 0xf; | 110 | u32 mfi = (pll >> 10) & 0xf; |
108 | u32 mfn = pll & 0x3ff; | 111 | u32 mfn = pll & 0x3ff; |
109 | u32 mfd = (pll >> 16) & 0x3ff; | 112 | u32 mfd = (pll >> 16) & 0x3ff; |
@@ -112,7 +115,11 @@ static unsigned int imx_decode_pll(unsigned int pll) | |||
112 | 115 | ||
113 | mfi = mfi <= 5 ? 5 : mfi; | 116 | mfi = mfi <= 5 ? 5 : mfi; |
114 | 117 | ||
115 | return (2 * (f_ref>>10) * ( (mfi<<10) + (mfn<<10) / (mfd+1) )) / (pd+1); | 118 | ll = 2 * (unsigned long long)f_ref * ( (mfi<<16) + (mfn<<16) / (mfd+1) ); |
119 | quot = (pd+1) * (1<<16); | ||
120 | ll += quot / 2; | ||
121 | do_div(ll, quot); | ||
122 | return (unsigned int) ll; | ||
116 | } | 123 | } |
117 | 124 | ||
118 | unsigned int imx_get_system_clk(void) | 125 | unsigned int imx_get_system_clk(void) |