diff options
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r-- | arch/arm/mach-omap2/dpll3xxx.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c index f0f10beeffe8..c310dc0d40b4 100644 --- a/arch/arm/mach-omap2/dpll3xxx.c +++ b/arch/arm/mach-omap2/dpll3xxx.c | |||
@@ -135,11 +135,20 @@ static u16 _omap3_dpll_compute_freqsel(struct clk *clk, u8 n) | |||
135 | */ | 135 | */ |
136 | static int _omap3_noncore_dpll_lock(struct clk *clk) | 136 | static int _omap3_noncore_dpll_lock(struct clk *clk) |
137 | { | 137 | { |
138 | const struct dpll_data *dd; | ||
138 | u8 ai; | 139 | u8 ai; |
139 | int r; | 140 | u8 state = 1; |
141 | int r = 0; | ||
140 | 142 | ||
141 | pr_debug("clock: locking DPLL %s\n", clk->name); | 143 | pr_debug("clock: locking DPLL %s\n", clk->name); |
142 | 144 | ||
145 | dd = clk->dpll_data; | ||
146 | state <<= __ffs(dd->idlest_mask); | ||
147 | |||
148 | /* Check if already locked */ | ||
149 | if ((__raw_readl(dd->idlest_reg) & dd->idlest_mask) == state) | ||
150 | goto done; | ||
151 | |||
143 | ai = omap3_dpll_autoidle_read(clk); | 152 | ai = omap3_dpll_autoidle_read(clk); |
144 | 153 | ||
145 | if (ai) | 154 | if (ai) |
@@ -152,6 +161,7 @@ static int _omap3_noncore_dpll_lock(struct clk *clk) | |||
152 | if (ai) | 161 | if (ai) |
153 | omap3_dpll_allow_idle(clk); | 162 | omap3_dpll_allow_idle(clk); |
154 | 163 | ||
164 | done: | ||
155 | return r; | 165 | return r; |
156 | } | 166 | } |
157 | 167 | ||