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

Commit 9bf5b2ef authored by Russell King's avatar Russell King
Browse files

ARM: Indirect round/set_rate operations through clk structure

parent 3081e43b
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -71,6 +71,12 @@ static void impd1_setvco(struct clk *clk, struct icst_vco vco)
#endif
#endif
}
}


static const struct clk_ops impd1_clk_ops = {
	.round	= icst_clk_round,
	.set	= icst_clk_set,
	.setvco	= impd1_setvco,
};

void impd1_tweak_control(struct device *dev, u32 mask, u32 val)
void impd1_tweak_control(struct device *dev, u32 mask, u32 val)
{
{
	struct impd1_module *impd1 = dev_get_drvdata(dev);
	struct impd1_module *impd1 = dev_get_drvdata(dev);
@@ -366,10 +372,10 @@ static int impd1_probe(struct lm_device *dev)
		(unsigned long)dev->resource.start);
		(unsigned long)dev->resource.start);


	for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++) {
	for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++) {
		impd1->vcos[i].ops = &impd1_clk_ops,
		impd1->vcos[i].owner = THIS_MODULE,
		impd1->vcos[i].owner = THIS_MODULE,
		impd1->vcos[i].params = &impd1_vco_params,
		impd1->vcos[i].params = &impd1_vco_params,
		impd1->vcos[i].data = impd1,
		impd1->vcos[i].data = impd1;
		impd1->vcos[i].setvco = impd1_setvco;
	}
	}
	impd1->vcos[0].vcoreg = impd1->base + IMPD1_OSC1;
	impd1->vcos[0].vcoreg = impd1->base + IMPD1_OSC1;
	impd1->vcos[1].vcoreg = impd1->base + IMPD1_OSC2;
	impd1->vcos[1].vcoreg = impd1->base + IMPD1_OSC2;
+2 −2
Original line number Original line Diff line number Diff line
@@ -2,14 +2,14 @@
#define __ASM_MACH_CLKDEV_H
#define __ASM_MACH_CLKDEV_H


#include <linux/module.h>
#include <linux/module.h>
#include <asm/hardware/icst.h>
#include <plat/clock.h>


struct clk {
struct clk {
	unsigned long		rate;
	unsigned long		rate;
	const struct clk_ops	*ops;
	struct module		*owner;
	struct module		*owner;
	const struct icst_params *params;
	const struct icst_params *params;
	void __iomem		*vcoreg;
	void __iomem		*vcoreg;
	void			(*setvco)(struct clk *, struct icst_vco vco);
	void			*data;
	void			*data;
};
};


+7 −1
Original line number Original line Diff line number Diff line
@@ -293,10 +293,16 @@ static void cp_auxvco_set(struct clk *clk, struct icst_vco vco)
	writel(0, CM_LOCK);
	writel(0, CM_LOCK);
}
}


static const struct clk_ops cp_auxclk_ops = {
	.round	= icst_clk_round,
	.set	= icst_clk_set,
	.setvco	= cp_auxvco_set,
};

static struct clk cp_auxclk = {
static struct clk cp_auxclk = {
	.ops	= &cp_auxclk_ops,
	.params	= &cp_auxvco_params,
	.params	= &cp_auxvco_params,
	.vcoreg	= CM_AUXOSC,
	.vcoreg	= CM_AUXOSC,
	.setvco = cp_auxvco_set,
};
};


static struct clk_lookup cp_lookups[] = {
static struct clk_lookup cp_lookups[] = {
+7 −1
Original line number Original line Diff line number Diff line
@@ -281,9 +281,15 @@ static void realview_oscvco_set(struct clk *clk, struct icst_vco vco)
	writel(0, sys_lock);
	writel(0, sys_lock);
}
}


static const struct clk_ops oscvco_clk_ops = {
	.round	= icst_clk_round,
	.set	= icst_clk_set,
	.setvco	= realview_oscvco_set,
};

static struct clk oscvco_clk = {
static struct clk oscvco_clk = {
	.ops	= &oscvco_clk_ops,
	.params	= &realview_oscvco_params,
	.params	= &realview_oscvco_params,
	.setvco = realview_oscvco_set,
};
};


/*
/*
+2 −2
Original line number Original line Diff line number Diff line
#ifndef __ASM_MACH_CLKDEV_H
#ifndef __ASM_MACH_CLKDEV_H
#define __ASM_MACH_CLKDEV_H
#define __ASM_MACH_CLKDEV_H


#include <asm/hardware/icst.h>
#include <plat/clock.h>


struct clk {
struct clk {
	unsigned long		rate;
	unsigned long		rate;
	const struct clk_ops	*ops;
	const struct icst_params *params;
	const struct icst_params *params;
	void __iomem		*vcoreg;
	void __iomem		*vcoreg;
	void			(*setvco)(struct clk *, struct icst_vco vco);
};
};


#define __clk_get(clk) ({ 1; })
#define __clk_get(clk) ({ 1; })
Loading