|
@@ -307,10 +307,10 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel)
|
|
|
_omap3_noncore_dpll_bypass(clk);
|
|
|
|
|
|
/*
|
|
|
- * Set jitter correction. No jitter correction for OMAP4 and 3630
|
|
|
- * since freqsel field is no longer present
|
|
|
+ * Set jitter correction. Jitter correction applicable for OMAP343X
|
|
|
+ * only since freqsel field is no longer present on other devices.
|
|
|
*/
|
|
|
- if (!soc_is_am33xx() && !cpu_is_omap44xx() && !cpu_is_omap3630()) {
|
|
|
+ if (cpu_is_omap343x()) {
|
|
|
v = __raw_readl(dd->control_reg);
|
|
|
v &= ~dd->freqsel_mask;
|
|
|
v |= freqsel << __ffs(dd->freqsel_mask);
|
|
@@ -480,29 +480,30 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate,
|
|
|
if (!dd)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- __clk_prepare(dd->clk_bypass);
|
|
|
- clk_enable(dd->clk_bypass);
|
|
|
- __clk_prepare(dd->clk_ref);
|
|
|
- clk_enable(dd->clk_ref);
|
|
|
-
|
|
|
if (__clk_get_rate(dd->clk_bypass) == rate &&
|
|
|
(dd->modes & (1 << DPLL_LOW_POWER_BYPASS))) {
|
|
|
pr_debug("%s: %s: set rate: entering bypass.\n",
|
|
|
__func__, __clk_get_name(hw->clk));
|
|
|
|
|
|
+ __clk_prepare(dd->clk_bypass);
|
|
|
+ clk_enable(dd->clk_bypass);
|
|
|
ret = _omap3_noncore_dpll_bypass(clk);
|
|
|
if (!ret)
|
|
|
new_parent = dd->clk_bypass;
|
|
|
+ clk_disable(dd->clk_bypass);
|
|
|
+ __clk_unprepare(dd->clk_bypass);
|
|
|
} else {
|
|
|
+ __clk_prepare(dd->clk_ref);
|
|
|
+ clk_enable(dd->clk_ref);
|
|
|
+
|
|
|
if (dd->last_rounded_rate != rate)
|
|
|
rate = __clk_round_rate(hw->clk, rate);
|
|
|
|
|
|
if (dd->last_rounded_rate == 0)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- /* No freqsel on AM335x, OMAP4 and OMAP3630 */
|
|
|
- if (!soc_is_am33xx() && !cpu_is_omap44xx() &&
|
|
|
- !cpu_is_omap3630()) {
|
|
|
+ /* Freqsel is available only on OMAP343X devices */
|
|
|
+ if (cpu_is_omap343x()) {
|
|
|
freqsel = _omap3_dpll_compute_freqsel(clk,
|
|
|
dd->last_rounded_n);
|
|
|
WARN_ON(!freqsel);
|
|
@@ -514,6 +515,8 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate,
|
|
|
ret = omap3_noncore_dpll_program(clk, freqsel);
|
|
|
if (!ret)
|
|
|
new_parent = dd->clk_ref;
|
|
|
+ clk_disable(dd->clk_ref);
|
|
|
+ __clk_unprepare(dd->clk_ref);
|
|
|
}
|
|
|
/*
|
|
|
* FIXME - this is all wrong. common code handles reparenting and
|
|
@@ -525,11 +528,6 @@ int omap3_noncore_dpll_set_rate(struct clk_hw *hw, unsigned long rate,
|
|
|
if (!ret)
|
|
|
__clk_reparent(hw->clk, new_parent);
|
|
|
|
|
|
- clk_disable(dd->clk_ref);
|
|
|
- __clk_unprepare(dd->clk_ref);
|
|
|
- clk_disable(dd->clk_bypass);
|
|
|
- __clk_unprepare(dd->clk_bypass);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|