diff options
| author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-12-13 15:53:31 +0000 | 
|---|---|---|
| committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-12-13 15:53:31 +0000 | 
| commit | 474b9c86b0c65e9ca6a77d8b7bf132c4d5993b9c (patch) | |
| tree | 9ce213f7a268d13f8871b84f1d22c2b9ff55afcf /arch/sh/kernel | |
| parent | 49db7e7b995f5c61c5e24198f833ed01d99f5e7d (diff) | |
| parent | fdea0571ddca8e3f22448f66d72a034575abea28 (diff) | |
Merge branch 'topic/asoc' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6 into for-2.6.38
Diffstat (limited to 'arch/sh/kernel')
| -rw-r--r-- | arch/sh/kernel/cpu/sh4/clock-sh4-202.c | 2 | ||||
| -rw-r--r-- | arch/sh/kernel/cpu/sh4a/clock-sh7724.c | 44 | ||||
| -rw-r--r-- | arch/sh/kernel/sys_sh.c | 2 | ||||
| -rw-r--r-- | arch/sh/kernel/vsyscall/vsyscall-trapa.S | 2 | 
4 files changed, 42 insertions, 8 deletions
diff --git a/arch/sh/kernel/cpu/sh4/clock-sh4-202.c b/arch/sh/kernel/cpu/sh4/clock-sh4-202.c index 4eabc68cd753..b601fa3978d1 100644 --- a/arch/sh/kernel/cpu/sh4/clock-sh4-202.c +++ b/arch/sh/kernel/cpu/sh4/clock-sh4-202.c @@ -110,7 +110,7 @@ static int shoc_clk_verify_rate(struct clk *clk, unsigned long rate)  	return 0;  } -static int shoc_clk_set_rate(struct clk *clk, unsigned long rate, int algo_id) +static int shoc_clk_set_rate(struct clk *clk, unsigned long rate)  {  	unsigned long frqcr3;  	unsigned int tmp; diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7724.c b/arch/sh/kernel/cpu/sh4a/clock-sh7724.c index 0fe2e9329cb2..271c0b325a9a 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7724.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7724.c @@ -111,12 +111,21 @@ static struct clk div3_clk = {  	.parent		= &pll_clk,  }; +/* External input clock (pin name: FSIMCKA/FSIMCKB ) */ +struct clk sh7724_fsimcka_clk = { +}; + +struct clk sh7724_fsimckb_clk = { +}; +  static struct clk *main_clks[] = {  	&r_clk,  	&extal_clk,  	&fll_clk,  	&pll_clk,  	&div3_clk, +	&sh7724_fsimcka_clk, +	&sh7724_fsimckb_clk,  };  static void div4_kick(struct clk *clk) @@ -154,16 +163,38 @@ struct clk div4_clks[DIV4_NR] = {  	[DIV4_M1] = DIV4(FRQCRB, 4, 0x2f7c, CLK_ENABLE_ON_INIT),  }; -enum { DIV6_V, DIV6_FA, DIV6_FB, DIV6_I, DIV6_S, DIV6_NR }; +enum { DIV6_V, DIV6_I, DIV6_S, DIV6_NR };  static struct clk div6_clks[DIV6_NR] = {  	[DIV6_V] = SH_CLK_DIV6(&div3_clk, VCLKCR, 0), -	[DIV6_FA] = SH_CLK_DIV6(&div3_clk, FCLKACR, 0), -	[DIV6_FB] = SH_CLK_DIV6(&div3_clk, FCLKBCR, 0),  	[DIV6_I] = SH_CLK_DIV6(&div3_clk, IRDACLKCR, 0),  	[DIV6_S] = SH_CLK_DIV6(&div3_clk, SPUCLKCR, CLK_ENABLE_ON_INIT),  }; +enum { DIV6_FA, DIV6_FB, DIV6_REPARENT_NR }; + +/* Indices are important - they are the actual src selecting values */ +static struct clk *fclkacr_parent[] = { +	[0] = &div3_clk, +	[1] = NULL, +	[2] = &sh7724_fsimcka_clk, +	[3] = NULL, +}; + +static struct clk *fclkbcr_parent[] = { +	[0] = &div3_clk, +	[1] = NULL, +	[2] = &sh7724_fsimckb_clk, +	[3] = NULL, +}; + +static struct clk div6_reparent_clks[DIV6_REPARENT_NR] = { +	[DIV6_FA] = SH_CLK_DIV6_EXT(&div3_clk, FCLKACR, 0, +				      fclkacr_parent, ARRAY_SIZE(fclkacr_parent), 6, 2), +	[DIV6_FB] = SH_CLK_DIV6_EXT(&div3_clk, FCLKBCR, 0, +				      fclkbcr_parent, ARRAY_SIZE(fclkbcr_parent), 6, 2), +}; +  static struct clk mstp_clks[HWBLK_NR] = {  	SH_HWBLK_CLK(HWBLK_TLB, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT),  	SH_HWBLK_CLK(HWBLK_IC, &div4_clks[DIV4_I], CLK_ENABLE_ON_INIT), @@ -240,8 +271,8 @@ static struct clk_lookup lookups[] = {  	/* DIV6 clocks */  	CLKDEV_CON_ID("video_clk", &div6_clks[DIV6_V]), -	CLKDEV_CON_ID("fsia_clk", &div6_clks[DIV6_FA]), -	CLKDEV_CON_ID("fsib_clk", &div6_clks[DIV6_FB]), +	CLKDEV_CON_ID("fsia_clk", &div6_reparent_clks[DIV6_FA]), +	CLKDEV_CON_ID("fsib_clk", &div6_reparent_clks[DIV6_FB]),  	CLKDEV_CON_ID("irda_clk", &div6_clks[DIV6_I]),  	CLKDEV_CON_ID("spu_clk", &div6_clks[DIV6_S]), @@ -376,6 +407,9 @@ int __init arch_clk_init(void)  		ret = sh_clk_div6_register(div6_clks, DIV6_NR);  	if (!ret) +		ret = sh_clk_div6_reparent_register(div6_reparent_clks, DIV6_REPARENT_NR); + +	if (!ret)  		ret = sh_hwblk_clk_register(mstp_clks, HWBLK_NR);  	return ret; diff --git a/arch/sh/kernel/sys_sh.c b/arch/sh/kernel/sys_sh.c index 81f58371613d..8c6a350df751 100644 --- a/arch/sh/kernel/sys_sh.c +++ b/arch/sh/kernel/sys_sh.c @@ -88,7 +88,7 @@ asmlinkage int sys_cacheflush(unsigned long addr, unsigned long len, int op)  	}  	if (op & CACHEFLUSH_I) -		flush_cache_all(); +		flush_icache_range(addr, addr+len);  	up_read(¤t->mm->mmap_sem);  	return 0; diff --git a/arch/sh/kernel/vsyscall/vsyscall-trapa.S b/arch/sh/kernel/vsyscall/vsyscall-trapa.S index 3b6eb34c43fa..3e70f851cdc6 100644 --- a/arch/sh/kernel/vsyscall/vsyscall-trapa.S +++ b/arch/sh/kernel/vsyscall/vsyscall-trapa.S @@ -8,9 +8,9 @@ __kernel_vsyscall:  	 * fill out .eh_frame -- PFM. */  .LEND_vsyscall:  	.size __kernel_vsyscall,.-.LSTART_vsyscall -	.previous  	.section .eh_frame,"a",@progbits +	.previous  .LCIE:  	.ualong	.LCIE_end - .LCIE_start  .LCIE_start:  | 
