diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/sh/kernel/cpu/clock.c | 27 | ||||
| -rw-r--r-- | arch/sh/kernel/cpu/sh3/clock-sh7709.c | 2 | ||||
| -rw-r--r-- | arch/sh/kernel/cpu/sh4/clock-sh4-202.c | 4 | ||||
| -rw-r--r-- | arch/sh/kernel/cpu/sh4/clock-sh7780.c | 2 | ||||
| -rw-r--r-- | arch/sh/kernel/timers/timer-cmt.c | 4 | ||||
| -rw-r--r-- | arch/sh/kernel/timers/timer-mtu2.c | 2 | ||||
| -rw-r--r-- | arch/sh/kernel/timers/timer-tmu.c | 2 | 
7 files changed, 33 insertions, 10 deletions
| diff --git a/arch/sh/kernel/cpu/clock.c b/arch/sh/kernel/cpu/clock.c index 51ec64cdf34..abb586b1256 100644 --- a/arch/sh/kernel/cpu/clock.c +++ b/arch/sh/kernel/cpu/clock.c @@ -5,9 +5,11 @@   *   * This clock framework is derived from the OMAP version by:   * - *	Copyright (C) 2004 Nokia Corporation + *	Copyright (C) 2004 - 2005 Nokia Corporation   *	Written by Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com>   * + *  Modified for omap shared clock framework by Tony Lindgren <tony@atomide.com> + *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive   * for more details. @@ -20,6 +22,7 @@  #include <linux/kref.h>  #include <linux/seq_file.h>  #include <linux/err.h> +#include <linux/platform_device.h>  #include <asm/clock.h>  #include <asm/timer.h> @@ -195,17 +198,37 @@ void clk_recalc_rate(struct clk *clk)  		propagate_rate(clk);  } -struct clk *clk_get(const char *id) +/* + * Returns a clock. Note that we first try to use device id on the bus + * and clock name. If this fails, we try to use clock name only. + */ +struct clk *clk_get(struct device *dev, const char *id)  {  	struct clk *p, *clk = ERR_PTR(-ENOENT); +	int idno; + +	if (dev == NULL || dev->bus != &platform_bus_type) +		idno = -1; +	else +		idno = to_platform_device(dev)->id;  	mutex_lock(&clock_list_sem);  	list_for_each_entry(p, &clock_list, node) { +		if (p->id == idno && +		    strcmp(id, p->name) == 0 && try_module_get(p->owner)) { +			clk = p; +			goto found; +		} +	} + +	list_for_each_entry(p, &clock_list, node) {  		if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {  			clk = p;  			break;  		}  	} + +found:  	mutex_unlock(&clock_list_sem);  	return clk; diff --git a/arch/sh/kernel/cpu/sh3/clock-sh7709.c b/arch/sh/kernel/cpu/sh3/clock-sh7709.c index 10461a745e5..b791a29fdb6 100644 --- a/arch/sh/kernel/cpu/sh3/clock-sh7709.c +++ b/arch/sh/kernel/cpu/sh3/clock-sh7709.c @@ -24,7 +24,7 @@ static int pfc_divisors[]    = { 1, 2, 4, 1, 3, 6, 1, 1 };  static void set_bus_parent(struct clk *clk)  { -	struct clk *bus_clk = clk_get("bus_clk"); +	struct clk *bus_clk = clk_get(NULL, "bus_clk");  	clk->parent = bus_clk;  	clk_put(bus_clk);  } diff --git a/arch/sh/kernel/cpu/sh4/clock-sh4-202.c b/arch/sh/kernel/cpu/sh4/clock-sh4-202.c index bfdf5fe8d94..fa2019aabd7 100644 --- a/arch/sh/kernel/cpu/sh4/clock-sh4-202.c +++ b/arch/sh/kernel/cpu/sh4/clock-sh4-202.c @@ -97,7 +97,7 @@ static void shoc_clk_recalc(struct clk *clk)  static int shoc_clk_verify_rate(struct clk *clk, unsigned long rate)  { -	struct clk *bclk = clk_get("bus_clk"); +	struct clk *bclk = clk_get(NULL, "bus_clk");  	unsigned long bclk_rate = clk_get_rate(bclk);  	clk_put(bclk); @@ -151,7 +151,7 @@ static struct clk *sh4202_onchip_clocks[] = {  static int __init sh4202_clk_init(void)  { -	struct clk *clk = clk_get("master_clk"); +	struct clk *clk = clk_get(NULL, "master_clk");  	int i;  	for (i = 0; i < ARRAY_SIZE(sh4202_onchip_clocks); i++) { diff --git a/arch/sh/kernel/cpu/sh4/clock-sh7780.c b/arch/sh/kernel/cpu/sh4/clock-sh7780.c index 93ad367342c..9e6a216750c 100644 --- a/arch/sh/kernel/cpu/sh4/clock-sh7780.c +++ b/arch/sh/kernel/cpu/sh4/clock-sh7780.c @@ -98,7 +98,7 @@ static struct clk *sh7780_onchip_clocks[] = {  static int __init sh7780_clk_init(void)  { -	struct clk *clk = clk_get("master_clk"); +	struct clk *clk = clk_get(NULL, "master_clk");  	int i;  	for (i = 0; i < ARRAY_SIZE(sh7780_onchip_clocks); i++) { diff --git a/arch/sh/kernel/timers/timer-cmt.c b/arch/sh/kernel/timers/timer-cmt.c index 95581dccbbf..a574b93a4e7 100644 --- a/arch/sh/kernel/timers/timer-cmt.c +++ b/arch/sh/kernel/timers/timer-cmt.c @@ -124,7 +124,7 @@ static void cmt_clk_init(struct clk *clk)  	u8 divisor = CMT_CMCSR_INIT & 0x3;  	ctrl_inw(CMT_CMCSR_0);  	ctrl_outw(CMT_CMCSR_INIT, CMT_CMCSR_0); -	clk->parent = clk_get("module_clk"); +	clk->parent = clk_get(NULL, "module_clk");  	clk->rate = clk->parent->rate / (8 << (divisor << 1));  } @@ -164,7 +164,7 @@ static int cmt_timer_init(void)  	setup_irq(CONFIG_SH_TIMER_IRQ, &cmt_irq); -	cmt0_clk.parent = clk_get("module_clk"); +	cmt0_clk.parent = clk_get(NULL, "module_clk");  	cmt_timer_stop(); diff --git a/arch/sh/kernel/timers/timer-mtu2.c b/arch/sh/kernel/timers/timer-mtu2.c index 201f0a62132..fffcd1c0987 100644 --- a/arch/sh/kernel/timers/timer-mtu2.c +++ b/arch/sh/kernel/timers/timer-mtu2.c @@ -161,7 +161,7 @@ static int mtu2_timer_init(void)  	setup_irq(CONFIG_SH_TIMER_IRQ, &mtu2_irq); -	mtu2_clk1.parent = clk_get("module_clk"); +	mtu2_clk1.parent = clk_get(NULL, "module_clk");  	ctrl_outb(ctrl_inb(STBCR3) & (~0x20), STBCR3); diff --git a/arch/sh/kernel/timers/timer-tmu.c b/arch/sh/kernel/timers/timer-tmu.c index b9ed8a38755..e060e71d078 100644 --- a/arch/sh/kernel/timers/timer-tmu.c +++ b/arch/sh/kernel/timers/timer-tmu.c @@ -144,7 +144,7 @@ static int tmu_timer_init(void)  	setup_irq(CONFIG_SH_TIMER_IRQ, &tmu_irq); -	tmu0_clk.parent = clk_get("module_clk"); +	tmu0_clk.parent = clk_get(NULL, "module_clk");  	/* Start TMU0 */  	tmu_timer_stop(); | 
