Commit 0a0300dc authored by Russell King's avatar Russell King

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: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
Acked-by: default avatarEric Miao <eric.y.miao@gmail.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 92dcffb9
...@@ -99,6 +99,16 @@ void clkdev_add(struct clk_lookup *cl) ...@@ -99,6 +99,16 @@ void clkdev_add(struct clk_lookup *cl)
} }
EXPORT_SYMBOL(clkdev_add); 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_DEV_ID 20
#define MAX_CON_ID 16 #define MAX_CON_ID 16
......
...@@ -27,4 +27,7 @@ struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id, ...@@ -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_add(struct clk_lookup *cl);
void clkdev_drop(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 #endif
...@@ -142,8 +142,7 @@ void __init bcmring_amba_init(void) ...@@ -142,8 +142,7 @@ void __init bcmring_amba_init(void)
chipcHw_busInterfaceClockEnable(bus_clock); chipcHw_busInterfaceClockEnable(bus_clock);
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
struct amba_device *d = amba_devs[i]; struct amba_device *d = amba_devs[i];
......
...@@ -445,7 +445,6 @@ static void __init ep93xx_dma_clock_init(void) ...@@ -445,7 +445,6 @@ static void __init ep93xx_dma_clock_init(void)
static int __init ep93xx_clock_init(void) static int __init ep93xx_clock_init(void)
{ {
u32 value; u32 value;
int i;
value = __raw_readl(EP93XX_SYSCON_CLOCK_SET1); value = __raw_readl(EP93XX_SYSCON_CLOCK_SET1);
if (!(value & 0x00800000)) { /* PLL1 bypassed? */ if (!(value & 0x00800000)) { /* PLL1 bypassed? */
...@@ -474,8 +473,7 @@ static int __init ep93xx_clock_init(void) ...@@ -474,8 +473,7 @@ static int __init ep93xx_clock_init(void)
clk_f.rate / 1000000, clk_h.rate / 1000000, clk_f.rate / 1000000, clk_h.rate / 1000000,
clk_p.rate / 1000000); clk_p.rate / 1000000);
for (i = 0; i < ARRAY_SIZE(clocks); i++) clkdev_add_table(clocks, ARRAY_SIZE(clocks));
clkdev_add(&clocks[i]);
return 0; return 0;
} }
arch_initcall(ep93xx_clock_init); arch_initcall(ep93xx_clock_init);
...@@ -144,8 +144,7 @@ static int __init integrator_init(void) ...@@ -144,8 +144,7 @@ static int __init integrator_init(void)
{ {
int i; int i;
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
struct amba_device *d = amba_devs[i]; struct amba_device *d = amba_devs[i];
......
...@@ -558,9 +558,7 @@ static void __init intcp_init(void) ...@@ -558,9 +558,7 @@ static void __init intcp_init(void)
{ {
int i; int i;
for (i = 0; i < ARRAY_SIZE(cp_lookups); i++) clkdev_add_table(cp_lookups, ARRAY_SIZE(cp_lookups));
clkdev_add(&cp_lookups[i]);
platform_add_devices(intcp_devs, ARRAY_SIZE(intcp_devs)); platform_add_devices(intcp_devs, ARRAY_SIZE(intcp_devs));
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
......
...@@ -88,11 +88,3 @@ unsigned long clk_get_rate(struct clk *clk) ...@@ -88,11 +88,3 @@ unsigned long clk_get_rate(struct clk *clk)
return rate; return rate;
} }
EXPORT_SYMBOL(clk_get_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 = { \ ...@@ -68,5 +68,3 @@ struct clk clk_##_name = { \
extern struct clk clk_pxa168_gpio; extern struct clk clk_pxa168_gpio;
extern struct clk clk_pxa168_timers; 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) ...@@ -94,7 +94,7 @@ static int __init pxa168_init(void)
mfp_init_base(MFPR_VIRT_BASE); mfp_init_base(MFPR_VIRT_BASE);
mfp_init_addr(pxa168_mfp_addr_map); mfp_init_addr(pxa168_mfp_addr_map);
pxa_init_dma(IRQ_PXA168_DMA_INT0, 32); 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; return 0;
......
...@@ -131,7 +131,7 @@ static int __init pxa910_init(void) ...@@ -131,7 +131,7 @@ static int __init pxa910_init(void)
mfp_init_base(MFPR_VIRT_BASE); mfp_init_base(MFPR_VIRT_BASE);
mfp_init_addr(pxa910_mfp_addr_map); mfp_init_addr(pxa910_mfp_addr_map);
pxa_init_dma(IRQ_PXA910_DMA_INT0, 32); 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; return 0;
......
...@@ -570,7 +570,6 @@ static struct clk_lookup lookups[] __initdata = { ...@@ -570,7 +570,6 @@ static struct clk_lookup lookups[] __initdata = {
int __init mx1_clocks_init(unsigned long fref) int __init mx1_clocks_init(unsigned long fref)
{ {
unsigned int reg; unsigned int reg;
int i;
/* disable clocks we are able to */ /* disable clocks we are able to */
__raw_writel(0, SCM_GCCR); __raw_writel(0, SCM_GCCR);
...@@ -592,8 +591,7 @@ int __init mx1_clocks_init(unsigned long fref) ...@@ -592,8 +591,7 @@ int __init mx1_clocks_init(unsigned long fref)
reg = (reg & CCM_CSCR_CLKO_MASK) >> CCM_CSCR_CLKO_OFFSET; reg = (reg & CCM_CSCR_CLKO_MASK) >> CCM_CSCR_CLKO_OFFSET;
clko_clk.parent = (struct clk *)clko_clocks[reg]; clko_clk.parent = (struct clk *)clko_clocks[reg];
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
clk_enable(&hclk); clk_enable(&hclk);
clk_enable(&fclk); clk_enable(&fclk);
......
...@@ -968,7 +968,6 @@ static struct clk_lookup lookups[] = { ...@@ -968,7 +968,6 @@ static struct clk_lookup lookups[] = {
*/ */
int __init mx21_clocks_init(unsigned long lref, unsigned long href) int __init mx21_clocks_init(unsigned long lref, unsigned long href)
{ {
int i;
u32 cscr; u32 cscr;
external_low_reference = lref; external_low_reference = lref;
...@@ -986,8 +985,7 @@ int __init mx21_clocks_init(unsigned long lref, unsigned long href) ...@@ -986,8 +985,7 @@ int __init mx21_clocks_init(unsigned long lref, unsigned long href)
else else
spll_clk.parent = &fpm_clk; spll_clk.parent = &fpm_clk;
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
/* Turn off all clock gates */ /* Turn off all clock gates */
__raw_writel(0, CCM_PCCR0); __raw_writel(0, CCM_PCCR0);
......
...@@ -719,7 +719,6 @@ static void __init to2_adjust_clocks(void) ...@@ -719,7 +719,6 @@ static void __init to2_adjust_clocks(void)
int __init mx27_clocks_init(unsigned long fref) int __init mx27_clocks_init(unsigned long fref)
{ {
u32 cscr = __raw_readl(CCM_CSCR); u32 cscr = __raw_readl(CCM_CSCR);
int i;
external_high_reference = fref; external_high_reference = fref;
...@@ -736,8 +735,7 @@ int __init mx27_clocks_init(unsigned long fref) ...@@ -736,8 +735,7 @@ int __init mx27_clocks_init(unsigned long fref)
to2_adjust_clocks(); to2_adjust_clocks();
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
/* Turn off all clocks we do not need */ /* Turn off all clocks we do not need */
__raw_writel(0, CCM_PCCR0); __raw_writel(0, CCM_PCCR0);
......
...@@ -210,11 +210,7 @@ static struct clk_lookup lookups[] = { ...@@ -210,11 +210,7 @@ static struct clk_lookup lookups[] = {
int __init mx25_clocks_init(unsigned long fref) int __init mx25_clocks_init(unsigned long fref)
{ {
int i; clkdev_add_table(lookups, ARRAY_SIZE(lookups));
for (i = 0; i < ARRAY_SIZE(lookups); i++)
clkdev_add(&lookups[i]);
mxc_timer_init(&gpt_clk, MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), 54); mxc_timer_init(&gpt_clk, MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), 54);
return 0; return 0;
......
...@@ -485,15 +485,13 @@ static struct clk_lookup lookups[] = { ...@@ -485,15 +485,13 @@ static struct clk_lookup lookups[] = {
int __init mx35_clocks_init() int __init mx35_clocks_init()
{ {
int i;
unsigned int ll = 0; unsigned int ll = 0;
#if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_ICEDCC) #if defined(CONFIG_DEBUG_LL) && !defined(CONFIG_DEBUG_ICEDCC)
ll = (3 << 16); ll = (3 << 16);
#endif #endif
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
/* Turn off all clocks except the ones we need to survive, namely: /* Turn off all clocks except the ones we need to survive, namely:
* EMI, GPIO1/2/3, GPT, IOMUX, MAX and eventually uart * EMI, GPIO1/2/3, GPT, IOMUX, MAX and eventually uart
......
...@@ -578,12 +578,10 @@ static struct clk_lookup lookups[] = { ...@@ -578,12 +578,10 @@ static struct clk_lookup lookups[] = {
int __init mx31_clocks_init(unsigned long fref) int __init mx31_clocks_init(unsigned long fref)
{ {
u32 reg; u32 reg;
int i;
ckih_rate = fref; ckih_rate = fref;
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
/* change the csi_clk parent if necessary */ /* change the csi_clk parent if necessary */
reg = __raw_readl(MXC_CCM_CCMR); reg = __raw_readl(MXC_CCM_CCMR);
......
...@@ -624,7 +624,6 @@ static struct clk_lookup lookups[] = { ...@@ -624,7 +624,6 @@ static struct clk_lookup lookups[] = {
int __init mxc91231_clocks_init(unsigned long fref) int __init mxc91231_clocks_init(unsigned long fref)
{ {
void __iomem *gpt_base; void __iomem *gpt_base;
int i;
ckih_rate = fref; ckih_rate = fref;
...@@ -632,8 +631,7 @@ int __init mxc91231_clocks_init(unsigned long 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[0].parent = clk_sdhc_parent(&sdhc_clk[0]);
sdhc_clk[1].parent = clk_sdhc_parent(&sdhc_clk[1]); sdhc_clk[1].parent = clk_sdhc_parent(&sdhc_clk[1]);
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
gpt_base = MXC91231_IO_ADDRESS(MXC91231_GPT1_BASE_ADDR); gpt_base = MXC91231_IO_ADDRESS(MXC91231_GPT1_BASE_ADDR);
mxc_timer_init(&gpt_clk, gpt_base, MXC91231_INT_GPT); mxc_timer_init(&gpt_clk, gpt_base, MXC91231_INT_GPT);
......
...@@ -78,11 +78,3 @@ const struct clkops clk_cken_ops = { ...@@ -78,11 +78,3 @@ const struct clkops clk_cken_ops = {
.enable = clk_cken_enable, .enable = clk_cken_enable,
.disable = clk_cken_disable, .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 *); ...@@ -67,7 +67,3 @@ extern void clk_pxa3xx_cken_enable(struct clk *);
extern void clk_pxa3xx_cken_disable(struct clk *); extern void clk_pxa3xx_cken_disable(struct clk *);
#endif #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[] = { ...@@ -128,6 +128,6 @@ static struct clk_lookup eseries_clkregs[] = {
void eseries_register_clks(void) 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) ...@@ -349,7 +349,7 @@ static int __init pxa25x_init(void)
reset_status = RCSR; 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))) if ((ret = pxa_init_dma(IRQ_DMA, 16)))
return ret; return ret;
...@@ -370,7 +370,7 @@ static int __init pxa25x_init(void) ...@@ -370,7 +370,7 @@ static int __init pxa25x_init(void)
/* Only add HWUART for PXA255/26x; PXA210/250 do not have it. */ /* Only add HWUART for PXA255/26x; PXA210/250 do not have it. */
if (cpu_is_pxa255()) if (cpu_is_pxa255())
clks_register(&pxa25x_hwuart_clkreg, 1); clkdev_add(&pxa25x_hwuart_clkreg);
return ret; return ret;
} }
......
...@@ -392,7 +392,7 @@ static int __init pxa27x_init(void) ...@@ -392,7 +392,7 @@ static int __init pxa27x_init(void)
reset_status = RCSR; 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))) if ((ret = pxa_init_dma(IRQ_DMA, 32)))
return ret; return ret;
......
...@@ -102,12 +102,12 @@ static int __init pxa300_init(void) ...@@ -102,12 +102,12 @@ static int __init pxa300_init(void)
if (cpu_is_pxa300() || cpu_is_pxa310()) { if (cpu_is_pxa300() || cpu_is_pxa310()) {
mfp_init_base(io_p2v(MFPR_BASE)); mfp_init_base(io_p2v(MFPR_BASE));
mfp_init_addr(pxa300_mfp_addr_map); 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()) { if (cpu_is_pxa310()) {
mfp_init_addr(pxa310_mfp_addr_map); mfp_init_addr(pxa310_mfp_addr_map);
clks_register(ARRAY_AND_SIZE(pxa310_clkregs)); clkdev_add_table(ARRAY_AND_SIZE(pxa310_clkregs));
} }
return 0; return 0;
......
...@@ -90,7 +90,7 @@ static int __init pxa320_init(void) ...@@ -90,7 +90,7 @@ static int __init pxa320_init(void)
if (cpu_is_pxa320()) { if (cpu_is_pxa320()) {
mfp_init_base(io_p2v(MFPR_BASE)); mfp_init_base(io_p2v(MFPR_BASE));
mfp_init_addr(pxa320_mfp_addr_map); mfp_init_addr(pxa320_mfp_addr_map);
clks_register(ARRAY_AND_SIZE(pxa320_clkregs)); clkdev_add_table(ARRAY_AND_SIZE(pxa320_clkregs));
} }
return 0; return 0;
......
...@@ -634,7 +634,7 @@ static int __init pxa3xx_init(void) ...@@ -634,7 +634,7 @@ static int __init pxa3xx_init(void)
*/ */
ASCR &= ~(ASCR_RDH | ASCR_D1S | ASCR_D2S | ASCR_D3S); 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))) if ((ret = pxa_init_dma(IRQ_DMA, 32)))
return ret; return ret;
......
...@@ -346,10 +346,7 @@ static struct clk_lookup lookups[] = { ...@@ -346,10 +346,7 @@ static struct clk_lookup lookups[] = {
static int __init clk_init(void) static int __init clk_init(void)
{ {
int i; clkdev_add_table(lookups, ARRAY_SIZE(lookups));
for (i = 0; i < ARRAY_SIZE(lookups); i++)
clkdev_add(&lookups[i]);
return 0; return 0;
} }
arch_initcall(clk_init); arch_initcall(clk_init);
......
...@@ -1276,11 +1276,8 @@ static struct clk_lookup lookups[] = { ...@@ -1276,11 +1276,8 @@ static struct clk_lookup lookups[] = {
static void __init clk_register(void) static void __init clk_register(void)
{ {
int i;
/* Register the lookups */ /* Register the lookups */
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
} }
/* /*
......
...@@ -85,11 +85,8 @@ static struct clk_lookup lookups[] = { ...@@ -85,11 +85,8 @@ static struct clk_lookup lookups[] = {
static int __init clk_init(void) static int __init clk_init(void)
{ {
int i;
/* register the clock lookups */ /* register the clock lookups */
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
return 0; return 0;
} }
arch_initcall(clk_init); arch_initcall(clk_init);
...@@ -851,8 +851,7 @@ void __init versatile_init(void) ...@@ -851,8 +851,7 @@ void __init versatile_init(void)
{ {
int i; int i;
for (i = 0; i < ARRAY_SIZE(lookups); i++) clkdev_add_table(lookups, ARRAY_SIZE(lookups));
clkdev_add(&lookups[i]);
platform_device_register(&versatile_flash_device); platform_device_register(&versatile_flash_device);
platform_device_register(&versatile_i2c_device); platform_device_register(&versatile_i2c_device);
......
...@@ -90,12 +90,3 @@ void nuc900_subclk_enable(struct clk *clk, int enable) ...@@ -90,12 +90,3 @@ void nuc900_subclk_enable(struct clk *clk, int enable)
__raw_writel(clken, W90X900_VA_CLKPWR + SUBCLK); __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 @@ ...@@ -14,7 +14,6 @@
void nuc900_clk_enable(struct clk *clk, int enable); void nuc900_clk_enable(struct clk *clk, int enable);
void nuc900_subclk_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 { struct clk {
unsigned long cken; unsigned long cken;
......
...@@ -208,6 +208,6 @@ void __init nuc900_map_io(struct map_desc *mach_desc, int mach_size) ...@@ -208,6 +208,6 @@ void __init nuc900_map_io(struct map_desc *mach_desc, int mach_size)
void __init nuc900_init_clocks(void) 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) ...@@ -1126,9 +1126,8 @@ static int __init clk_init(void)
if (ops && ops->set_parent) if (ops && ops->set_parent)
ops->set_parent(cl->clk, cl->clk->parent); ops->set_parent(cl->clk, cl->clk->parent);
} }
clkdev_add(cl);
} }
clkdev_add_table(onchip_clks, ARRAY_SIZE(onchip_clks));
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment