mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
![Dustin Byford](/assets/img/avatar_default.png)
Although I2C mux devices are easily enumerated using ACPI (_HID/_CID or device property compatible string match), enumerating I2C client devices connected through an I2C mux needs a little extra work. This change implements a method for describing an I2C device hierarchy that includes mux devices by using an ACPI Device() for each mux channel along with an _ADR to set the channel number for the device. See Documentation/acpi/i2c-muxes.txt for a simple example. To make this work the ismt, i801, and designware pci/platform devs now share an ACPI companion with their I2C adapter dev similar to how it's done in OF. This is done on the assumption that power management functions will not be called directly on the I2C dev that is sharing the ACPI node. Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> Tested-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: Dustin Byford <dustin@cumulusnetworks.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
58 lines
1.5 KiB
Text
58 lines
1.5 KiB
Text
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,,)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|