[U-Boot] [PATCH] ARM: imx6: DHCOM i.MX6 PDK: Switch to DM for I2C

Marek Vasut marex at denx.de
Thu Jul 4 13:42:24 UTC 2019


On 7/4/19 9:09 AM, Ludwig Zenz wrote:
> Marek Vasut <marex at denx.de> Wednesday 3rd July 2019 14:06:
>>
>> On 7/3/19 10:20 AM, Ludwig Zenz wrote:
>> [...]
>>
>>>  static int setup_dhcom_mac_from_fuse(void)
>>>  {
>>> +	struct udevice *dev;
>>>  	unsigned char enetaddr[6];
>>>  	int ret;
>>>  
>>> @@ -228,13 +145,14 @@ static int setup_dhcom_mac_from_fuse(void)
>>>  		return 0;
>>>  	}
>>>  
>>> -	ret = i2c_set_bus_num(2);
>>> +#ifdef CONFIG_SYS_I2C_MXC_I2C3
>>> +	ret = i2c_get_chip_for_busnum(2, EEPROM_I2C_ADDRESS, 1, &dev);
>>
>> Isn't there some DM way which avoids using bus sequence numbers ?
>> If there is, subsequent patch is fine.
>>
> 
> I searched the U-Boot source tree in particular also drivers/i2c/i2c-uclass.c 
> and unfortunately found no better variant. Of course I am open for suggestions. 

+CC Heiko, he's the i2c maintainer.

>>>  	if (ret) {
>>> -		printf("Error switching I2C bus!\n");
>>> +		printf("Cannot find EEPROM!\n");
>>>  		return ret;
>>>  	}
>>>  
>>> -	ret = i2c_read(EEPROM_I2C_ADDRESS, 0xfa, 0x1, enetaddr, 0x6);
>>> +	ret = dm_i2c_read(dev, 0xfa, enetaddr, 0x6);
>>>  	if (ret) {
>>>  		printf("Error reading configuration EEPROM!\n");
>>>  		return ret;
>>
>> [...]
>>
>>> diff --git a/configs/dh_imx6_defconfig b/configs/dh_imx6_defconfig
>>> index 4734ed76e5..b0749a054f 100644
>>> --- a/configs/dh_imx6_defconfig
>>> +++ b/configs/dh_imx6_defconfig
>>> @@ -48,6 +48,13 @@ CONFIG_ENV_IS_IN_SPI_FLASH=y
>>>  CONFIG_DWC_AHSATA=y
>>>  CONFIG_BOOTCOUNT_LIMIT=y
>>>  CONFIG_DM_GPIO=y
>>> +CONFIG_DM_I2C=y
>>> +CONFIG_I2C_SET_DEFAULT_BUS_NUM=y
>>> +CONFIG_I2C_DEFAULT_BUS_NUMBER=0x2
>>
>> Are these two ^ needed ?
>>
> 
> Bus number 2 is the i2c bus for the system on module components. The first 
> thought was that it would add some comfort. On the other hand, of course, there
> is also additional overhead. I will leave it out in v2.

Surely the user should pick the correct bus, right ?

>>> +CONFIG_SYS_I2C_MXC=y
>>> +CONFIG_SYS_I2C_MXC_I2C1=y
>>> +CONFIG_SYS_I2C_MXC_I2C2=y
>>> +CONFIG_SYS_I2C_MXC_I2C3=y
>>
>> Are these three ^ really needed ?
> 
> You're right. It is not needed (I did test it). I was irritated by the fact that this is used on many boards.
> 
> Unfortunately I get the following warnings when compiling (maybe that is the reason why so many boards use it):
> 
> /work/dhcom/imx6/u-boot-imx/drivers/i2c/mxc_i2c.c:793:12: warning: ‘mxc_i2c_set_bus_speed’ defined but not used [-Wunused-function]
>  static u32 mxc_i2c_set_bus_speed(struct i2c_adapter *adap, uint speed)
>             ^~~~~~~~~~~~~~~~~~~~~
> /work/dhcom/imx6/u-boot-imx/drivers/i2c/mxc_i2c.c:785:13: warning: ‘mxc_i2c_init’ defined but not used [-Wunused-function]
>  static void mxc_i2c_init(struct i2c_adapter *adap, int speed, int slaveaddr)
>              ^~~~~~~~~~~~
> /work/dhcom/imx6/u-boot-imx/drivers/i2c/mxc_i2c.c:721:12: warning: ‘mxc_i2c_probe’ defined but not used [-Wunused-function]
>  static int mxc_i2c_probe(struct i2c_adapter *adap, uint8_t chip)
>             ^~~~~~~~~~~~~
> /work/dhcom/imx6/u-boot-imx/drivers/i2c/mxc_i2c.c:711:12: warning: ‘mxc_i2c_write’ defined but not used [-Wunused-function]
>  static int mxc_i2c_write(struct i2c_adapter *adap, uint8_t chip,
>             ^~~~~~~~~~~~~
> /work/dhcom/imx6/u-boot-imx/drivers/i2c/mxc_i2c.c:704:12: warning: ‘mxc_i2c_read’ defined but not used [-Wunused-function]
>  static int mxc_i2c_read(struct i2c_adapter *adap, uint8_t chip,
> 
> with CONFIG_SYS_I2C_MXC_I2Cx in the dh_imx6_defconfig everything is fine.
> 
> Can you make a suggestion on how to solve it?

Is DM_I2C defined ? Those ^ functions are defined if !CONFIG_DM_I2C
according to the driver source.

[...]


More information about the U-Boot mailing list