Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d1914c7e authored by Russell King's avatar Russell King
Browse files

ARM: Make Integrator/Versatile/Reaview VCO code similar

parent f5fc0082
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -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);
+2 −1
Original line number Diff line number Diff line
@@ -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)
+5 −4
Original line number Diff line number Diff line
@@ -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,
};

+8 −8
Original line number Diff line number Diff line
@@ -271,19 +271,13 @@ static const struct icst_params realview_oscvco_params = {
static void realview_oscvco_set(struct clk *clk, struct icst_vco vco)
{
	void __iomem *sys_lock = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_LOCK_OFFSET;
	void __iomem *sys_osc;
	u32 val;

	if (machine_is_realview_pb1176())
		sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC0_OFFSET;
	else
		sys_osc = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC4_OFFSET;

	val = readl(sys_osc) & ~0x7ffff;
	val = readl(clk->vcoreg) & ~0x7ffff;
	val |= vco.v | (vco.r << 9) | (vco.s << 16);

	writel(0xa05f, sys_lock);
	writel(val, sys_osc);
	writel(val, clk->vcoreg);
	writel(0, sys_lock);
}

@@ -332,7 +326,13 @@ static struct clk_lookup lookups[] = {

static int __init clk_init(void)
{
	if (machine_is_realview_pb1176())
		oscvco_clk.vcoreg = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC0_OFFSET;
	else
		oscvco_clk.vcoreg = __io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_OSC4_OFFSET;

	clkdev_add_table(lookups, ARRAY_SIZE(lookups));

	return 0;
}
arch_initcall(clk_init);
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@
struct clk {
	unsigned long		rate;
	const struct icst_params *params;
	u32			oscoff;
	void __iomem		*vcoreg;
	void			(*setvco)(struct clk *, struct icst_vco vco);
};

Loading