[U-Boot-Users] [DNX#2006081142000072] [PATCH 06/07 v2 ]: tsi108 i2c support

DENX Support System support at denx.de
Fri Aug 11 12:50:14 CEST 2006


Hello list,

inside the automatic U-Boot patch tracking system a new ticket
[DNX#2006081142000072] was created:

<snip>
> tsi108 on chip i2c support. 
> 
> The i2c  Interface provides a master-only, serial interface 
> that can be used for initializing Tsi108/Tsi109 registers 
> from an EEPROM after a device reset. 
> 
>  Signed-off-by: Alexandre Bounine <alexandreb at tundra.com>
>  Signed-off-by: Roy Zang	<tie-fei.zang at freescale.com>
> 
> ---
>  drivers/tsi108_i2c.c |  295
> ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 295 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/tsi108_i2c.c b/drivers/tsi108_i2c.c
> new file mode 100644
> index 0000000..bfa10d8
> --- /dev/null
> +++ b/drivers/tsi108_i2c.c
> @@ -0,0 +1,295 @@
> +/*
> + * (C) Copyright 2004 Tundra Semiconductor Corp.
> + * Author: Alex Bounine
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + *
> + */
> +
> +#include <common.h>
> +#include <tsi108.h>
> +
> +#if (CONFIG_COMMANDS & CFG_CMD_I2C)
> +
> +#define I2C_DELAY           100000
> +#undef  DEBUG_I2C
> +
> +#ifdef DEBUG_I2C
> +#define DPRINT(x) printf(x)
> +#else
> +#define DPRINT(x)
> +#endif
> +
> +/* All functions assume that Tsi108 I2C block is the only master on the
> bus */
> +/* I2C read helper function */
> +
> +static int i2c_read_byte(
> +		uint i2c_chan,	/* I2C channel number: 0 - main, 1 - SDC
> SPD */
> +		uchar chip_addr,/* I2C device address on the bus */
> +		uint byte_addr,	/* Byte address within I2C device */
> +		uchar * buffer	/* pointer to data buffer */
> +		)
> +{
> +	u32 temp;
> +	u32 to_count = I2C_DELAY;
> +	u32 op_status = TSI108_I2C_TIMEOUT_ERR;
> +	u32 chan_offset = TSI108_I2C_OFFSET;
> +
> +	DPRINT(("I2C read_byte() %d 0x%02x 0x%02x\n",
> +		i2c_chan, chip_addr, byte_addr));
> +
> +	if (0 != i2c_chan) {
> +		chan_offset = TSI108_I2C_SDRAM_OFFSET;
> +	}
> +
> +	/* Check if I2C operation is in progress */
> +	temp = *(u32 *) (CFG_TSI108_CSR_BASE + chan_offset +
> I2C_CNTRL2);
> +
> +	if (0 == (temp & (I2C_CNTRL2_RD_STATUS | I2C_CNTRL2_WR_STATUS |
> +			  I2C_CNTRL2_START))
> +	    ) {
> +		/* Set device address and operation (read = 0) */
> +		temp = (byte_addr << 16) | ((chip_addr & 0x07) << 8) |
> +		    ((chip_addr >> 3) & 0x0F);
> +		*(u32 *) (CFG_TSI108_CSR_BASE + chan_offset +
> I2C_CNTRL1) =
> +		    temp;
> +
> +		/* Issue the read command
> +		 * (at this moment all other parameters are 0 
> +		 * (size = 1 byte, lane = 0)
> +		 */
</snip>

Your U-Boot support team




More information about the U-Boot mailing list