Commit 519ab8b2 authored by Tero Kristo's avatar Tero Kristo Committed by Mike Turquette

ARM: OMAP2+: clock: use driver API instead of direct memory read/write

Clock nodes shall use the services provided by underlying drivers to access
the hardware registers instead of direct memory read/write. Thus, change
all the code to use the new omap2_clk_readl / omap2_clk_writel APIs for this.
Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
parent 3ada6b10
...@@ -97,12 +97,12 @@ static void _write_clksel_reg(struct clk_hw_omap *clk, u32 field_val) ...@@ -97,12 +97,12 @@ static void _write_clksel_reg(struct clk_hw_omap *clk, u32 field_val)
{ {
u32 v; u32 v;
v = __raw_readl(clk->clksel_reg); v = omap2_clk_readl(clk, clk->clksel_reg);
v &= ~clk->clksel_mask; v &= ~clk->clksel_mask;
v |= field_val << __ffs(clk->clksel_mask); v |= field_val << __ffs(clk->clksel_mask);
__raw_writel(v, clk->clksel_reg); omap2_clk_writel(v, clk, clk->clksel_reg);
v = __raw_readl(clk->clksel_reg); /* OCP barrier */ v = omap2_clk_readl(clk, clk->clksel_reg); /* OCP barrier */
} }
/** /**
...@@ -204,7 +204,7 @@ static u32 _read_divisor(struct clk_hw_omap *clk) ...@@ -204,7 +204,7 @@ static u32 _read_divisor(struct clk_hw_omap *clk)
if (!clk->clksel || !clk->clksel_mask) if (!clk->clksel || !clk->clksel_mask)
return 0; return 0;
v = __raw_readl(clk->clksel_reg); v = omap2_clk_readl(clk, clk->clksel_reg);
v &= clk->clksel_mask; v &= clk->clksel_mask;
v >>= __ffs(clk->clksel_mask); v >>= __ffs(clk->clksel_mask);
...@@ -320,7 +320,7 @@ u8 omap2_clksel_find_parent_index(struct clk_hw *hw) ...@@ -320,7 +320,7 @@ u8 omap2_clksel_find_parent_index(struct clk_hw *hw)
WARN((!clk->clksel || !clk->clksel_mask), WARN((!clk->clksel || !clk->clksel_mask),
"clock: %s: attempt to call on a non-clksel clock", clk_name); "clock: %s: attempt to call on a non-clksel clock", clk_name);
r = __raw_readl(clk->clksel_reg) & clk->clksel_mask; r = omap2_clk_readl(clk, clk->clksel_reg) & clk->clksel_mask;
r >>= __ffs(clk->clksel_mask); r >>= __ffs(clk->clksel_mask);
for (clks = clk->clksel; clks->parent && !found; clks++) { for (clks = clk->clksel; clks->parent && !found; clks++) {
......
...@@ -196,7 +196,7 @@ u8 omap2_init_dpll_parent(struct clk_hw *hw) ...@@ -196,7 +196,7 @@ u8 omap2_init_dpll_parent(struct clk_hw *hw)
if (!dd) if (!dd)
return -EINVAL; return -EINVAL;
v = __raw_readl(dd->control_reg); v = omap2_clk_readl(clk, dd->control_reg);
v &= dd->enable_mask; v &= dd->enable_mask;
v >>= __ffs(dd->enable_mask); v >>= __ffs(dd->enable_mask);
...@@ -243,7 +243,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk) ...@@ -243,7 +243,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk)
return 0; return 0;
/* Return bypass rate if DPLL is bypassed */ /* Return bypass rate if DPLL is bypassed */
v = __raw_readl(dd->control_reg); v = omap2_clk_readl(clk, dd->control_reg);
v &= dd->enable_mask; v &= dd->enable_mask;
v >>= __ffs(dd->enable_mask); v >>= __ffs(dd->enable_mask);
...@@ -262,7 +262,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk) ...@@ -262,7 +262,7 @@ unsigned long omap2_get_dpll_rate(struct clk_hw_omap *clk)
return __clk_get_rate(dd->clk_bypass); return __clk_get_rate(dd->clk_bypass);
} }
v = __raw_readl(dd->mult_div1_reg); v = omap2_clk_readl(clk, dd->mult_div1_reg);
dpll_mult = v & dd->mult_mask; dpll_mult = v & dd->mult_mask;
dpll_mult >>= __ffs(dd->mult_mask); dpll_mult >>= __ffs(dd->mult_mask);
dpll_div = v & dd->div1_mask; dpll_div = v & dd->div1_mask;
......
...@@ -25,25 +25,29 @@ ...@@ -25,25 +25,29 @@
/* XXX */ /* XXX */
void omap2_clkt_iclk_allow_idle(struct clk_hw_omap *clk) void omap2_clkt_iclk_allow_idle(struct clk_hw_omap *clk)
{ {
u32 v, r; u32 v;
void __iomem *r;
r = ((__force u32)clk->enable_reg ^ (CM_AUTOIDLE ^ CM_ICLKEN)); r = (__force void __iomem *)
((__force u32)clk->enable_reg ^ (CM_AUTOIDLE ^ CM_ICLKEN));
v = __raw_readl((__force void __iomem *)r); v = omap2_clk_readl(clk, r);
v |= (1 << clk->enable_bit); v |= (1 << clk->enable_bit);
__raw_writel(v, (__force void __iomem *)r); omap2_clk_writel(v, clk, r);
} }
/* XXX */ /* XXX */
void omap2_clkt_iclk_deny_idle(struct clk_hw_omap *clk) void omap2_clkt_iclk_deny_idle(struct clk_hw_omap *clk)
{ {
u32 v, r; u32 v;
void __iomem *r;
r = ((__force u32)clk->enable_reg ^ (CM_AUTOIDLE ^ CM_ICLKEN)); r = (__force void __iomem *)
((__force u32)clk->enable_reg ^ (CM_AUTOIDLE ^ CM_ICLKEN));
v = __raw_readl((__force void __iomem *)r); v = omap2_clk_readl(clk, r);
v &= ~(1 << clk->enable_bit); v &= ~(1 << clk->enable_bit);
__raw_writel(v, (__force void __iomem *)r); omap2_clk_writel(v, clk, r);
} }
/* Public data */ /* Public data */
......
...@@ -111,6 +111,7 @@ unsigned long omap_fixed_divisor_recalc(struct clk_hw *hw, ...@@ -111,6 +111,7 @@ unsigned long omap_fixed_divisor_recalc(struct clk_hw *hw,
/** /**
* _wait_idlest_generic - wait for a module to leave the idle state * _wait_idlest_generic - wait for a module to leave the idle state
* @clk: module clock to wait for (needed for register offsets)
* @reg: virtual address of module IDLEST register * @reg: virtual address of module IDLEST register
* @mask: value to mask against to determine if the module is active * @mask: value to mask against to determine if the module is active
* @idlest: idle state indicator (0 or 1) for the clock * @idlest: idle state indicator (0 or 1) for the clock
...@@ -122,14 +123,14 @@ unsigned long omap_fixed_divisor_recalc(struct clk_hw *hw, ...@@ -122,14 +123,14 @@ unsigned long omap_fixed_divisor_recalc(struct clk_hw *hw,
* elapsed. XXX Deprecated - should be moved into drivers for the * elapsed. XXX Deprecated - should be moved into drivers for the
* individual IP block that the IDLEST register exists in. * individual IP block that the IDLEST register exists in.
*/ */
static int _wait_idlest_generic(void __iomem *reg, u32 mask, u8 idlest, static int _wait_idlest_generic(struct clk_hw_omap *clk, void __iomem *reg,
const char *name) u32 mask, u8 idlest, const char *name)
{ {
int i = 0, ena = 0; int i = 0, ena = 0;
ena = (idlest) ? 0 : mask; ena = (idlest) ? 0 : mask;
omap_test_timeout(((__raw_readl(reg) & mask) == ena), omap_test_timeout(((omap2_clk_readl(clk, reg) & mask) == ena),
MAX_MODULE_ENABLE_WAIT, i); MAX_MODULE_ENABLE_WAIT, i);
if (i < MAX_MODULE_ENABLE_WAIT) if (i < MAX_MODULE_ENABLE_WAIT)
...@@ -162,7 +163,7 @@ static void _omap2_module_wait_ready(struct clk_hw_omap *clk) ...@@ -162,7 +163,7 @@ static void _omap2_module_wait_ready(struct clk_hw_omap *clk)
/* Not all modules have multiple clocks that their IDLEST depends on */ /* Not all modules have multiple clocks that their IDLEST depends on */
if (clk->ops->find_companion) { if (clk->ops->find_companion) {
clk->ops->find_companion(clk, &companion_reg, &other_bit); clk->ops->find_companion(clk, &companion_reg, &other_bit);
if (!(__raw_readl(companion_reg) & (1 << other_bit))) if (!(omap2_clk_readl(clk, companion_reg) & (1 << other_bit)))
return; return;
} }
...@@ -170,8 +171,8 @@ static void _omap2_module_wait_ready(struct clk_hw_omap *clk) ...@@ -170,8 +171,8 @@ static void _omap2_module_wait_ready(struct clk_hw_omap *clk)
r = cm_split_idlest_reg(idlest_reg, &prcm_mod, &idlest_reg_id); r = cm_split_idlest_reg(idlest_reg, &prcm_mod, &idlest_reg_id);
if (r) { if (r) {
/* IDLEST register not in the CM module */ /* IDLEST register not in the CM module */
_wait_idlest_generic(idlest_reg, (1 << idlest_bit), idlest_val, _wait_idlest_generic(clk, idlest_reg, (1 << idlest_bit),
__clk_get_name(clk->hw.clk)); idlest_val, __clk_get_name(clk->hw.clk));
} else { } else {
cm_wait_module_ready(prcm_mod, idlest_reg_id, idlest_bit); cm_wait_module_ready(prcm_mod, idlest_reg_id, idlest_bit);
}; };
...@@ -333,13 +334,13 @@ int omap2_dflt_clk_enable(struct clk_hw *hw) ...@@ -333,13 +334,13 @@ int omap2_dflt_clk_enable(struct clk_hw *hw)
} }
/* FIXME should not have INVERT_ENABLE bit here */ /* FIXME should not have INVERT_ENABLE bit here */
v = __raw_readl(clk->enable_reg); v = omap2_clk_readl(clk, clk->enable_reg);
if (clk->flags & INVERT_ENABLE) if (clk->flags & INVERT_ENABLE)
v &= ~(1 << clk->enable_bit); v &= ~(1 << clk->enable_bit);
else else
v |= (1 << clk->enable_bit); v |= (1 << clk->enable_bit);
__raw_writel(v, clk->enable_reg); omap2_clk_writel(v, clk, clk->enable_reg);
v = __raw_readl(clk->enable_reg); /* OCP barrier */ v = omap2_clk_readl(clk, clk->enable_reg); /* OCP barrier */
if (clk->ops && clk->ops->find_idlest) if (clk->ops && clk->ops->find_idlest)
_omap2_module_wait_ready(clk); _omap2_module_wait_ready(clk);
...@@ -377,12 +378,12 @@ void omap2_dflt_clk_disable(struct clk_hw *hw) ...@@ -377,12 +378,12 @@ void omap2_dflt_clk_disable(struct clk_hw *hw)
return; return;
} }
v = __raw_readl(clk->enable_reg); v = omap2_clk_readl(clk, clk->enable_reg);
if (clk->flags & INVERT_ENABLE) if (clk->flags & INVERT_ENABLE)
v |= (1 << clk->enable_bit); v |= (1 << clk->enable_bit);
else else
v &= ~(1 << clk->enable_bit); v &= ~(1 << clk->enable_bit);
__raw_writel(v, clk->enable_reg); omap2_clk_writel(v, clk, clk->enable_reg);
/* No OCP barrier needed here since it is a disable operation */ /* No OCP barrier needed here since it is a disable operation */
if (clkdm_control && clk->clkdm) if (clkdm_control && clk->clkdm)
...@@ -478,7 +479,7 @@ int omap2_dflt_clk_is_enabled(struct clk_hw *hw) ...@@ -478,7 +479,7 @@ int omap2_dflt_clk_is_enabled(struct clk_hw *hw)
struct clk_hw_omap *clk = to_clk_hw_omap(hw); struct clk_hw_omap *clk = to_clk_hw_omap(hw);
u32 v; u32 v;
v = __raw_readl(clk->enable_reg); v = omap2_clk_readl(clk, clk->enable_reg);
if (clk->flags & INVERT_ENABLE) if (clk->flags & INVERT_ENABLE)
v ^= BIT(clk->enable_bit); v ^= BIT(clk->enable_bit);
......
...@@ -43,6 +43,7 @@ int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk) ...@@ -43,6 +43,7 @@ int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk)
struct clk_divider *parent; struct clk_divider *parent;
struct clk_hw *parent_hw; struct clk_hw *parent_hw;
u32 dummy_v, orig_v; u32 dummy_v, orig_v;
struct clk_hw_omap *omap_clk = to_clk_hw_omap(clk);
int ret; int ret;
/* Clear PWRDN bit of HSDIVIDER */ /* Clear PWRDN bit of HSDIVIDER */
...@@ -53,15 +54,15 @@ int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk) ...@@ -53,15 +54,15 @@ int omap36xx_pwrdn_clk_enable_with_hsdiv_restore(struct clk_hw *clk)
/* Restore the dividers */ /* Restore the dividers */
if (!ret) { if (!ret) {
orig_v = __raw_readl(parent->reg); orig_v = omap2_clk_readl(omap_clk, parent->reg);
dummy_v = orig_v; dummy_v = orig_v;
/* Write any other value different from the Read value */ /* Write any other value different from the Read value */
dummy_v ^= (1 << parent->shift); dummy_v ^= (1 << parent->shift);
__raw_writel(dummy_v, parent->reg); omap2_clk_writel(dummy_v, omap_clk, parent->reg);
/* Write the original divider */ /* Write the original divider */
__raw_writel(orig_v, parent->reg); omap2_clk_writel(orig_v, omap_clk, parent->reg);
} }
return ret; return ret;
......
...@@ -50,10 +50,10 @@ static void _omap3_dpll_write_clken(struct clk_hw_omap *clk, u8 clken_bits) ...@@ -50,10 +50,10 @@ static void _omap3_dpll_write_clken(struct clk_hw_omap *clk, u8 clken_bits)
dd = clk->dpll_data; dd = clk->dpll_data;
v = __raw_readl(dd->control_reg); v = omap2_clk_readl(clk, dd->control_reg);
v &= ~dd->enable_mask; v &= ~dd->enable_mask;
v |= clken_bits << __ffs(dd->enable_mask); v |= clken_bits << __ffs(dd->enable_mask);
__raw_writel(v, dd->control_reg); omap2_clk_writel(v, clk, dd->control_reg);
} }
/* _omap3_wait_dpll_status: wait for a DPLL to enter a specific state */ /* _omap3_wait_dpll_status: wait for a DPLL to enter a specific state */
...@@ -69,8 +69,8 @@ static int _omap3_wait_dpll_status(struct clk_hw_omap *clk, u8 state) ...@@ -69,8 +69,8 @@ static int _omap3_wait_dpll_status(struct clk_hw_omap *clk, u8 state)
state <<= __ffs(dd->idlest_mask); state <<= __ffs(dd->idlest_mask);
while (((__raw_readl(dd->idlest_reg) & dd->idlest_mask) != state) && while (((omap2_clk_readl(clk, dd->idlest_reg) & dd->idlest_mask)
i < MAX_DPLL_WAIT_TRIES) { != state) && i < MAX_DPLL_WAIT_TRIES) {
i++; i++;
udelay(1); udelay(1);
} }
...@@ -147,7 +147,7 @@ static int _omap3_noncore_dpll_lock(struct clk_hw_omap *clk) ...@@ -147,7 +147,7 @@ static int _omap3_noncore_dpll_lock(struct clk_hw_omap *clk)
state <<= __ffs(dd->idlest_mask); state <<= __ffs(dd->idlest_mask);
/* Check if already locked */ /* Check if already locked */
if ((__raw_readl(dd->idlest_reg) & dd->idlest_mask) == state) if ((omap2_clk_readl(clk, dd->idlest_reg) & dd->idlest_mask) == state)
goto done; goto done;
ai = omap3_dpll_autoidle_read(clk); ai = omap3_dpll_autoidle_read(clk);
...@@ -311,14 +311,14 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel) ...@@ -311,14 +311,14 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel)
* only since freqsel field is no longer present on other devices. * only since freqsel field is no longer present on other devices.
*/ */
if (cpu_is_omap343x()) { if (cpu_is_omap343x()) {
v = __raw_readl(dd->control_reg); v = omap2_clk_readl(clk, dd->control_reg);
v &= ~dd->freqsel_mask; v &= ~dd->freqsel_mask;
v |= freqsel << __ffs(dd->freqsel_mask); v |= freqsel << __ffs(dd->freqsel_mask);
__raw_writel(v, dd->control_reg); omap2_clk_writel(v, clk, dd->control_reg);
} }
/* Set DPLL multiplier, divider */ /* Set DPLL multiplier, divider */
v = __raw_readl(dd->mult_div1_reg); v = omap2_clk_readl(clk, dd->mult_div1_reg);
v &= ~(dd->mult_mask | dd->div1_mask); v &= ~(dd->mult_mask | dd->div1_mask);
v |= dd->last_rounded_m << __ffs(dd->mult_mask); v |= dd->last_rounded_m << __ffs(dd->mult_mask);
v |= (dd->last_rounded_n - 1) << __ffs(dd->div1_mask); v |= (dd->last_rounded_n - 1) << __ffs(dd->div1_mask);
...@@ -336,11 +336,11 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel) ...@@ -336,11 +336,11 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel)
v |= sd_div << __ffs(dd->sddiv_mask); v |= sd_div << __ffs(dd->sddiv_mask);
} }
__raw_writel(v, dd->mult_div1_reg); omap2_clk_writel(v, clk, dd->mult_div1_reg);
/* Set 4X multiplier and low-power mode */ /* Set 4X multiplier and low-power mode */
if (dd->m4xen_mask || dd->lpmode_mask) { if (dd->m4xen_mask || dd->lpmode_mask) {
v = __raw_readl(dd->control_reg); v = omap2_clk_readl(clk, dd->control_reg);
if (dd->m4xen_mask) { if (dd->m4xen_mask) {
if (dd->last_rounded_m4xen) if (dd->last_rounded_m4xen)
...@@ -356,7 +356,7 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel) ...@@ -356,7 +356,7 @@ static int omap3_noncore_dpll_program(struct clk_hw_omap *clk, u16 freqsel)
v &= ~dd->lpmode_mask; v &= ~dd->lpmode_mask;
} }
__raw_writel(v, dd->control_reg); omap2_clk_writel(v, clk, dd->control_reg);
} }
/* We let the clock framework set the other output dividers later */ /* We let the clock framework set the other output dividers later */
...@@ -554,7 +554,7 @@ u32 omap3_dpll_autoidle_read(struct clk_hw_omap *clk) ...@@ -554,7 +554,7 @@ u32 omap3_dpll_autoidle_read(struct clk_hw_omap *clk)
if (!dd->autoidle_reg) if (!dd->autoidle_reg)
return -EINVAL; return -EINVAL;
v = __raw_readl(dd->autoidle_reg); v = omap2_clk_readl(clk, dd->autoidle_reg);
v &= dd->autoidle_mask; v &= dd->autoidle_mask;
v >>= __ffs(dd->autoidle_mask); v >>= __ffs(dd->autoidle_mask);
...@@ -588,10 +588,10 @@ void omap3_dpll_allow_idle(struct clk_hw_omap *clk) ...@@ -588,10 +588,10 @@ void omap3_dpll_allow_idle(struct clk_hw_omap *clk)
* by writing 0x5 instead of 0x1. Add some mechanism to * by writing 0x5 instead of 0x1. Add some mechanism to
* optionally enter this mode. * optionally enter this mode.
*/ */
v = __raw_readl(dd->autoidle_reg); v = omap2_clk_readl(clk, dd->autoidle_reg);
v &= ~dd->autoidle_mask; v &= ~dd->autoidle_mask;
v |= DPLL_AUTOIDLE_LOW_POWER_STOP << __ffs(dd->autoidle_mask); v |= DPLL_AUTOIDLE_LOW_POWER_STOP << __ffs(dd->autoidle_mask);
__raw_writel(v, dd->autoidle_reg); omap2_clk_writel(v, clk, dd->autoidle_reg);
} }
...@@ -614,10 +614,10 @@ void omap3_dpll_deny_idle(struct clk_hw_omap *clk) ...@@ -614,10 +614,10 @@ void omap3_dpll_deny_idle(struct clk_hw_omap *clk)
if (!dd->autoidle_reg) if (!dd->autoidle_reg)
return; return;
v = __raw_readl(dd->autoidle_reg); v = omap2_clk_readl(clk, dd->autoidle_reg);
v &= ~dd->autoidle_mask; v &= ~dd->autoidle_mask;
v |= DPLL_AUTOIDLE_DISABLE << __ffs(dd->autoidle_mask); v |= DPLL_AUTOIDLE_DISABLE << __ffs(dd->autoidle_mask);
__raw_writel(v, dd->autoidle_reg); omap2_clk_writel(v, clk, dd->autoidle_reg);
} }
...@@ -639,6 +639,9 @@ unsigned long omap3_clkoutx2_recalc(struct clk_hw *hw, ...@@ -639,6 +639,9 @@ unsigned long omap3_clkoutx2_recalc(struct clk_hw *hw,
struct clk_hw_omap *pclk = NULL; struct clk_hw_omap *pclk = NULL;
struct clk *parent; struct clk *parent;
if (!parent_rate)
return 0;
/* Walk up the parents of clk, looking for a DPLL */ /* Walk up the parents of clk, looking for a DPLL */
do { do {
do { do {
...@@ -660,7 +663,7 @@ unsigned long omap3_clkoutx2_recalc(struct clk_hw *hw, ...@@ -660,7 +663,7 @@ unsigned long omap3_clkoutx2_recalc(struct clk_hw *hw,
WARN_ON(!dd->enable_mask); WARN_ON(!dd->enable_mask);
v = __raw_readl(dd->control_reg) & dd->enable_mask; v = omap2_clk_readl(pclk, dd->control_reg) & dd->enable_mask;
v >>= __ffs(dd->enable_mask); v >>= __ffs(dd->enable_mask);
if ((v != OMAP3XXX_EN_DPLL_LOCKED) || (dd->flags & DPLL_J_TYPE)) if ((v != OMAP3XXX_EN_DPLL_LOCKED) || (dd->flags & DPLL_J_TYPE))
rate = parent_rate; rate = parent_rate;
......
...@@ -42,7 +42,7 @@ int omap4_dpllmx_gatectrl_read(struct clk_hw_omap *clk) ...@@ -42,7 +42,7 @@ int omap4_dpllmx_gatectrl_read(struct clk_hw_omap *clk)
OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK : OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :
OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK; OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK;
v = __raw_readl(clk->clksel_reg); v = omap2_clk_readl(clk, clk->clksel_reg);
v &= mask; v &= mask;
v >>= __ffs(mask); v >>= __ffs(mask);
...@@ -61,10 +61,10 @@ void omap4_dpllmx_allow_gatectrl(struct clk_hw_omap *clk) ...@@ -61,10 +61,10 @@ void omap4_dpllmx_allow_gatectrl(struct clk_hw_omap *clk)
OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK : OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :
OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK; OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK;
v = __raw_readl(clk->clksel_reg); v = omap2_clk_readl(clk, clk->clksel_reg);
/* Clear the bit to allow gatectrl */ /* Clear the bit to allow gatectrl */
v &= ~mask; v &= ~mask;
__raw_writel(v, clk->clksel_reg); omap2_clk_writel(v, clk, clk->clksel_reg);
} }
void omap4_dpllmx_deny_gatectrl(struct clk_hw_omap *clk) void omap4_dpllmx_deny_gatectrl(struct clk_hw_omap *clk)
...@@ -79,10 +79,10 @@ void omap4_dpllmx_deny_gatectrl(struct clk_hw_omap *clk) ...@@ -79,10 +79,10 @@ void omap4_dpllmx_deny_gatectrl(struct clk_hw_omap *clk)
OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK : OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :
OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK; OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK;
v = __raw_readl(clk->clksel_reg); v = omap2_clk_readl(clk, clk->clksel_reg);
/* Set the bit to deny gatectrl */ /* Set the bit to deny gatectrl */
v |= mask; v |= mask;
__raw_writel(v, clk->clksel_reg); omap2_clk_writel(v, clk, clk->clksel_reg);
} }
const struct clk_hw_omap_ops clkhwops_omap4_dpllmx = { const struct clk_hw_omap_ops clkhwops_omap4_dpllmx = {
...@@ -140,7 +140,7 @@ unsigned long omap4_dpll_regm4xen_recalc(struct clk_hw *hw, ...@@ -140,7 +140,7 @@ unsigned long omap4_dpll_regm4xen_recalc(struct clk_hw *hw,
rate = omap2_get_dpll_rate(clk); rate = omap2_get_dpll_rate(clk);
/* regm4xen adds a multiplier of 4 to DPLL calculations */ /* regm4xen adds a multiplier of 4 to DPLL calculations */
v = __raw_readl(dd->control_reg); v = omap2_clk_readl(clk, dd->control_reg);
if (v & OMAP4430_DPLL_REGM4XEN_MASK) if (v & OMAP4430_DPLL_REGM4XEN_MASK)
rate *= OMAP4430_REGM4XEN_MULT; rate *= OMAP4430_REGM4XEN_MULT;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment