diff options
Diffstat (limited to 'arch/powerpc/sysdev/cpm1.c')
| -rw-r--r-- | arch/powerpc/sysdev/cpm1.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/arch/powerpc/sysdev/cpm1.c b/arch/powerpc/sysdev/cpm1.c index 4dae3698bf2..8d103ca6d6a 100644 --- a/arch/powerpc/sysdev/cpm1.c +++ b/arch/powerpc/sysdev/cpm1.c @@ -486,9 +486,6 @@ int cpm1_clk_setup(enum cpm_clk_target target, int clock, int mode)  		return -EINVAL;  	} -	if (reg == &mpc8xx_immr->im_cpm.cp_sicr && mode == CPM_CLK_RX) -		shift += 3; -  	for (i = 0; i < ARRAY_SIZE(clk_map); i++) {  		if (clk_map[i][0] == target && clk_map[i][1] == clock) {  			bits = clk_map[i][2]; @@ -503,6 +500,17 @@ int cpm1_clk_setup(enum cpm_clk_target target, int clock, int mode)  	bits <<= shift;  	mask <<= shift; + +	if (reg == &mpc8xx_immr->im_cpm.cp_sicr) { +		if (mode == CPM_CLK_RTX) { +			bits |= bits << 3; +			mask |= mask << 3; +		} else if (mode == CPM_CLK_RX) { +			bits <<= 3; +			mask <<= 3; +		} +	} +  	out_be32(reg, (in_be32(reg) & ~mask) | bits);  	return 0;  | 
