diff options
Diffstat (limited to 'arch/arm/mach-mmp/clock.c')
| -rw-r--r-- | arch/arm/mach-mmp/clock.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/arch/arm/mach-mmp/clock.c b/arch/arm/mach-mmp/clock.c index 2d9cc5a7122..7c6f95f2914 100644 --- a/arch/arm/mach-mmp/clock.c +++ b/arch/arm/mach-mmp/clock.c @@ -34,6 +34,21 @@ struct clkops apbc_clk_ops = { .disable = apbc_clk_disable, }; +static void apmu_clk_enable(struct clk *clk) +{ + __raw_writel(clk->enable_val, clk->clk_rst); +} + +static void apmu_clk_disable(struct clk *clk) +{ + __raw_writel(0, clk->clk_rst); +} + +struct clkops apmu_clk_ops = { + .enable = apmu_clk_enable, + .disable = apmu_clk_disable, +}; + static DEFINE_SPINLOCK(clocks_lock); int clk_enable(struct clk *clk) @@ -74,10 +89,17 @@ unsigned long clk_get_rate(struct clk *clk) } EXPORT_SYMBOL(clk_get_rate); -void clks_register(struct clk_lookup *clks, size_t num) +int clk_set_rate(struct clk *clk, unsigned long rate) { - int i; + unsigned long flags; + int ret = -EINVAL; + + if (clk->ops->setrate) { + spin_lock_irqsave(&clocks_lock, flags); + ret = clk->ops->setrate(clk, rate); + spin_unlock_irqrestore(&clocks_lock, flags); + } - for (i = 0; i < num; i++) - clkdev_add(&clks[i]); + return ret; } +EXPORT_SYMBOL(clk_set_rate); |
