Hi Heiko, > Hello Lubomir, > > Am 28.01.2015 09:32, schrieb Lubomir Popov: >> Hi Heiko, >> >>> Hello Lubomir, >>> >>> Am 24.11.2014 17:00, schrieb Lubomir Popov: >>>> I2C chips do exist that require a write of some multi-byte data to occur in >>>> a single bus transaction (aka atomic transfer), otherwise either the write >>>> does not come into effect at all, or normal operation of internal circuitry >>>> cannot be guaranteed. The current implementation of the 'i2c write' command >>>> (transfer of multiple bytes from a memory buffer) in fact performs a >>>> separate >>>> transaction for each byte to be written and thus cannot support such types >>>> of >>>> I2C slave devices. >>>> >>>> This patch provides an alternative by allowing 'i2c write' to execute the >>>> write transfer of the given number of bytes in a single bus transaction if >>>> CONFIG_SYS_I2C_BULK_WRITE is defined in the board header (otherwise the old >>>> method shall compile). >>>> >>>> Signed-off-by: Lubomir Popov <l-po...@ti.com> >>>> --- >>>> common/cmd_i2c.c | 15 ++++++++++++++- >>>> 1 file changed, 14 insertions(+), 1 deletion(-) >>> >>> Could you rebase your patch against current mainline, please? >>> As we have now DM in i2c subsystem your patch does not apply clean >>> anymore ... thanks! >> >> It looks like you are referring V1 of the patch here. The correct >> version is V2 (http://patchwork.ozlabs.org/patch/415117/). If it >> doesn't apply as well, I shall try to find some time to fix it. > > Sorry, was the wrong EMail I replied ... but the v2 does not > apply to current mainline. If you can fix it, that would be great. OK. Do you have a deadline to finish the I2C updates? I'm really very busy right now and am not sure if I shall manage with this before the end of the week, but can try...
Regards, Lubo > > Thanks! > > bye, > Heiko >> >> Thanks, >> Lubo >> >>> >>> bye, >>> Heiko >>>> >>>> diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c >>>> index 3a75f94..7116458 100644 >>>> --- a/common/cmd_i2c.c >>>> +++ b/common/cmd_i2c.c >>>> @@ -280,10 +280,22 @@ static int do_i2c_write(cmd_tbl_t *cmdtp, int flag, >>>> int argc, char * const argv[ >>>> return cmd_usage(cmdtp); >>>> >>>> /* >>>> - * Length is the number of objects, not number of bytes. >>>> + * Length is the number of bytes. >>>> */ >>>> length = simple_strtoul(argv[4], NULL, 16); >>>> >>>> +#if defined(CONFIG_SYS_I2C_BULK_WRITE) >>>> + /* >>>> + * Write all bytes in a single I2C transaction. If the target >>>> + * device is an EEPROM, it is your responsibility to not cross >>>> + * a page bounady. >>>> + */ >>>> + if (i2c_write(chip, devaddr, alen, memaddr, length) != 0) { >>>> + puts("Error writing to the chip.\n"); >>>> + return 1; >>>> + } >>>> +#else >>>> + /* Perform <length> separate write transactions of one byte each */ >>>> while (length-- > 0) { >>>> if (i2c_write(chip, devaddr++, alen, memaddr++, 1) != >>>> 0) { >>>> puts("Error writing to the chip.\n"); >>>> @@ -296,6 +308,7 @@ static int do_i2c_write(cmd_tbl_t *cmdtp, int flag, >>>> int argc, char * const argv[ >>>> udelay(11000); >>>> #endif >>>> } >>>> +#endif >>>> return 0; >>>> } >>>> >>> >>> -- >>> DENX Software Engineering GmbH, Managing Director: Wolfgang Denk >>> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany >>> >> >> > > -- > DENX Software Engineering GmbH, Managing Director: Wolfgang Denk > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot