From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Fri, 28 Apr 2017 05:58:29 +0200 Subject: [U-Boot] [PATCH v2 3/8] ti: common: board_detect: Introduce function to set the address length. In-Reply-To: <20170420152549.28031-4-fcooper@ti.com> References: <20170420152549.28031-1-fcooper@ti.com> <20170420152549.28031-4-fcooper@ti.com> Message-ID: <5902BDE5.1010000@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Franklin, Am 20.04.2017 um 17:25 schrieb Franklin S Cooper Jr: > 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 > --- > board/ti/common/board_detect.c | 37 +++++++++++++++++++++++++++++++++++++ Reviewed-by: Heiko Schocher Applied to u-boot-i2c/next bye, Heiko > 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 > #include > +#include > #include > > #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 > -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany