[U-Boot,v2,3/8] ti: common: board_detect: Introduce function to set the address length.

Submitted by Cooper Jr., Franklin on April 20, 2017, 3:25 p.m.

Details

Message ID 20170420152549.28031-4-fcooper@ti.com
State Awaiting Upstream
Delegated to: Heiko Schocher
Headers show

Commit Message

Cooper Jr., Franklin April 20, 2017, 3:25 p.m.
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>
---
 board/ti/common/board_detect.c | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

Comments

Tom Rini April 26, 2017, 7:16 p.m.
On Thu, Apr 20, 2017 at 10:25:44AM -0500, 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 <fcooper@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>
Heiko Schocher April 28, 2017, 3:58 a.m.
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 <fcooper@ti.com>
> ---
>   board/ti/common/board_detect.c | 37 +++++++++++++++++++++++++++++++++++++

Reviewed-by: Heiko Schocher <hs@denx.de>

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 <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
>

Patch hide | download patch | download mbox

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