diff options
| author | Tom Rini <trini@ti.com> | 2013-07-24 09:22:28 -0400 | 
|---|---|---|
| committer | Tom Rini <trini@ti.com> | 2013-07-24 09:50:24 -0400 | 
| commit | c2120fbfbc4d1f6953228f86be8bdbf38bacfdab (patch) | |
| tree | 14cd8ec9a0a61f7113149be38d79808cd5e955f8 /drivers/i2c/soft_i2c.c | |
| parent | e85427fd66a21b39145a47e67871a8863c0e5591 (diff) | |
| parent | ecbd7e1ec7280d90d151a99691f74b892588cadd (diff) | |
| download | olio-uboot-2014.01-c2120fbfbc4d1f6953228f86be8bdbf38bacfdab.tar.xz olio-uboot-2014.01-c2120fbfbc4d1f6953228f86be8bdbf38bacfdab.zip | |
Merge branch 'master' of git://git.denx.de/u-boot-i2c
The sandburst-specific i2c drivers have been deleted, conflict was just
over the SPDX conversion.
Conflicts:
	board/sandburst/common/ppc440gx_i2c.c
	board/sandburst/common/ppc440gx_i2c.h
Signed-off-by: Tom Rini <trini@ti.com>
Diffstat (limited to 'drivers/i2c/soft_i2c.c')
| -rw-r--r-- | drivers/i2c/soft_i2c.c | 104 | 
1 files changed, 57 insertions, 47 deletions
| diff --git a/drivers/i2c/soft_i2c.c b/drivers/i2c/soft_i2c.c index 0a1423016..a2baec0ac 100644 --- a/drivers/i2c/soft_i2c.c +++ b/drivers/i2c/soft_i2c.c @@ -1,4 +1,8 @@  /* + * (C) Copyright 2009 + * Heiko Schocher, DENX Software Engineering, hs@denx.de. + * Changes for multibus/multiadapter I2C support. + *   * (C) Copyright 2001, 2002   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.   * @@ -87,14 +91,30 @@  /* #define	DEBUG_I2C	*/ -#ifdef DEBUG_I2C  DECLARE_GLOBAL_DATA_PTR; + +#ifndef	I2C_SOFT_DECLARATIONS +# if defined(CONFIG_MPC8260) +#  define I2C_SOFT_DECLARATIONS volatile ioport_t *iop = \ +		ioport_addr((immap_t *)CONFIG_SYS_IMMR, I2C_PORT); +# elif defined(CONFIG_8xx) +#  define I2C_SOFT_DECLARATIONS	volatile immap_t *immr = \ +		(immap_t *)CONFIG_SYS_IMMR; +# else +#  define I2C_SOFT_DECLARATIONS +# endif +#endif + +#if !defined(CONFIG_SYS_SOFT_I2C_SPEED) +#define CONFIG_SYS_SOFT_I2C_SPEED CONFIG_SYS_I2C_SPEED +#endif +#if !defined(CONFIG_SYS_SOFT_I2C_SLAVE) +#define CONFIG_SYS_SOFT_I2C_SLAVE CONFIG_SYS_I2C_SLAVE  #endif  /*-----------------------------------------------------------------------   * Definitions   */ -  #define RETRIES		0  #define I2C_ACK		0		/* PD_SDA level to ack a byte */ @@ -109,10 +129,6 @@ DECLARE_GLOBAL_DATA_PTR;  #define PRINTD(fmt,args...)  #endif -#if defined(CONFIG_I2C_MULTI_BUS) -static unsigned int i2c_bus_num __attribute__ ((section (".data"))) = 0; -#endif /* CONFIG_I2C_MULTI_BUS */ -  /*-----------------------------------------------------------------------   * Local functions   */ @@ -251,39 +267,6 @@ static int write_byte(uchar data)  	return(nack);	/* not a nack is an ack */  } -#if defined(CONFIG_I2C_MULTI_BUS) -/* - * Functions for multiple I2C bus handling - */ -unsigned int i2c_get_bus_num(void) -{ -	return i2c_bus_num; -} - -int i2c_set_bus_num(unsigned int bus) -{ -#if defined(CONFIG_I2C_MUX) -	if (bus < CONFIG_SYS_MAX_I2C_BUS) { -		i2c_bus_num = bus; -	} else { -		int	ret; - -		ret = i2x_mux_select_mux(bus); -		i2c_init_board(); -		if (ret == 0) -			i2c_bus_num = bus; -		else -			return ret; -	} -#else -	if (bus >= CONFIG_SYS_MAX_I2C_BUS) -		return -1; -	i2c_bus_num = bus; -#endif -	return 0; -} -#endif -  /*-----------------------------------------------------------------------   * if ack == I2C_ACK, ACK the byte so can continue reading, else   * send I2C_NOACK to end the read. @@ -314,14 +297,10 @@ static uchar read_byte(int ack)  	return(data);  } -/*=====================================================================*/ -/*                         Public Functions                            */ -/*=====================================================================*/ -  /*-----------------------------------------------------------------------   * Initialization   */ -void i2c_init (int speed, int slaveaddr) +static void soft_i2c_init(struct i2c_adapter *adap, int speed, int slaveaddr)  {  #if defined(CONFIG_SYS_I2C_INIT_BOARD)  	/* call board specific i2c bus reset routine before accessing the   */ @@ -344,7 +323,7 @@ void i2c_init (int speed, int slaveaddr)   * completion of EEPROM writes since the chip stops responding until   * the write completes (typically 10mSec).   */ -int i2c_probe(uchar addr) +static int soft_i2c_probe(struct i2c_adapter *adap, uint8_t addr)  {  	int rc; @@ -362,7 +341,8 @@ int i2c_probe(uchar addr)  /*-----------------------------------------------------------------------   * Read bytes   */ -int  i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len) +static int  soft_i2c_read(struct i2c_adapter *adap, uchar chip, uint addr, +			int alen, uchar *buffer, int len)  {  	int shift;  	PRINTD("i2c_read: chip %02X addr %02X alen %d buffer %p len %d\n", @@ -436,7 +416,8 @@ int  i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)  /*-----------------------------------------------------------------------   * Write bytes   */ -int  i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len) +static int  soft_i2c_write(struct i2c_adapter *adap, uchar chip, uint addr, +			int alen, uchar *buffer, int len)  {  	int shift, failures = 0; @@ -466,3 +447,32 @@ int  i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)  	send_stop();  	return(failures);  } + +/* + * Register soft i2c adapters + */ +U_BOOT_I2C_ADAP_COMPLETE(soft0, soft_i2c_init, soft_i2c_probe, +			 soft_i2c_read, soft_i2c_write, NULL, +			 CONFIG_SYS_I2C_SOFT_SPEED, CONFIG_SYS_I2C_SOFT_SLAVE, +			 0) +#if defined(I2C_SOFT_DECLARATIONS2) +U_BOOT_I2C_ADAP_COMPLETE(soft1, soft_i2c_init, soft_i2c_probe, +			 soft_i2c_read, soft_i2c_write, NULL, +			 CONFIG_SYS_I2C_SOFT_SPEED_2, +			 CONFIG_SYS_I2C_SOFT_SLAVE_2, +			 1) +#endif +#if defined(I2C_SOFT_DECLARATIONS3) +U_BOOT_I2C_ADAP_COMPLETE(soft2, soft_i2c_init, soft_i2c_probe, +			 soft_i2c_read, soft_i2c_write, NULL, +			 CONFIG_SYS_I2C_SOFT_SPEED_3, +			 CONFIG_SYS_I2C_SOFT_SLAVE_3, +			 2) +#endif +#if defined(I2C_SOFT_DECLARATIONS4) +U_BOOT_I2C_ADAP_COMPLETE(soft3, soft_i2c_init, soft_i2c_probe, +			 soft_i2c_read, soft_i2c_write, NULL, +			 CONFIG_SYS_I2C_SOFT_SPEED_4, +			 CONFIG_SYS_I2C_SOFT_SLAVE_4, +			 3) +#endif |