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

Ludwig Zenz lzenz at dh-electronics.com
Thu Jul 4 07:09:00 UTC 2019


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. 

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

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

> [...]
> 

Thanks and regards,
Ludwig Zenz


More information about the U-Boot mailing list