diff options
author | Rajendra Nayak <rnayak@ti.com> | 2012-09-22 04:24:16 -0400 |
---|---|---|
committer | Paul Walmsley <paul@pwsan.com> | 2012-09-22 12:50:01 -0400 |
commit | 4d7cb45ee823541632a3d50f57031ce9fd60e13f (patch) | |
tree | 8d5dbefa5d4140a26fa830b4985ae5e2d3d4d4db /arch/arm/mach-omap2/board-apollon.c | |
parent | a04bcc231c1bcfe7602bcb3e8d742ef796142275 (diff) |
ARM: omap: clk: add clk_prepare and clk_unprepare
As part of Common Clk Framework (CCF) the clk_enable() operation
was split into a clk_prepare() which could sleep, and a clk_enable()
which should never sleep. Similarly the clk_disable() was
split into clk_disable() and clk_unprepare(). This was
needed to handle complex cases where in a clk gate/ungate
would require a slow and a fast part to be implemented.
None of the clocks below seem to be in the 'complex' clocks
category and are just simple clocks which are enabled/disabled
through simple register writes.
Most of the instances also seem to be called in non-atomic
context which means its safe to move all of those from
using a clk_enable() to clk_prepare_enable() and clk_disable() to
clk_disable_unprepare().
For some others, mainly the ones handled through the hwmod framework
there is a possibility that they get called in either an atomic
or a non-atomic context.
The way these get handled below work only as long as clk_prepare
is implemented as a no-op (which is the case today) since this gets
called very early at boot while most subsystems are unavailable.
Hence these are marked with a *HACK* comment, which says we need
to re-visit these once we start doing something meaningful with
clk_prepare/clk_unprepare like doing voltage scaling or something
that involves i2c.
This is in preparation of OMAP moving to CCF.
Based on initial changes from Mike Turquette.
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Paul Walmsley <paul@pwsan.com>
Diffstat (limited to 'arch/arm/mach-omap2/board-apollon.c')
-rw-r--r-- | arch/arm/mach-omap2/board-apollon.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c index 3e2d76f05af4..cea3abace815 100644 --- a/arch/arm/mach-omap2/board-apollon.c +++ b/arch/arm/mach-omap2/board-apollon.c | |||
@@ -202,7 +202,7 @@ static inline void __init apollon_init_smc91x(void) | |||
202 | return; | 202 | return; |
203 | } | 203 | } |
204 | 204 | ||
205 | clk_enable(gpmc_fck); | 205 | clk_prepare_enable(gpmc_fck); |
206 | rate = clk_get_rate(gpmc_fck); | 206 | rate = clk_get_rate(gpmc_fck); |
207 | 207 | ||
208 | eth_cs = APOLLON_ETH_CS; | 208 | eth_cs = APOLLON_ETH_CS; |
@@ -246,7 +246,7 @@ static inline void __init apollon_init_smc91x(void) | |||
246 | gpmc_cs_free(APOLLON_ETH_CS); | 246 | gpmc_cs_free(APOLLON_ETH_CS); |
247 | } | 247 | } |
248 | out: | 248 | out: |
249 | clk_disable(gpmc_fck); | 249 | clk_disable_unprepare(gpmc_fck); |
250 | clk_put(gpmc_fck); | 250 | clk_put(gpmc_fck); |
251 | } | 251 | } |
252 | 252 | ||