ARM: Make Integrator/Versatile/Reaview VCO code similar

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
Russell King
2010-01-14 20:09:34 +00:00
parent f5fc00826d
commit d1914c7e75
7 changed files with 26 additions and 32 deletions

View File

@@ -55,20 +55,10 @@ static const struct icst_params impd1_vco_params = {
static void impd1_setvco(struct clk *clk, struct icst_vco vco)
{
struct impd1_module *impd1 = clk->data;
int vconr = clk - impd1->vcos;
u32 val;
val = vco.v | (vco.r << 9) | (vco.s << 16);
u32 val = vco.v | (vco.r << 9) | (vco.s << 16);
writel(0xa05f, impd1->base + IMPD1_LOCK);
switch (vconr) {
case 0:
writel(val, impd1->base + IMPD1_OSC1);
break;
case 1:
writel(val, impd1->base + IMPD1_OSC2);
break;
}
writel(val, clk->vcoreg);
writel(0, impd1->base + IMPD1_LOCK);
#ifdef DEBUG
@@ -381,6 +371,8 @@ static int impd1_probe(struct lm_device *dev)
impd1->vcos[i].data = impd1,
impd1->vcos[i].setvco = impd1_setvco;
}
impd1->vcos[0].vcoreg = impd1->base + IMPD1_OSC1;
impd1->vcos[1].vcoreg = impd1->base + IMPD1_OSC2;
impd1->clks[0] = clkdev_alloc(&impd1->vcos[0], NULL, "lm%x:01000",
dev->id);

View File

@@ -8,8 +8,9 @@ struct clk {
unsigned long rate;
struct module *owner;
const struct icst_params *params;
void *data;
void __iomem *vcoreg;
void (*setvco)(struct clk *, struct icst_vco vco);
void *data;
};
static inline int __clk_get(struct clk *clk)

View File

@@ -266,8 +266,8 @@ static void __init intcp_init_irq(void)
/*
* Clock handling
*/
#define CM_LOCK IO_ADDRESS(INTEGRATOR_HDR_LOCK)
#define CM_AUXOSC IO_ADDRESS(INTEGRATOR_HDR_BASE + 0x1c)
#define CM_LOCK (__io_address(INTEGRATOR_HDR_BASE)+INTEGRATOR_HDR_LOCK_OFFSET)
#define CM_AUXOSC (__io_address(INTEGRATOR_HDR_BASE)+0x1c)
static const struct icst_params cp_auxvco_params = {
.ref = 24000000,
@@ -285,16 +285,17 @@ static void cp_auxvco_set(struct clk *clk, struct icst_vco vco)
{
u32 val;
val = readl(CM_AUXOSC) & ~0x7ffff;
val = readl(clk->vcoreg) & ~0x7ffff;
val |= vco.v | (vco.r << 9) | (vco.s << 16);
writel(0xa05f, CM_LOCK);
writel(val, CM_AUXOSC);
writel(val, clk->vcoreg);
writel(0, CM_LOCK);
}
static struct clk cp_auxclk = {
.params = &cp_auxvco_params,
.vcoreg = CM_AUXOSC,
.setvco = cp_auxvco_set,
};