diff options
Diffstat (limited to 'arch/arm/mach-omap2/clkt34xx_dpll3m2.c')
| -rw-r--r-- | arch/arm/mach-omap2/clkt34xx_dpll3m2.c | 40 | 
1 files changed, 19 insertions, 21 deletions
diff --git a/arch/arm/mach-omap2/clkt34xx_dpll3m2.c b/arch/arm/mach-omap2/clkt34xx_dpll3m2.c index b2b1e37bb6b..eb69acf2101 100644 --- a/arch/arm/mach-omap2/clkt34xx_dpll3m2.c +++ b/arch/arm/mach-omap2/clkt34xx_dpll3m2.c @@ -21,14 +21,11 @@  #include <linux/clk.h>  #include <linux/io.h> -#include <plat/clock.h> -#include <plat/sram.h> -#include <plat/sdrc.h> -  #include "clock.h"  #include "clock3xxx.h"  #include "clock34xx.h"  #include "sdrc.h" +#include "sram.h"  #define CYCLES_PER_MHZ			1000000 @@ -47,8 +44,10 @@   * Program the DPLL M2 divider with the rounded target rate.  Returns   * -EINVAL upon error, or 0 upon success.   */ -int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate) +int omap3_core_dpll_m2_set_rate(struct clk_hw *hw, unsigned long rate, +					unsigned long parent_rate)  { +	struct clk_hw_omap *clk = to_clk_hw_omap(hw);  	u32 new_div = 0;  	u32 unlock_dll = 0;  	u32 c; @@ -56,6 +55,7 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)  	struct omap_sdrc_params *sdrc_cs0;  	struct omap_sdrc_params *sdrc_cs1;  	int ret; +	unsigned long clkrate;  	if (!clk || !rate)  		return -EINVAL; @@ -64,11 +64,12 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)  	if (validrate != rate)  		return -EINVAL; -	sdrcrate = sdrc_ick_p->rate; -	if (rate > clk->rate) -		sdrcrate <<= ((rate / clk->rate) >> 1); +	sdrcrate = __clk_get_rate(sdrc_ick_p); +	clkrate = __clk_get_rate(hw->clk); +	if (rate > clkrate) +		sdrcrate <<= ((rate / clkrate) >> 1);  	else -		sdrcrate >>= ((clk->rate / rate) >> 1); +		sdrcrate >>= ((clkrate / rate) >> 1);  	ret = omap2_sdrc_get_params(sdrcrate, &sdrc_cs0, &sdrc_cs1);  	if (ret) @@ -82,7 +83,7 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)  	/*  	 * XXX This only needs to be done when the CPU frequency changes  	 */ -	_mpurate = arm_fck_p->rate / CYCLES_PER_MHZ; +	_mpurate = __clk_get_rate(arm_fck_p) / CYCLES_PER_MHZ;  	c = (_mpurate << SDRC_MPURATE_SCALE) >> SDRC_MPURATE_BASE_SHIFT;  	c += 1;  /* for safety */  	c *= SDRC_MPURATE_LOOPS; @@ -90,32 +91,29 @@ int omap3_core_dpll_m2_set_rate(struct clk *clk, unsigned long rate)  	if (c == 0)  		c = 1; -	pr_debug("clock: changing CORE DPLL rate from %lu to %lu\n", clk->rate, -		 validrate); -	pr_debug("clock: SDRC CS0 timing params used:" -		 " RFR %08x CTRLA %08x CTRLB %08x MR %08x\n", +	pr_debug("clock: changing CORE DPLL rate from %lu to %lu\n", +		 clkrate, validrate); +	pr_debug("clock: SDRC CS0 timing params used: RFR %08x CTRLA %08x CTRLB %08x MR %08x\n",  		 sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,  		 sdrc_cs0->actim_ctrlb, sdrc_cs0->mr);  	if (sdrc_cs1) -		pr_debug("clock: SDRC CS1 timing params used: " -		 " RFR %08x CTRLA %08x CTRLB %08x MR %08x\n", -		 sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla, -		 sdrc_cs1->actim_ctrlb, sdrc_cs1->mr); +		pr_debug("clock: SDRC CS1 timing params used: RFR %08x CTRLA %08x CTRLB %08x MR %08x\n", +			 sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla, +			 sdrc_cs1->actim_ctrlb, sdrc_cs1->mr);  	if (sdrc_cs1)  		omap3_configure_core_dpll( -				  new_div, unlock_dll, c, rate > clk->rate, +				  new_div, unlock_dll, c, rate > clkrate,  				  sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,  				  sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,  				  sdrc_cs1->rfr_ctrl, sdrc_cs1->actim_ctrla,  				  sdrc_cs1->actim_ctrlb, sdrc_cs1->mr);  	else  		omap3_configure_core_dpll( -				  new_div, unlock_dll, c, rate > clk->rate, +				  new_div, unlock_dll, c, rate > clkrate,  				  sdrc_cs0->rfr_ctrl, sdrc_cs0->actim_ctrla,  				  sdrc_cs0->actim_ctrlb, sdrc_cs0->mr,  				  0, 0, 0, 0); -  	return 0;  }  | 
