Currently all drivers are loaded by the /boot/config device tree approach. This works great only when there is 1 gpio expander, but when more than 1 gpio expander device is present there is a race condition that causes devices to change addresses from 1 boot to the next.
The revised approach will be to pull the drivers from the /boot/config to a boot time script where we can control the sequence and timing of their loading relative to each other
possible solution is to use the /etc/rc.local file and then inside
dtoverlay mcp23017 addr=0x27 gpiopin=23
sleep 0.25
dtoverlay mcp23017 addr=0x26 gpiopin=25
....
as an example to ensure proper sequencing. This may need to have a customization option as well to allow the user to add in their own 3rd (4th??) party drivers
Currently all drivers are loaded by the /boot/config device tree approach. This works great only when there is 1 gpio expander, but when more than 1 gpio expander device is present there is a race condition that causes devices to change addresses from 1 boot to the next.
The revised approach will be to pull the drivers from the /boot/config to a boot time script where we can control the sequence and timing of their loading relative to each other
possible solution is to use the /etc/rc.local file and then inside
dtoverlay mcp23017 addr=0x27 gpiopin=23
sleep 0.25
dtoverlay mcp23017 addr=0x26 gpiopin=25
....
as an example to ensure proper sequencing. This may need to have a customization option as well to allow the user to add in their own 3rd (4th??) party drivers