On Wed, Oct 6, 2021 at 11:21 AM Paweł Anikiel <pan@xxxxxxxxxxxx> wrote: > On Tue, Oct 5, 2021 at 6:28 PM Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx> wrote: >> >> What happens when two nodes have the same busno property because e.g. >> one is in a dtsi and the other one is in a dts? > > > If busno is set, the alias is ignored (the code that checks aliases > is never reached). If two nodes have the same busno property, we get > a WARN in drivers/i2c/i2c-core-base.c:1637, and only on of them > gets attached. > > What is a better way of doing this then? Is adding aliases to the > devicetree like this okay? > > aliases { > ... > i2c0 = &i2c0; > i2c1 = &i2c1; > }; Yes, this is the normal way to do it. The way I tend to think of it is that the soc.dtsi file contains a description of hardware that exists inside of the chip and is as much as possible detached from how an OS uses it or what is connected to it on the outside. You then have the board.dts file that contains everything specific to the board. The /chosen and /aliases nodes in turn are specific to the individual machine, based on local configuration, installed OS and boot loader, and how the devices on the board are used. We tend to have the /aliases node populated with a sensible configuration of how we expect them to be used for a given board. So if your machine connects two of the internal i2c buses on the SoC, it makes sense to assign them the aliases i2c0 and i2c1. On the other hand, if one of them is not connected anywhere, you may skip that, or if there is an additional i2c controller in programmable logic or behind some gpio lines, you can make that your i2c0 alias. Arnd