diff options
Diffstat (limited to 'arch/arm/mach-omap2/clock36xx.c')
| -rw-r--r-- | arch/arm/mach-omap2/clock36xx.c | 31 | 
1 files changed, 14 insertions, 17 deletions
diff --git a/arch/arm/mach-omap2/clock36xx.c b/arch/arm/mach-omap2/clock36xx.c index 0c5e25ed887..91ccb962e09 100644 --- a/arch/arm/mach-omap2/clock36xx.c +++ b/arch/arm/mach-omap2/clock36xx.c @@ -20,13 +20,12 @@  #include <linux/kernel.h>  #include <linux/clk.h> +#include <linux/clk-provider.h>  #include <linux/io.h> -#include <plat/clock.h> -  #include "clock.h"  #include "clock36xx.h" - +#define to_clk_divider(_hw) container_of(_hw, struct clk_divider, hw)  /**   * omap36xx_pwrdn_clk_enable_with_hsdiv_restore - enable clocks suffering @@ -39,34 +38,32 @@   * (Any other value different from the Read value) to the   * corresponding CM_CLKSEL register will refresh the dividers.   */ -static int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk *clk) +int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk)  { -	u32 dummy_v, orig_v, clksel_shift; +	struct clk_divider *parent; +	struct clk_hw *parent_hw; +	u32 dummy_v, orig_v; +	struct clk_hw_omap *omap_clk = to_clk_hw_omap(clk);  	int ret;  	/* Clear PWRDN bit of HSDIVIDER */  	ret = omap2_dflt_clk_enable(clk); +	parent_hw = __clk_get_hw(__clk_get_parent(clk->clk)); +	parent = to_clk_divider(parent_hw); +  	/* Restore the dividers */  	if (!ret) { -		clksel_shift = __ffs(clk->parent->clksel_mask); -		orig_v = __raw_readl(clk->parent->clksel_reg); +		orig_v = omap2_clk_readl(omap_clk, parent->reg);  		dummy_v = orig_v;  		/* Write any other value different from the Read value */ -		dummy_v ^= (1 << clksel_shift); -		__raw_writel(dummy_v, clk->parent->clksel_reg); +		dummy_v ^= (1 << parent->shift); +		omap2_clk_writel(dummy_v, omap_clk, parent->reg);  		/* Write the original divider */ -		__raw_writel(orig_v, clk->parent->clksel_reg); +		omap2_clk_writel(orig_v, omap_clk, parent->reg);  	}  	return ret;  } - -const struct clkops clkops_omap36xx_pwrdn_with_hsdiv_wait_restore = { -	.enable		= omap36xx_pwrdn_clk_enable_with_hsdiv_restore, -	.disable	= omap2_dflt_clk_disable, -	.find_companion	= omap2_clk_dflt_find_companion, -	.find_idlest	= omap2_clk_dflt_find_idlest, -};  | 
