diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-22 17:56:13 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-22 17:56:13 -0400 |
commit | 9e268beb92ee3a853b3946e84b10358207e2085f (patch) | |
tree | dec36344c8b16d53e56763aa174dd7ea806b653f /arch/arm/mach-omap2/io.c | |
parent | 2e8b5a09ebf1f98f02c1988a48415e89d4c25168 (diff) | |
parent | 9ccdac3662dbf3c75e8f8851a214bdf7d365a4bd (diff) |
Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm: (49 commits)
[ARM] idle: clean up pm_idle calling, obey hlt_counter
[ARM] S3C: Fix gpio-config off-by-one bug
[ARM] S3C64XX: add to_irq() support for EINT() GPIO
[ARM] S3C64XX: clock.c: fix typo in usb-host clock ctrlbit
[ARM] S3C64XX: fix HCLK gate defines
[ARM] Update mach-types
[ARM] wire up rt_tgsigqueueinfo and perf_counter_open
OMAP2 clock/powerdomain: off by 1 error in loop timeout comparisons
OMAP3 SDRC: set FIXEDDELAY when disabling SDRC DLL
OMAP3: Add support for DPLL3 divisor values higher than 2
OMAP3 SRAM: convert SRAM code to use macros rather than magic numbers
OMAP3 SRAM: add more comments on the SRAM code
OMAP3 clock/SDRC: program SDRC_MR register during SDRC clock change
OMAP3 clock: add a short delay when lowering CORE clk rate
OMAP3 clock: initialize SDRC timings at kernel start
OMAP3 clock: remove wait for DPLL3 M2 clock to stabilize
[ARM] Add old Feroceon support to compressed/head.S
[ARM] 5559/1: Limit the stack unwinding caused by a kthread exit
[ARM] 5558/1: Add extra checks to ARM unwinder to avoid tracing corrupt stacks
[ARM] 5557/1: Discard some ARM.ex*.*exit.text sections when !HOTPLUG or !HOTPLUG_CPU
...
Diffstat (limited to 'arch/arm/mach-omap2/io.c')
-rw-r--r-- | arch/arm/mach-omap2/io.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index 32afd9448216..3a86b0f66031 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/clk.h> | ||
24 | 25 | ||
25 | #include <asm/tlb.h> | 26 | #include <asm/tlb.h> |
26 | 27 | ||
@@ -241,6 +242,40 @@ void __init omap2_map_common_io(void) | |||
241 | omapfb_reserve_sdram(); | 242 | omapfb_reserve_sdram(); |
242 | } | 243 | } |
243 | 244 | ||
245 | /* | ||
246 | * omap2_init_reprogram_sdrc - reprogram SDRC timing parameters | ||
247 | * | ||
248 | * Sets the CORE DPLL3 M2 divider to the same value that it's at | ||
249 | * currently. This has the effect of setting the SDRC SDRAM AC timing | ||
250 | * registers to the values currently defined by the kernel. Currently | ||
251 | * only defined for OMAP3; will return 0 if called on OMAP2. Returns | ||
252 | * -EINVAL if the dpll3_m2_ck cannot be found, 0 if called on OMAP2, | ||
253 | * or passes along the return value of clk_set_rate(). | ||
254 | */ | ||
255 | static int __init _omap2_init_reprogram_sdrc(void) | ||
256 | { | ||
257 | struct clk *dpll3_m2_ck; | ||
258 | int v = -EINVAL; | ||
259 | long rate; | ||
260 | |||
261 | if (!cpu_is_omap34xx()) | ||
262 | return 0; | ||
263 | |||
264 | dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck"); | ||
265 | if (!dpll3_m2_ck) | ||
266 | return -EINVAL; | ||
267 | |||
268 | rate = clk_get_rate(dpll3_m2_ck); | ||
269 | pr_info("Reprogramming SDRC clock to %ld Hz\n", rate); | ||
270 | v = clk_set_rate(dpll3_m2_ck, rate); | ||
271 | if (v) | ||
272 | pr_err("dpll3_m2_clk rate change failed: %d\n", v); | ||
273 | |||
274 | clk_put(dpll3_m2_ck); | ||
275 | |||
276 | return v; | ||
277 | } | ||
278 | |||
244 | void __init omap2_init_common_hw(struct omap_sdrc_params *sp) | 279 | void __init omap2_init_common_hw(struct omap_sdrc_params *sp) |
245 | { | 280 | { |
246 | omap2_mux_init(); | 281 | omap2_mux_init(); |
@@ -249,6 +284,7 @@ void __init omap2_init_common_hw(struct omap_sdrc_params *sp) | |||
249 | clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); | 284 | clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps); |
250 | omap2_clk_init(); | 285 | omap2_clk_init(); |
251 | omap2_sdrc_init(sp); | 286 | omap2_sdrc_init(sp); |
287 | _omap2_init_reprogram_sdrc(); | ||
252 | #endif | 288 | #endif |
253 | gpmc_init(); | 289 | gpmc_init(); |
254 | } | 290 | } |