]> git.sur5r.net Git - u-boot/commitdiff
ti: common: board_detect: Introduce function to set the address length.
authorCooper Jr., Franklin <fcooper@ti.com>
Thu, 20 Apr 2017 15:25:44 +0000 (10:25 -0500)
committerHeiko Schocher <hs@denx.de>
Tue, 9 May 2017 07:04:29 +0000 (09:04 +0200)
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 <fcooper@ti.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Heiko Schocher <hs@denx.de>
board/ti/common/board_detect.c

index c55e24e321512cda5837e26299ce143f5970f19c..1e695f4256aaf73290eff6a05b566cdafd734e58 100644 (file)
 
 #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