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

Franklin S Cooper Jr fcooper at ti.com
Wed Apr 12 13:14:27 UTC 2017



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


More information about the U-Boot mailing list