ARM: Indirect round/set_rate operations through clk structure
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
@@ -37,24 +37,38 @@ EXPORT_SYMBOL(clk_get_rate);
|
||||
|
||||
long clk_round_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
struct icst_vco vco;
|
||||
vco = icst_hz_to_vco(clk->params, rate);
|
||||
return icst_hz(clk->params, vco);
|
||||
long ret = -EIO;
|
||||
if (clk->ops && clk->ops->round)
|
||||
ret = clk->ops->round(clk, rate);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_round_rate);
|
||||
|
||||
int clk_set_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
int ret = -EIO;
|
||||
|
||||
if (clk->setvco) {
|
||||
struct icst_vco vco;
|
||||
|
||||
vco = icst_hz_to_vco(clk->params, rate);
|
||||
clk->rate = icst_hz(clk->params, vco);
|
||||
clk->setvco(clk, vco);
|
||||
ret = 0;
|
||||
}
|
||||
if (clk->ops && clk->ops->set)
|
||||
ret = clk->ops->set(clk, rate);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_set_rate);
|
||||
|
||||
long icst_clk_round(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
struct icst_vco vco;
|
||||
vco = icst_hz_to_vco(clk->params, rate);
|
||||
return icst_hz(clk->params, vco);
|
||||
}
|
||||
EXPORT_SYMBOL(icst_clk_round);
|
||||
|
||||
int icst_clk_set(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
struct icst_vco vco;
|
||||
|
||||
vco = icst_hz_to_vco(clk->params, rate);
|
||||
clk->rate = icst_hz(clk->params, vco);
|
||||
clk->ops->setvco(clk, vco);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(icst_clk_set);
|
||||
|
15
arch/arm/plat-versatile/include/plat/clock.h
Normal file
15
arch/arm/plat-versatile/include/plat/clock.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef PLAT_CLOCK_H
|
||||
#define PLAT_CLOCK_H
|
||||
|
||||
#include <asm/hardware/icst.h>
|
||||
|
||||
struct clk_ops {
|
||||
long (*round)(struct clk *, unsigned long);
|
||||
int (*set)(struct clk *, unsigned long);
|
||||
void (*setvco)(struct clk *, struct icst_vco);
|
||||
};
|
||||
|
||||
int icst_clk_set(struct clk *, unsigned long);
|
||||
long icst_clk_round(struct clk *, unsigned long);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user