[U-Boot] arm, i2c: added support for the TWSI I2C Interface

Heiko Schocher hs at denx.de
Sat Jul 18 14:54:26 CEST 2009


Hello Jean-Christophe,

Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 10:01 Thu 16 Jul     , Heiko Schocher wrote:
>> added support for the Hardware I2C TWSI Interface on
>> kirkwood SOCs, based on the Linux driver, without IRQ
>> support.
>>
>> Tested on a ARM926EJS (CPU Core Version FEROCEON_88FR131
>> SOC Family: KIRKWOOD, KW88F6281) based suen3 board
>>
>> Signed-off-by: Heiko Schocher <hs at denx.de>
> could apply the following CONFIG name convention cleanup before please

I don;t understand you here. You have a "CONFIG name convention cleanup"
patch somewhere? Is this somewhere discussed, how this should
look like? (I think, a "CONFIG_DRIVER_I2C_xxx" would be good)

>> ---
>>  drivers/i2c/Makefile      |    1 +
>>  drivers/i2c/mv64xxx-i2c.c |  452 +++++++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 453 insertions(+), 0 deletions(-)
>>  create mode 100644 drivers/i2c/mv64xxx-i2c.c
>>
>> diff --git a/drivers/i2c/Makefile b/drivers/i2c/Makefile
>> index ef32f13..ce30111 100644
>> --- a/drivers/i2c/Makefile
>> +++ b/drivers/i2c/Makefile
>> @@ -33,6 +33,7 @@ COBJS-$(CONFIG_DRIVER_OMAP1510_I2C) += omap1510_i2c.o
>>  COBJS-$(CONFIG_DRIVER_OMAP24XX_I2C) += omap24xx_i2c.o
>>  COBJS-$(CONFIG_DRIVER_OMAP34XX_I2C) += omap24xx_i2c.o
>>  COBJS-$(CONFIG_DRIVER_S3C24X0_I2C) += s3c24x0_i2c.o
>> +COBJS-$(CONFIG_I2C_MV64xxx) += mv64xxx-i2c.o
>>  COBJS-$(CONFIG_S3C44B0_I2C) += s3c44b0_i2c.o
>>  COBJS-$(CONFIG_SOFT_I2C) += soft_i2c.o
>>  COBJS-$(CONFIG_TSI108_I2C) += tsi108_i2c.o
>> diff --git a/drivers/i2c/mv64xxx-i2c.c b/drivers/i2c/mv64xxx-i2c.c
>> new file mode 100644
>> index 0000000..6ba2782
>> --- /dev/null
>> +++ b/drivers/i2c/mv64xxx-i2c.c
>> @@ -0,0 +1,452 @@
>> +/*
>> + * Driver for the i2c controller on the Marvell line of host bridges
>> + * (e.g, gt642[46]0, mv643[46]0, mv644[46]0, and Orion SoC family).
>> + *
>> + * Based on:
>> + * Author: Mark A. Greer <mgreer at mvista.com>
>> + *
>> + * 2005 (c) MontaVista, Software, Inc.  This file is licensed under
>> + * the terms of the GNU General Public License version 2.  This program
>> + * is licensed "as is" without any warranty of any kind, whether express
>> + * or implied.
>> + *
>> + * ported from Linux to u-boot
>> + * (C) Copyright 2009
>> + * Heiko Schocher, DENX Software Engineering, hs at denx.de.
>> + *
>> + */
>> +#include <common.h>
>> +#include <i2c.h>
>> +#include <asm/arch/kirkwood.h>
>> +#include <asm/errno.h>
>> +#include <asm/io.h>
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +static unsigned int i2c_bus_num __attribute__ ((section (".data"))) = 0;
>> +#if defined(CONFIG_I2C_MUX)
>> +static unsigned int i2c_bus_num_mux __attribute__ ((section ("data"))) = 0;
> 								.data
>> +#endif
> no need of put it in section .data on arm

Hmm.. I am not an arm expert ...

>> +
> <snip>
>> +
>> +void
>> +i2c_init(int speed, int slaveadd)
>> +{
>> +	mv64xxx_i2c_hw_init();
> impossible to specify a speed?
> or update it at runtime?

This is configurable through the CONFIG_I2C_MV64xxx_FREQ_M and
CONFIG_I2C_MV64xxx_FREQ_N defines. Hmm... I ported this more or
less directly from Linux. But you are right, I looked in the
CPU manual, it should be easy to calculate this two values,
so I change this.

bye
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany


More information about the U-Boot mailing list