- /* Only register child devices if the adapter has a node pointer set */
- if (!adap->dev.of_node)
+ /* Only register childs if adapter has a node pointer with enabled status */
+ if (!adap->dev.of_node || !of_device_is_available(adap->dev.of_node))
return;
That feels a bit odd to me. For a regular non-mux I2C controller, that extra
case would never trigger if the controller node was disabled, since the
device core would never probe the controller device itself. So, we'd end up
with inconsistent paths through the I2C core for regular controllers and
muxes.
I first thought the no-op for the non-mux case wouldn't hurt, but I
agree about the consistent code path. I mentioned in my previous mail
that i2c-mux might be a better place for this...
Perhaps better would be to have a mux-specific function to iterate over a
mux's child nodes and instantiate buses for those. That function would check
whether each bus node was disabled or not. That'd isolate the special case
into the place where it was relevant.
... so I wonder what you think about putting the
of_device_is_available() check into i2c_add_mux_adapter() once the
reg-property and chan_id have been matched?