diff options
| author | Stefan Bigler <stefan.bigler@keymile.com> | 2011-04-08 16:24:08 +0200 | 
|---|---|---|
| committer | Heiko Schocher <hs@denx.de> | 2011-04-28 10:56:54 +0200 | 
| commit | c649dda537a1a585e51066169e6fdb67e2b8f59e (patch) | |
| tree | 3e9059b78166e3b1e2e083948107a36d902e4959 /common/cmd_i2c.c | |
| parent | a000b7950da938d2df37ec5e081cd0680e6e4bbe (diff) | |
| download | olio-uboot-2014.01-c649dda537a1a585e51066169e6fdb67e2b8f59e.tar.xz olio-uboot-2014.01-c649dda537a1a585e51066169e6fdb67e2b8f59e.zip | |
i2c: add i2c deblock sequence before and after every mux config
To make sure that the mux can be configured a deblocking sequence
is done before the mux configuration. After the mux switch the new leaf
of, the i2c tree must be again deblocked.
Signed-off-by: Stefan Bigler <stefan.bigler@keymile.com>
Acked-by: Heiko Schocher <hs@denx.de>
cc: Wolfgang Denk <wd@denx.de>
cc: Detlev Zundel <dzu@denx.de>
cc: Prafulla Wadaskar <prafulla@marvell.com>
cc: Valentin Longchamp <valentin.longchamp@keymile.com>
cc: Holger Brunck <holger.brunck@keymile.com>
Signed-off-by: Valentin Longchamp <valentin.longchamp@keymile.com>
Diffstat (limited to 'common/cmd_i2c.c')
| -rw-r--r-- | common/cmd_i2c.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c index c272b0dd4..d913e1366 100644 --- a/common/cmd_i2c.c +++ b/common/cmd_i2c.c @@ -132,6 +132,14 @@ DECLARE_GLOBAL_DATA_PTR;  #define DISP_LINE_LEN	16 +/* implement possible board specific board init */ +void __def_i2c_init_board(void) +{ +	return; +} +void i2c_init_board(void) +	__attribute__((weak, alias("__def_i2c_init_board"))); +  /* TODO: Implement architecture-specific get/set functions */  unsigned int __def_i2c_get_bus_speed(void)  { @@ -1541,6 +1549,8 @@ int i2x_mux_select_mux(int bus)  	mux = dev->mux;  	while (mux != NULL) { +		/* do deblocking on each level of mux, before mux config */ +		i2c_init_board();  		if (i2c_write(mux->chip, 0, 0, &mux->channel, 1) != 0) {  			printf ("Error setting Mux: chip:%x channel: \  				%x\n", mux->chip, mux->channel); @@ -1548,6 +1558,8 @@ int i2x_mux_select_mux(int bus)  		}  		mux = mux->next;  	} +	/* do deblocking on each level of mux and after mux config */ +	i2c_init_board();  	return 0;  }  #endif /* CONFIG_I2C_MUX */ |