diff options
Diffstat (limited to 'arch/sh/kernel/cpu/sh2a/clock-sh7201.c')
| -rw-r--r-- | arch/sh/kernel/cpu/sh2a/clock-sh7201.c | 32 | 
1 files changed, 16 insertions, 16 deletions
diff --git a/arch/sh/kernel/cpu/sh2a/clock-sh7201.c b/arch/sh/kernel/cpu/sh2a/clock-sh7201.c index b26264dc2ae..532a36c7232 100644 --- a/arch/sh/kernel/cpu/sh2a/clock-sh7201.c +++ b/arch/sh/kernel/cpu/sh2a/clock-sh7201.c @@ -22,22 +22,15 @@ static const int pll1rate[]={1,2,3,4,6,8};  static const int pfc_divisors[]={1,2,3,4,6,8,12};  #define ifc_divisors pfc_divisors -#if (CONFIG_SH_CLK_MD == 0) -#define PLL2 (4) -#elif (CONFIG_SH_CLK_MD == 2) -#define PLL2 (2) -#elif (CONFIG_SH_CLK_MD == 3) -#define PLL2 (1) -#else -#error "Illegal Clock Mode!" -#endif +static unsigned int pll2_mult;  static void master_clk_init(struct clk *clk)  { -	return 10000000 * PLL2 * pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007]; +	clk->rate = 10000000 * pll2_mult * +	       pll1rate[(__raw_readw(FREQCR) >> 8) & 0x0007];  } -static struct clk_ops sh7201_master_clk_ops = { +static struct sh_clk_ops sh7201_master_clk_ops = {  	.init		= master_clk_init,  }; @@ -47,7 +40,7 @@ static unsigned long module_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7201_module_clk_ops = { +static struct sh_clk_ops sh7201_module_clk_ops = {  	.recalc		= module_clk_recalc,  }; @@ -57,7 +50,7 @@ static unsigned long bus_clk_recalc(struct clk *clk)  	return clk->parent->rate / pfc_divisors[idx];  } -static struct clk_ops sh7201_bus_clk_ops = { +static struct sh_clk_ops sh7201_bus_clk_ops = {  	.recalc		= bus_clk_recalc,  }; @@ -67,19 +60,26 @@ static unsigned long cpu_clk_recalc(struct clk *clk)  	return clk->parent->rate / ifc_divisors[idx];  } -static struct clk_ops sh7201_cpu_clk_ops = { +static struct sh_clk_ops sh7201_cpu_clk_ops = {  	.recalc		= cpu_clk_recalc,  }; -static struct clk_ops *sh7201_clk_ops[] = { +static struct sh_clk_ops *sh7201_clk_ops[] = {  	&sh7201_master_clk_ops,  	&sh7201_module_clk_ops,  	&sh7201_bus_clk_ops,  	&sh7201_cpu_clk_ops,  }; -void __init arch_init_clk_ops(struct clk_ops **ops, int idx) +void __init arch_init_clk_ops(struct sh_clk_ops **ops, int idx)  { +	if (test_mode_pin(MODE_PIN1 | MODE_PIN0)) +		pll2_mult = 1; +	else if (test_mode_pin(MODE_PIN1)) +		pll2_mult = 2; +	else +		pll2_mult = 4; +  	if (idx < ARRAY_SIZE(sh7201_clk_ops))  		*ops = sh7201_clk_ops[idx];  }  | 
