Kernel-3.10.0-957.el7_i2c-muxes

ACPI I2C Muxes

Describing an I2C device hierarchy that includes I2C muxes requires an ACPI
Device () scope per mux channel.

Consider this topology:

+——+ +——+
| SMB1 |–>| MUX0 |–CH00–> i2c client A (0x50)
| | | 0x70 |–CH01–> i2c client B (0x50)
+——+ +——+

which corresponds to the following ASL:

Device (SMB1)
{
Name (_HID, …)
Device (MUX0)
{
Name (_HID, …)
Name (_CRS, ResourceTemplate () {
I2cSerialBus (0x70, ControllerInitiated, I2C_SPEED,
AddressingMode7Bit, “^SMB1”, 0x00,
ResourceConsumer,,)
}

    Device (CH00)
    {
        Name (_ADR, 0)

        Device (CLIA)
        {
            Name (_HID, ...)
            Name (_CRS, ResourceTemplate () {
                I2cSerialBus (0x50, ControllerInitiated, I2C_SPEED,
                              AddressingMode7Bit, "^CH00", 0x00,
                              ResourceConsumer,,)
            }
        }
    }

    Device (CH01)
    {
        Name (_ADR, 1)

        Device (CLIB)
        {
            Name (_HID, ...)
            Name (_CRS, ResourceTemplate () {
                I2cSerialBus (0x50, ControllerInitiated, I2C_SPEED,
                              AddressingMode7Bit, "^CH01", 0x00,
                              ResourceConsumer,,)
            }
        }
    }
}

}