On 04/12/2017 03:40 AM, Vignesh R wrote: > > > On Wednesday 12 April 2017 12:07 AM, Franklin S Cooper Jr wrote: >> Reading from the I2C EEPROM used typically requires using an address length >> of 2. However, when using DM for I2C the default address length used is 1. >> To fix this introduce a new function that allows the address length to be >> changed. The logic to do so was copied from cmd/i2c.c. >> >> Signed-off-by: Franklin S Cooper Jr <fcoo...@ti.com> > > I maybe wrong, but doesn't adding DT property > u-boot,i2c-offset-len = <2>; > to the i2c slave node help to achieve this?
There is no i2c slave node for this. This is just a function making raw i2c read operations. In the future especially when OMAP SPL uses DM it would be useful to see if this can be converted to a actual driver. Then u-boot,i2c-offset-len should work. > > Regards > Vignesh > >> --- >> board/ti/common/board_detect.c | 37 +++++++++++++++++++++++++++++++++++++ >> 1 file changed, 37 insertions(+) >> >> diff --git a/board/ti/common/board_detect.c b/board/ti/common/board_detect.c >> index c55e24e..1e695f4 100644 >> --- a/board/ti/common/board_detect.c >> +++ b/board/ti/common/board_detect.c >> @@ -10,10 +10,47 @@ >> >> #include <common.h> >> #include <asm/omap_common.h> >> +#include <dm/uclass.h> >> #include <i2c.h> >> >> #include "board_detect.h" >> >> +#if defined(CONFIG_DM_I2C_COMPAT) >> +/** >> + * ti_i2c_set_alen - Set chip's i2c address length >> + * @bus_addr - I2C bus number >> + * @dev_addr - I2C eeprom id >> + * @alen - I2C address length in bytes >> + * >> + * DM_I2C by default sets the address length to be used to 1. This >> + * function allows this address length to be changed to match the >> + * eeprom used for board detection. >> + */ >> +int __maybe_unused ti_i2c_set_alen(int bus_addr, int dev_addr, int alen) >> +{ >> + struct udevice *dev; >> + struct udevice *bus; >> + int rc; >> + >> + rc = uclass_get_device_by_seq(UCLASS_I2C, bus_addr, &bus); >> + if (rc) >> + return rc; >> + rc = i2c_get_chip(bus, dev_addr, 1, &dev); >> + if (rc) >> + return rc; >> + rc = i2c_set_chip_offset_len(dev, alen); >> + if (rc) >> + return rc; >> + >> + return 0; >> +} >> +#else >> +int __maybe_unused ti_i2c_set_alen(int bus_addr, int dev_addr, int alen) >> +{ >> + return 0; >> +} >> +#endif >> + >> /** >> * ti_i2c_eeprom_init - Initialize an i2c bus and probe for a device >> * @i2c_bus: i2c bus number to initialize >> > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot