diff options
Diffstat (limited to 'arch/arm/plat-mxc/clock.c')
-rw-r--r-- | arch/arm/plat-mxc/clock.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/arch/arm/plat-mxc/clock.c b/arch/arm/plat-mxc/clock.c index 0a38f0b396eb..92e13566cd4f 100644 --- a/arch/arm/plat-mxc/clock.c +++ b/arch/arm/plat-mxc/clock.c | |||
@@ -48,6 +48,11 @@ static DEFINE_MUTEX(clocks_mutex); | |||
48 | *-------------------------------------------------------------------------*/ | 48 | *-------------------------------------------------------------------------*/ |
49 | 49 | ||
50 | /* | 50 | /* |
51 | * All the code inside #ifndef CONFIG_COMMON_CLKDEV can be removed once all | ||
52 | * MXC architectures have switched to using clkdev. | ||
53 | */ | ||
54 | #ifndef CONFIG_COMMON_CLKDEV | ||
55 | /* | ||
51 | * Retrieve a clock by name. | 56 | * Retrieve a clock by name. |
52 | * | 57 | * |
53 | * Note that we first try to use device id on the bus | 58 | * Note that we first try to use device id on the bus |
@@ -110,6 +115,7 @@ found: | |||
110 | return clk; | 115 | return clk; |
111 | } | 116 | } |
112 | EXPORT_SYMBOL(clk_get); | 117 | EXPORT_SYMBOL(clk_get); |
118 | #endif | ||
113 | 119 | ||
114 | static void __clk_disable(struct clk *clk) | 120 | static void __clk_disable(struct clk *clk) |
115 | { | 121 | { |
@@ -187,6 +193,7 @@ unsigned long clk_get_rate(struct clk *clk) | |||
187 | } | 193 | } |
188 | EXPORT_SYMBOL(clk_get_rate); | 194 | EXPORT_SYMBOL(clk_get_rate); |
189 | 195 | ||
196 | #ifndef CONFIG_COMMON_CLKDEV | ||
190 | /* Decrement the clock's module reference count */ | 197 | /* Decrement the clock's module reference count */ |
191 | void clk_put(struct clk *clk) | 198 | void clk_put(struct clk *clk) |
192 | { | 199 | { |
@@ -194,6 +201,7 @@ void clk_put(struct clk *clk) | |||
194 | module_put(clk->owner); | 201 | module_put(clk->owner); |
195 | } | 202 | } |
196 | EXPORT_SYMBOL(clk_put); | 203 | EXPORT_SYMBOL(clk_put); |
204 | #endif | ||
197 | 205 | ||
198 | /* Round the requested clock rate to the nearest supported | 206 | /* Round the requested clock rate to the nearest supported |
199 | * rate that is less than or equal to the requested rate. | 207 | * rate that is less than or equal to the requested rate. |
@@ -257,6 +265,7 @@ struct clk *clk_get_parent(struct clk *clk) | |||
257 | } | 265 | } |
258 | EXPORT_SYMBOL(clk_get_parent); | 266 | EXPORT_SYMBOL(clk_get_parent); |
259 | 267 | ||
268 | #ifndef CONFIG_COMMON_CLKDEV | ||
260 | /* | 269 | /* |
261 | * Add a new clock to the clock tree. | 270 | * Add a new clock to the clock tree. |
262 | */ | 271 | */ |
@@ -327,4 +336,49 @@ static int __init mxc_setup_proc_entry(void) | |||
327 | } | 336 | } |
328 | 337 | ||
329 | late_initcall(mxc_setup_proc_entry); | 338 | late_initcall(mxc_setup_proc_entry); |
339 | #endif /* CONFIG_PROC_FS */ | ||
340 | #endif | ||
341 | |||
342 | /* | ||
343 | * Get the resulting clock rate from a PLL register value and the input | ||
344 | * frequency. PLLs with this register layout can at least be found on | ||
345 | * MX1, MX21, MX27 and MX31 | ||
346 | * | ||
347 | * mfi + mfn / (mfd + 1) | ||
348 | * f = 2 * f_ref * -------------------- | ||
349 | * pd + 1 | ||
350 | */ | ||
351 | unsigned long mxc_decode_pll(unsigned int reg_val, u32 freq) | ||
352 | { | ||
353 | long long ll; | ||
354 | int mfn_abs; | ||
355 | unsigned int mfi, mfn, mfd, pd; | ||
356 | |||
357 | mfi = (reg_val >> 10) & 0xf; | ||
358 | mfn = reg_val & 0x3ff; | ||
359 | mfd = (reg_val >> 16) & 0x3ff; | ||
360 | pd = (reg_val >> 26) & 0xf; | ||
361 | |||
362 | mfi = mfi <= 5 ? 5 : mfi; | ||
363 | |||
364 | mfn_abs = mfn; | ||
365 | |||
366 | #if !defined CONFIG_ARCH_MX1 && !defined CONFIG_ARCH_MX21 | ||
367 | if (mfn >= 0x200) { | ||
368 | mfn |= 0xFFFFFE00; | ||
369 | mfn_abs = -mfn; | ||
370 | } | ||
330 | #endif | 371 | #endif |
372 | |||
373 | freq *= 2; | ||
374 | freq /= pd + 1; | ||
375 | |||
376 | ll = (unsigned long long)freq * mfn_abs; | ||
377 | |||
378 | do_div(ll, mfd + 1); | ||
379 | if (mfn < 0) | ||
380 | ll = -ll; | ||
381 | ll = (freq * mfi) + ll; | ||
382 | |||
383 | return ll; | ||
384 | } | ||