acpi_iicbus(4) decides which ACPI devices belong to it by comparing the
ResourceSource of their I2cSerialBus resource against the handle of the
controller its bus hangs off. That holds for a controller driving a single
bus: the bus is not a namespace object of its own, and everything on it is
described in the controller's scope.
It does not hold for an i2c mux. One device fans out into several buses, and
firmware describes each downstream channel as its own namespace node, with
whatever sits on that channel in that channel's scope. The comparison can
therefore never match, and nothing firmware placed on a channel is
enumerated. On a SolidRun CEX7 (NXP LX2160A) that is the board's fan
controller and temperature sensor: both are described in ACPI and both end up
as unattached devices hanging off acpi0.
Give iicbus(4) the notion of a bus that stands for a namespace scope of its
own. pca954x(4) records the node firmware described each channel with,
keyed by _ADR, and answers ACPI_IVAR_HANDLE for the matching child bus --
the same shape as the FDT side, where iicmux(4) keeps childnodes[] and the
parent answers ofw_bus_get_node() per child. acpi_iicbus(4) then prefers the
bus's own handle and falls back to the controller's.
Answering with a NULL handle is not the same as declining: it says the
channel is ours and firmware did not describe it, so that channel gets a
plain iicbus(4) rather than an ACPI-aware one.
Depends on D60063