Skip to contentSkip to conversation

Consolidate clks_register() and similar

PATCH New Russell King - ARM Linux 6 participants 14 messages Jan 10, 2010 – Jan 12, 2010

Subsystems (10)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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().

---
This misses out Davinci, which needs cleaning up to remove its seemingly redundant wrapping of the clk_lookup structure.

 arch/arm/common/clkdev.c                 |   10 ++++++++++
 arch/arm/include/asm/clkdev.h            |    3 +++
 arch/arm/mach-bcmring/core.c             |    3 +--
 arch/arm/mach-ep93xx/clock.c             |    4 +---
 arch/arm/mach-integrator/core.c          |    3 +--
 arch/arm/mach-integrator/integrator_cp.c |    4 +---
 arch/arm/mach-mmp/clock.c                |    8 --------
 arch/arm/mach-mmp/clock.h                |    2 --
 arch/arm/mach-mmp/pxa168.c               |    2 +-
 arch/arm/mach-mmp/pxa910.c               |    2 +-
 arch/arm/mach-mx1/clock.c                |    4 +---
 arch/arm/mach-mx2/clock_imx21.c          |    4 +---
 arch/arm/mach-mx2/clock_imx27.c          |    4 +---
 arch/arm/mach-mx25/clock.c               |    6 +-----
 arch/arm/mach-mx3/clock-imx35.c          |    4 +---
 arch/arm/mach-mx3/clock.c                |    4 +---
 arch/arm/mach-mxc91231/clock.c           |    4 +---
 arch/arm/mach-pnx4008/clock.c            |    5 +----
 arch/arm/mach-pxa/clock.c                |    8 --------
 arch/arm/mach-pxa/clock.h                |    4 ----
 arch/arm/mach-pxa/eseries.c              |    2 +-
 arch/arm/mach-pxa/pxa25x.c               |    4 ++--
 arch/arm/mach-pxa/pxa27x.c               |    2 +-
 arch/arm/mach-pxa/pxa300.c               |    4 ++--
 arch/arm/mach-pxa/pxa320.c               |    2 +-
 arch/arm/mach-pxa/pxa3xx.c               |    2 +-
 arch/arm/mach-realview/core.c            |    5 +----
 arch/arm/mach-u300/clock.c               |    5 +----
 arch/arm/mach-ux500/clock.c              |    5 +----
 arch/arm/mach-versatile/core.c           |    3 +--
 arch/arm/mach-w90x900/clock.c            |    9 ---------
 arch/arm/mach-w90x900/clock.h            |    1 -
 arch/arm/mach-w90x900/cpu.c              |    2 +-
 arch/arm/plat-stmp3xxx/clock.c           |    3 +--
 34 files changed, 41 insertions(+), 96 deletions(-)
arch/arm/common/clkdev.c +10 -0
index aae5bc0..446b696 100644
@@ -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
 
arch/arm/include/asm/clkdev.h +3 -0
index b6ec7c6..7a0690d 100644
@@ -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
arch/arm/mach-bcmring/core.c +1 -2
index e590bbe..3239e04 100644
@@ -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_SIEZ(lookups));
 
 	for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
 		struct amba_device *d = amba_devs[i];
arch/arm/mach-ep93xx/clock.c +1 -3
index 1d0f9d8..bb3c621 100644
@@ -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);
arch/arm/mach-integrator/core.c +1 -2
index a0f60e5..8b390e3 100644
@@ -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];
arch/arm/mach-integrator/integrator_cp.c +1 -3
index 3f35293..66ef86d 100644
@@ -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++) {
arch/arm/mach-mmp/clock.c +0 -8
index 2a46ed5..886e056 100644
@@ -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]);
-}
arch/arm/mach-mmp/clock.h +0 -2
index eefffbe..016ae94 100644
@@ -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);
arch/arm/mach-mmp/pxa168.c +1 -1
index 37dbdde..1873c82 100644
@@ -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;
arch/arm/mach-mmp/pxa910.c +1 -1
index d404950..46f2d69 100644
@@ -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;
arch/arm/mach-mx1/clock.c +1 -3
index d1b5885..6cf2d4a 100644
@@ -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);
arch/arm/mach-mx2/clock_imx21.c +1 -3
index 91901b5..e82b489 100644
@@ -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);
arch/arm/mach-mx2/clock_imx27.c +1 -3
index b010bf9..18c53a6 100644
@@ -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);
arch/arm/mach-mx25/clock.c +1 -5
index ef26951..4499233 100644
@@ -208,11 +208,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;
arch/arm/mach-mx3/clock-imx35.c +1 -3
index 7584b4c..f3f41fa 100644
@@ -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
arch/arm/mach-mx3/clock.c +1 -3
index 27a318a..b5c39a0 100644
@@ -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);
arch/arm/mach-mxc91231/clock.c +1 -3
index ecfa37f..5c85075 100644
@@ -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);
arch/arm/mach-pnx4008/clock.c +1 -4
index a38ef66..9d1975f 100644
@@ -961,7 +961,6 @@ EXPORT_SYMBOL(clk_set_parent);
 
 static int __init clk_init(void)
 {
-	struct clk_lookup *cl;
 	struct clk **clkp;
 
 	/* Disable autoclocking, as it doesn't seem to work */
@@ -995,9 +994,7 @@ static int __init clk_init(void)
 	/* Disable autoclocking */
 	__raw_writeb(0xff, AUTOCLK_CTRL);
 
-	for (cl = onchip_clkreg;
-	     cl < onchip_clkreg + ARRAY_SIZE(onchip_clkreg); cl++)
-		clkdev_add(cl);
+	clkdev_add_table(onchip_clkreg, ARRAY_SIZE(onchip_clkreg));
 
 	return 0;
 }
arch/arm/mach-pxa/clock.c +0 -8
index 49ae382..abba008 100644
@@ -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]);
-}
arch/arm/mach-pxa/clock.h +0 -4
index 978a366..d848874 100644
@@ -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);
-
arch/arm/mach-pxa/eseries.c +1 -1
index 91417f0..96ed130 100644
@@ -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));
 }
 
arch/arm/mach-pxa/pxa25x.c +2 -2
index 2c1b0b7..0b9ad30 100644
@@ -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;
 }
arch/arm/mach-pxa/pxa27x.c +1 -1
index 6a0b731..d783123 100644
@@ -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;
arch/arm/mach-pxa/pxa300.c +2 -2
index f4af6e2..40bb165 100644
@@ -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;
arch/arm/mach-pxa/pxa320.c +1 -1
index c7373e7..8d614ec 100644
@@ -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;
arch/arm/mach-pxa/pxa3xx.c +1 -1
index fcb0721..4d7c03e 100644
@@ -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;
arch/arm/mach-realview/core.c +1 -4
index 9f29343..90bd4ef 100644
@@ -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);
arch/arm/mach-u300/clock.c +1 -4
index 111f7ea..c174ed1 100644
@@ -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));
 }
 
 /*
arch/arm/mach-ux500/clock.c +1 -4
index 20b6ebb..8359a73 100644
@@ -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);
arch/arm/mach-versatile/core.c +1 -2
index e13be7c..9ddb49b 100644
@@ -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);
arch/arm/mach-w90x900/clock.c +0 -9
index b785994..2c371ff 100644
@@ -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]);
-}
arch/arm/mach-w90x900/clock.h +0 -1
index f5816a0..c56ddab 100644
@@ -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;
arch/arm/mach-w90x900/cpu.c +1 -1
index 20dc0c9..6f5ca53 100644
@@ -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));
 }
 
arch/arm/plat-stmp3xxx/clock.c +1 -2
index 5d2f19a..e593a2a 100644
@@ -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;
 }
 
#1 lore raw

PATCH 1/1 Consolidate clks_register() and similar

Russell,

arch/arm/mach-bcmring/core.c void __init bcmring_amba_init(void) · line 145

Quoted 9 lines
arch/arm/mach-bcmring/core.c +1 -2
@@ -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_SIEZ(lookups));

SIEZ -> SIZE.

Also, perhaps a macro to simplify this common usage?

#define clkdev_add_table(clks) __clkdev_add_table(clks, ARRAY_SIZE(clks))

Cheers,

Jeremy

#2 lore raw

PATCH 1/1 Consolidate clks_register() and similar

Quoted 6 lines · Jeremy Kerr

Russell,

Quoted 4 lines
arch/arm/mach-bcmring/core.c +0 -0
@@ -142,8 +142,7 @@ void __init bcmring_amba_init(void)
 
Quoted 7 lines

arch/arm/mach-bcmring/core.c void __init bcmring_amba_init(void) · line 145

Quoted 5 lines
arch/arm/mach-bcmring/core.c +1 -2
 	chipcHw_busInterfaceClockEnable(bus_clock);
 
-	for (i = 0; i < ARRAY_SIZE(lookups); i++)
-		clkdev_add(&lookups[i]);
+	clkdev_add_table(lookups, ARRAY_SIEZ(lookups));

SIEZ -> SIZE.

Fied.

Quoted 3 lines

Also, perhaps a macro to simplify this common usage?

#define clkdev_add_table(clks) __clkdev_add_table(clks, ARRAY_SIZE(clks))

I'm not a fan of that kind of clean up - it leads people into thinking that they can pass a normal pointer instead of an array to clkdev_add_table() - and then they'll get a surprise.

PXA has ARRAY_AND_SIZE() which I think is rather nice for this kind of thing, but other people had other thoughts on that...

#3 lore raw

PATCH 1/1 Consolidate clks_register() and similar

Quoted 19 lines · Russell King - ARM Linux
Quoted 6 lines · Jeremy Kerr

Russell,

Quoted 4 lines
arch/arm/mach-bcmring/core.c +0 -0
@@ -142,8 +142,7 @@ void __init bcmring_amba_init(void)
 
Quoted 7 lines

arch/arm/mach-bcmring/core.c void __init bcmring_amba_init(void) · line 145

Quoted 5 lines
arch/arm/mach-bcmring/core.c +1 -2
 	chipcHw_busInterfaceClockEnable(bus_clock);
 
-	for (i = 0; i < ARRAY_SIZE(lookups); i++)
-		clkdev_add(&lookups[i]);
+	clkdev_add_table(lookups, ARRAY_SIEZ(lookups));

SIEZ -> SIZE.

Fied.

Quoted 2 lines

Also, perhaps a macro to simplify this common usage?

Quoted 8 lines
Quoted 1 line

#define clkdev_add_table(clks) __clkdev_add_table(clks, ARRAY_SIZE(clks))

I'm not a fan of that kind of clean up - it leads people into thinking that they can pass a normal pointer instead of an array to clkdev_add_table() - and then they'll get a surprise.

PXA has ARRAY_AND_SIZE() which I think is rather nice for this kind of thing, but other people had other thoughts on that...

I liked it, there are so many places in the kernel where this could be used that I would love to se it added...

Signature · 4 lines
Ben

Q:      What's a light-year?
A:      One-third less calories than a regular year.
#4 lore raw

PATCH 1/1 Consolidate clks_register() and similar

In reply to Russell King - ARM Linux
Quoted 8 lines · Russell King

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().

---

[snip]

Quoted 26 lines
arch/arm/common/clkdev.c +10 -0
index aae5bc0..446b696 100644
@@ -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
 
arch/arm/include/asm/clkdev.h +0 -0
index b6ec7c6..7a0690d 100644

arch/arm/include/asm/clkdev.h struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id, · line 31

Quoted 5 lines
arch/arm/include/asm/clkdev.h +2 -0
@@ -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 *);

clk_add_alias does not seem to be related to this patch.

Quoted 2 lines
arch/arm/include/asm/clkdev.h +1 -0
+
 #endif

[snip]

Quoted 13 lines
arch/arm/mach-ep93xx/clock.c +0 -1
index 1d0f9d8..bb3c621 100644
@@ -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?  */

arch/arm/mach-ep93xx/clock.c static int __init ep93xx_clock_init(void) · line 479

Quoted 9 lines
arch/arm/mach-ep93xx/clock.c +1 -2
@@ -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);

For ep93xx.

#5 lore raw

PATCH 1/1 Consolidate clks_register() and similar

Quoted 9 lines · H Hartley Sweeten
Quoted 8 lines · Russell King
arch/arm/include/asm/clkdev.h +0 -0
index b6ec7c6..7a0690d 100644
@@ -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);
 
Quoted 4 lines

arch/arm/include/asm/clkdev.h struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id, · line 31

Quoted 2 lines
arch/arm/include/asm/clkdev.h +2 -0
+void clkdev_add_table(struct clk_lookup *, size_t);
+int clk_add_alias(const char *, const char *, char *, struct device *);

clk_add_alias does not seem to be related to this patch.

True, but it might as well get cleaned up along with the rest of this. For some reason, the prototype was never moved there.

Quoted 13 lines

arch/arm/include/asm/clkdev.h static int __init ep93xx_clock_init(void) · line 479

Quoted 10 lines
arch/arm/include/asm/clkdev.h +1 -2
@@ -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);

For ep93xx.

Quoted 1 line

Thanks.

#6 lore raw

PATCH 1/1 Consolidate clks_register() and similar

In reply to Russell King - ARM Linux
Quoted 7 lines · Russell King - ARM Linux

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().

Are you planning this for 2.6.33-rc? or 2.6.34?

Quoted 3 lines

---
This misses out Davinci, which needs cleaning up to remove its seemingly redundant wrapping of the clk_lookup structure.

This should take care of davinci. Tested on v2.6.33-rc3 + $SUBJECT patch.

#7 lore raw

PATCH 1/1 Consolidate clks_register() and similar

Quoted 6 lines · Kevin Hilman
Quoted 4 lines · Russell King - ARM Linux

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.

Quoted 7 lines
Quoted 3 lines

Consolidate all this into clkdev_add_table().

Are you planning this for 2.6.33-rc? or 2.6.34?

I don't think it's -rc material (not a bug fix) so 2.6.34.

Quoted 1 line

This should take care of davinci. Tested on v2.6.33-rc3 + $SUBJECT patch.

Shall I queue this for merging after my patch, or are there likely to be conflicts in this area?

#8 lore raw

PATCH 1/1 Consolidate clks_register() and similar

On Tuesday, January 12, 2010 5:17 AM, Russell King wrote,

Quoted 9 lines · Kevin Hilman
Quoted 8 lines
Quoted 6 lines · Russell King - ARM Linux

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().

Quoted 7 lines
Quoted 5 lines
Quoted 1 line

Are you planning this for 2.6.33-rc? or 2.6.34?

I don't think it's -rc material (not a bug fix) so 2.6.34.

It's not a bug fix but due to how often people patch the various clock sources it might be better to get this is soon so that merge conflicts don't show up.

Quoted 5 lines
Quoted 2 lines

This should take care of davinci. Tested on v2.6.33-rc3 + $SUBJECT patch.

Shall I queue this for merging after my patch, or are there likely to be conflicts in this area?

BTW, arch/arm/mach-ep93xx/clock.c might need to be rebased due to you applying 5875/1 and 5879/1 to your git-curr (ep93xx branch).

Regards,
Hartley

#9 lore raw

PATCH 1/1 Consolidate clks_register() and similar

Quoted 6 lines · H Hartley Sweeten

On Tuesday, January 12, 2010 5:17 AM, Russell King wrote,

Quoted 1 line

I don't think it's -rc material (not a bug fix) so 2.6.34.

It's not a bug fix but due to how often people patch the various clock sources it might be better to get this is soon so that merge conflicts don't show up.

Things in the tables tends to change, rather than the code which sets them up. I don't think there'll be much in the way of conflicts.

Quoted 7 lines
Quoted 4 lines
Quoted 1 line

This should take care of davinci. Tested on v2.6.33-rc3 + $SUBJECT patch.

Shall I queue this for merging after my patch, or are there likely to be conflicts in this area?

BTW, arch/arm/mach-ep93xx/clock.c might need to be rebased due to you applying 5875/1 and 5879/1 to your git-curr (ep93xx branch).

It merged fine - more the problem was 5875/1 vs 5879/1 which could only be applied with GNU patch with fuzz.

#10 lore raw

PATCH 1/1 Consolidate clks_register() and similar

Quoted 10 lines · Russell King
Quoted 6 lines · H Hartley Sweeten

On Tuesday, January 12, 2010 5:17 AM, Russell King wrote,

Quoted 1 line

I don't think it's -rc material (not a bug fix) so 2.6.34.

It's not a bug fix but due to how often people patch the various clock sources it might be better to get this is soon so that merge conflicts don't show up.

Things in the tables tends to change, rather than the code which sets them up. I don't think there'll be much in the way of conflicts.

OK.

Quoted 10 lines
Quoted 7 lines
Quoted 4 lines
Quoted 1 line

This should take care of davinci. Tested on v2.6.33-rc3 + $SUBJECT patch.

Shall I queue this for merging after my patch, or are there likely to be conflicts in this area?

BTW, arch/arm/mach-ep93xx/clock.c might need to be rebased due to you applying 5875/1 and 5879/1 to your git-curr (ep93xx branch).

It merged fine - more the problem was 5875/1 vs 5879/1 which could only be applied with GNU patch with fuzz.

You must have merged you patch first. The removal of line 448:

- int i;

Probably produced a one line fuzz for both patches. Is everything ok still for those two patches?

Regards,
Hartley

#11 lore raw

PATCH 1/1 Consolidate clks_register() and similar

Quoted 1 line · H Hartley Sweeten

You must have merged you patch first. The removal of line 448:

No - the ep93xx was merged as a whole with the miscellaneous branch, resulting in no conflicts. Git is occasionally good with merging.

Quoted 4 lines
(quoted diff) +0 -1
-	int i;

Probably produced a one line fuzz for both patches. Is everything ok still for those two patches?

$ diff -u <(pdb getpatch 5879/1) <(git diff-tree -u 346e34abb2c56695ee4bd6af924141c97a0babfb )
--- /proc/self/fd/63	2010-01-12 18:53:48.958011270 +0000
+++ /proc/self/fd/62	2010-01-12 18:53:48.981135820 +0000
@@ -1,13 +1,9 @@
--------------------------------------------------------------------------------
- arch/arm/mach-ep93xx/clock.c                    |   20 ++++++++++++--------
- arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h |    7 +++++--
- 2 files changed, 17 insertions(+), 10 deletions(-)
--------------------------------------------------------------------------------
+346e34abb2c56695ee4bd6af924141c97a0babfb
 diff --git a/arch/arm/mach-ep93xx/clock.c b/arch/arm/mach-ep93xx/clock.c
-index 1d0f9d8..f77c410 100644
+index 07a58d0..27e3351 100644
 --- a/arch/arm/mach-ep93xx/clock.c
 +++ b/arch/arm/mach-ep93xx/clock.c
-@@ -447,25 +447,29 @@ static int __init ep93xx_clock_init(void)
+@@ -449,25 +449,29 @@ static int __init ep93xx_clock_init(void)
  	u32 value;
  	int i;

@@ -44,7 +40,7 @@
+ /* Initialize the pll2 derived clocks */
clk_usb_host.rate = clk_pll2.rate / (((value >> 28) & 0xf) + 1);

- printk(KERN_INFO "ep93xx: PLL1 running at %ld MHz, PLL2 at %ld MHz\n",
+ pr_info("PLL1 running at %ld MHz, PLL2 at %ld MHz\n",
diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h index d55194a..cd35912 100644
--- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h

So the only difference in the patch is the pr_info line.

#12 lore raw

PATCH 1/1 Consolidate clks_register() and similar

In reply to Russell King - ARM Linux
Quoted 9 lines · Russell King - ARM Linux
Quoted 8 lines · Kevin Hilman
Quoted 6 lines · Russell King - ARM Linux

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().

Quoted 7 lines
Quoted 5 lines
Quoted 1 line

Are you planning this for 2.6.33-rc? or 2.6.34?

I don't think it's -rc material (not a bug fix) so 2.6.34.

ok

Quoted 4 lines
Quoted 1 line

This should take care of davinci. Tested on v2.6.33-rc3 + $SUBJECT patch.

Shall I queue this for merging after my patch, or are there likely to be conflicts in this area?

There are likely to be conflicts with other davinci patches, so since it's independent from yours, I'll queue in my 2.6.34 queue along with the rest of the davinci changes.

As long as your patch is included in linux-next, there shouldn't be any problems keeping them separate.

Thanks,

Kevin

#13 lore raw

PATCH 1/1 Consolidate clks_register() and similar

In reply to Russell King - ARM Linux
Quoted 7 lines · Russell King - ARM Linux

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().

For PXA part, Acked-by: Eric Miao <[email protected]>