diff options
Diffstat (limited to 'arch/arm/mach-omap2/dpll3xxx.c')
| -rw-r--r-- | arch/arm/mach-omap2/dpll3xxx.c | 30 | 
1 files changed, 14 insertions, 16 deletions
diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c index 3aed4b0b956..3a0296cfcac 100644 --- a/arch/arm/mach-omap2/dpll3xxx.c +++ b/arch/arm/mach-omap2/dpll3xxx.c @@ -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;  }  |