ARM: Consolidate clks_register() and similar
Most machine classes want some way to register a block of clk_lookup structures, and most do it by implementing a clks_register() type function which walks an array, or by open-coding a loop. Consolidate all this into clkdev_add_table(). Acked-by: H Hartley Sweeten <hsweeten@visionengravers.com> Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com> Acked-by: Eric Miao <eric.y.miao@gmail.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
92dcffb916
commit
0a0300dc8c
@ -99,6 +99,16 @@ void clkdev_add(struct clk_lookup *cl)
|
||||
}
|
||||
EXPORT_SYMBOL(clkdev_add);
|
||||
|
||||
void __init clkdev_add_table(struct clk_lookup *cl, size_t num)
|
||||
{
|
||||
mutex_lock(&clocks_mutex);
|
||||
while (num--) {
|
||||
list_add_tail(&cl->node, &clocks);
|
||||
cl++;
|
||||
}
|
||||
mutex_unlock(&clocks_mutex);
|
||||
}
|
||||
|
||||
#define MAX_DEV_ID 20
|
||||
#define MAX_CON_ID 16
|
||||
|
||||
|
@ -27,4 +27,7 @@ struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id,
|
||||
void clkdev_add(struct clk_lookup *cl);
|
||||
void clkdev_drop(struct clk_lookup *cl);
|
||||
|
||||
void clkdev_add_table(struct clk_lookup *, size_t);
|
||||
int clk_add_alias(const char *, const char *, char *, struct device *);
|
||||
|
||||
#endif
|
||||
|
@ -142,8 +142,7 @@ void __init bcmring_amba_init(void)
|
||||
|
||||
chipcHw_busInterfaceClockEnable(bus_clock);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
|
||||
struct amba_device *d = amba_devs[i];
|
||||
|
@ -445,7 +445,6 @@ static void __init ep93xx_dma_clock_init(void)
|
||||
static int __init ep93xx_clock_init(void)
|
||||
{
|
||||
u32 value;
|
||||
int i;
|
||||
|
||||
value = __raw_readl(EP93XX_SYSCON_CLOCK_SET1);
|
||||
if (!(value & 0x00800000)) { /* PLL1 bypassed? */
|
||||
@ -474,8 +473,7 @@ static int __init ep93xx_clock_init(void)
|
||||
clk_f.rate / 1000000, clk_h.rate / 1000000,
|
||||
clk_p.rate / 1000000);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(clocks); i++)
|
||||
clkdev_add(&clocks[i]);
|
||||
clkdev_add_table(clocks, ARRAY_SIZE(clocks));
|
||||
return 0;
|
||||
}
|
||||
arch_initcall(ep93xx_clock_init);
|
||||
|
@ -144,8 +144,7 @@ static int __init integrator_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
|
||||
struct amba_device *d = amba_devs[i];
|
||||
|
@ -558,9 +558,7 @@ static void __init intcp_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(cp_lookups); i++)
|
||||
clkdev_add(&cp_lookups[i]);
|
||||
|
||||
clkdev_add_table(cp_lookups, ARRAY_SIZE(cp_lookups));
|
||||
platform_add_devices(intcp_devs, ARRAY_SIZE(intcp_devs));
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
|
||||
|
@ -88,11 +88,3 @@ unsigned long clk_get_rate(struct clk *clk)
|
||||
return rate;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_get_rate);
|
||||
|
||||
void clks_register(struct clk_lookup *clks, size_t num)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
clkdev_add(&clks[i]);
|
||||
}
|
||||
|
@ -68,5 +68,3 @@ struct clk clk_##_name = { \
|
||||
|
||||
extern struct clk clk_pxa168_gpio;
|
||||
extern struct clk clk_pxa168_timers;
|
||||
|
||||
extern void clks_register(struct clk_lookup *, size_t);
|
||||
|
@ -94,7 +94,7 @@ static int __init pxa168_init(void)
|
||||
mfp_init_base(MFPR_VIRT_BASE);
|
||||
mfp_init_addr(pxa168_mfp_addr_map);
|
||||
pxa_init_dma(IRQ_PXA168_DMA_INT0, 32);
|
||||
clks_register(ARRAY_AND_SIZE(pxa168_clkregs));
|
||||
clkdev_add_table(ARRAY_AND_SIZE(pxa168_clkregs));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -131,7 +131,7 @@ static int __init pxa910_init(void)
|
||||
mfp_init_base(MFPR_VIRT_BASE);
|
||||
mfp_init_addr(pxa910_mfp_addr_map);
|
||||
pxa_init_dma(IRQ_PXA910_DMA_INT0, 32);
|
||||
clks_register(ARRAY_AND_SIZE(pxa910_clkregs));
|
||||
clkdev_add_table(ARRAY_AND_SIZE(pxa910_clkregs));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -570,7 +570,6 @@ static struct clk_lookup lookups[] __initdata = {
|
||||
int __init mx1_clocks_init(unsigned long fref)
|
||||
{
|
||||
unsigned int reg;
|
||||
int i;
|
||||
|
||||
/* disable clocks we are able to */
|
||||
__raw_writel(0, SCM_GCCR);
|
||||
@ -592,8 +591,7 @@ int __init mx1_clocks_init(unsigned long fref)
|
||||
reg = (reg & CCM_CSCR_CLKO_MASK) >> CCM_CSCR_CLKO_OFFSET;
|
||||
clko_clk.parent = (struct clk *)clko_clocks[reg];
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
|
||||
clk_enable(&hclk);
|
||||
clk_enable(&fclk);
|
||||
|
@ -968,7 +968,6 @@ static struct clk_lookup lookups[] = {
|
||||
*/
|
||||
int __init mx21_clocks_init(unsigned long lref, unsigned long href)
|
||||
{
|
||||
int i;
|
||||
u32 cscr;
|
||||
|
||||
external_low_reference = lref;
|
||||
@ -986,8 +985,7 @@ int __init mx21_clocks_init(unsigned long lref, unsigned long href)
|
||||
else
|
||||
spll_clk.parent = &fpm_clk;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
|
||||
/* Turn off all clock gates */
|
||||
__raw_writel(0, CCM_PCCR0);
|
||||
|
@ -719,7 +719,6 @@ static void __init to2_adjust_clocks(void)
|
||||
int __init mx27_clocks_init(unsigned long fref)
|
||||
{
|
||||
u32 cscr = __raw_readl(CCM_CSCR);
|
||||
int i;
|
||||
|
||||
external_high_reference = fref;
|
||||
|
||||
@ -736,8 +735,7 @@ int __init mx27_clocks_init(unsigned long fref)
|
||||
|
||||
to2_adjust_clocks();
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
|
||||
/* Turn off all clocks we do not need */
|
||||
__raw_writel(0, CCM_PCCR0);
|
||||
|
@ -210,11 +210,7 @@ static struct clk_lookup lookups[] = {
|
||||
|
||||
int __init mx25_clocks_init(unsigned long fref)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
mxc_timer_init(&gpt_clk, MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), 54);
|
||||
|
||||
return 0;
|
||||
|
@ -485,15 +485,13 @@ static struct clk_lookup lookups[] = {
|
||||
|
||||
int __init mx35_clocks_init()
|
||||
{
|
||||
int i;
|
||||
unsigned int ll = 0;
|
||||
|
||||
#if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_ICEDCC)
|
||||
ll = (3 << 16);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
|
||||
/* Turn off all clocks except the ones we need to survive, namely:
|
||||
* EMI, GPIO1/2/3, GPT, IOMUX, MAX and eventually uart
|
||||
|
@ -578,12 +578,10 @@ static struct clk_lookup lookups[] = {
|
||||
int __init mx31_clocks_init(unsigned long fref)
|
||||
{
|
||||
u32 reg;
|
||||
int i;
|
||||
|
||||
ckih_rate = fref;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
|
||||
/* change the csi_clk parent if necessary */
|
||||
reg = __raw_readl(MXC_CCM_CCMR);
|
||||
|
@ -624,7 +624,6 @@ static struct clk_lookup lookups[] = {
|
||||
int __init mxc91231_clocks_init(unsigned long fref)
|
||||
{
|
||||
void __iomem *gpt_base;
|
||||
int i;
|
||||
|
||||
ckih_rate = fref;
|
||||
|
||||
@ -632,8 +631,7 @@ int __init mxc91231_clocks_init(unsigned long fref)
|
||||
sdhc_clk[0].parent = clk_sdhc_parent(&sdhc_clk[0]);
|
||||
sdhc_clk[1].parent = clk_sdhc_parent(&sdhc_clk[1]);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
|
||||
gpt_base = MXC91231_IO_ADDRESS(MXC91231_GPT1_BASE_ADDR);
|
||||
mxc_timer_init(&gpt_clk, gpt_base, MXC91231_INT_GPT);
|
||||
|
@ -78,11 +78,3 @@ const struct clkops clk_cken_ops = {
|
||||
.enable = clk_cken_enable,
|
||||
.disable = clk_cken_disable,
|
||||
};
|
||||
|
||||
void clks_register(struct clk_lookup *clks, size_t num)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
clkdev_add(&clks[i]);
|
||||
}
|
||||
|
@ -67,7 +67,3 @@ extern void clk_pxa3xx_cken_enable(struct clk *);
|
||||
extern void clk_pxa3xx_cken_disable(struct clk *);
|
||||
#endif
|
||||
|
||||
void clks_register(struct clk_lookup *clks, size_t num);
|
||||
int clk_add_alias(const char *alias, const char *alias_name, char *id,
|
||||
struct device *dev);
|
||||
|
||||
|
@ -128,6 +128,6 @@ static struct clk_lookup eseries_clkregs[] = {
|
||||
|
||||
void eseries_register_clks(void)
|
||||
{
|
||||
clks_register(eseries_clkregs, ARRAY_SIZE(eseries_clkregs));
|
||||
clkdev_add_table(eseries_clkregs, ARRAY_SIZE(eseries_clkregs));
|
||||
}
|
||||
|
||||
|
@ -349,7 +349,7 @@ static int __init pxa25x_init(void)
|
||||
|
||||
reset_status = RCSR;
|
||||
|
||||
clks_register(pxa25x_clkregs, ARRAY_SIZE(pxa25x_clkregs));
|
||||
clkdev_add_table(pxa25x_clkregs, ARRAY_SIZE(pxa25x_clkregs));
|
||||
|
||||
if ((ret = pxa_init_dma(IRQ_DMA, 16)))
|
||||
return ret;
|
||||
@ -370,7 +370,7 @@ static int __init pxa25x_init(void)
|
||||
|
||||
/* Only add HWUART for PXA255/26x; PXA210/250 do not have it. */
|
||||
if (cpu_is_pxa255())
|
||||
clks_register(&pxa25x_hwuart_clkreg, 1);
|
||||
clkdev_add(&pxa25x_hwuart_clkreg);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -392,7 +392,7 @@ static int __init pxa27x_init(void)
|
||||
|
||||
reset_status = RCSR;
|
||||
|
||||
clks_register(pxa27x_clkregs, ARRAY_SIZE(pxa27x_clkregs));
|
||||
clkdev_add_table(pxa27x_clkregs, ARRAY_SIZE(pxa27x_clkregs));
|
||||
|
||||
if ((ret = pxa_init_dma(IRQ_DMA, 32)))
|
||||
return ret;
|
||||
|
@ -102,12 +102,12 @@ static int __init pxa300_init(void)
|
||||
if (cpu_is_pxa300() || cpu_is_pxa310()) {
|
||||
mfp_init_base(io_p2v(MFPR_BASE));
|
||||
mfp_init_addr(pxa300_mfp_addr_map);
|
||||
clks_register(ARRAY_AND_SIZE(common_clkregs));
|
||||
clkdev_add_table(ARRAY_AND_SIZE(common_clkregs));
|
||||
}
|
||||
|
||||
if (cpu_is_pxa310()) {
|
||||
mfp_init_addr(pxa310_mfp_addr_map);
|
||||
clks_register(ARRAY_AND_SIZE(pxa310_clkregs));
|
||||
clkdev_add_table(ARRAY_AND_SIZE(pxa310_clkregs));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -90,7 +90,7 @@ static int __init pxa320_init(void)
|
||||
if (cpu_is_pxa320()) {
|
||||
mfp_init_base(io_p2v(MFPR_BASE));
|
||||
mfp_init_addr(pxa320_mfp_addr_map);
|
||||
clks_register(ARRAY_AND_SIZE(pxa320_clkregs));
|
||||
clkdev_add_table(ARRAY_AND_SIZE(pxa320_clkregs));
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -634,7 +634,7 @@ static int __init pxa3xx_init(void)
|
||||
*/
|
||||
ASCR &= ~(ASCR_RDH | ASCR_D1S | ASCR_D2S | ASCR_D3S);
|
||||
|
||||
clks_register(pxa3xx_clkregs, ARRAY_SIZE(pxa3xx_clkregs));
|
||||
clkdev_add_table(pxa3xx_clkregs, ARRAY_SIZE(pxa3xx_clkregs));
|
||||
|
||||
if ((ret = pxa_init_dma(IRQ_DMA, 32)))
|
||||
return ret;
|
||||
|
@ -346,10 +346,7 @@ static struct clk_lookup lookups[] = {
|
||||
|
||||
static int __init clk_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
return 0;
|
||||
}
|
||||
arch_initcall(clk_init);
|
||||
|
@ -1276,11 +1276,8 @@ static struct clk_lookup lookups[] = {
|
||||
|
||||
static void __init clk_register(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Register the lookups */
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -85,11 +85,8 @@ static struct clk_lookup lookups[] = {
|
||||
|
||||
static int __init clk_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* register the clock lookups */
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
return 0;
|
||||
}
|
||||
arch_initcall(clk_init);
|
||||
|
@ -851,8 +851,7 @@ void __init versatile_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lookups); i++)
|
||||
clkdev_add(&lookups[i]);
|
||||
clkdev_add_table(lookups, ARRAY_SIZE(lookups));
|
||||
|
||||
platform_device_register(&versatile_flash_device);
|
||||
platform_device_register(&versatile_i2c_device);
|
||||
|
@ -90,12 +90,3 @@ void nuc900_subclk_enable(struct clk *clk, int enable)
|
||||
|
||||
__raw_writel(clken, W90X900_VA_CLKPWR + SUBCLK);
|
||||
}
|
||||
|
||||
|
||||
void clks_register(struct clk_lookup *clks, size_t num)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
clkdev_add(&clks[i]);
|
||||
}
|
||||
|
@ -14,7 +14,6 @@
|
||||
|
||||
void nuc900_clk_enable(struct clk *clk, int enable);
|
||||
void nuc900_subclk_enable(struct clk *clk, int enable);
|
||||
void clks_register(struct clk_lookup *clks, size_t num);
|
||||
|
||||
struct clk {
|
||||
unsigned long cken;
|
||||
|
@ -208,6 +208,6 @@ void __init nuc900_map_io(struct map_desc *mach_desc, int mach_size)
|
||||
|
||||
void __init nuc900_init_clocks(void)
|
||||
{
|
||||
clks_register(nuc900_clkregs, ARRAY_SIZE(nuc900_clkregs));
|
||||
clkdev_add_table(nuc900_clkregs, ARRAY_SIZE(nuc900_clkregs));
|
||||
}
|
||||
|
||||
|
@ -1126,9 +1126,8 @@ static int __init clk_init(void)
|
||||
if (ops && ops->set_parent)
|
||||
ops->set_parent(cl->clk, cl->clk->parent);
|
||||
}
|
||||
|
||||
clkdev_add(cl);
|
||||
}
|
||||
clkdev_add_table(onchip_clks, ARRAY_SIZE(onchip_clks));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user