mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-01 08:33:31 +08:00
ti: common: board_detect: Introduce function to set the address length.
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>
This commit is contained in:
parent
70f6f94c77
commit
c6b80b1392
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user