blob: 7e7ed3ad3ac6928add0cabe248073cca8aa3a449 [file] [log] [blame]
.. SPDX-License-Identifier: GPL-2.0
======================================
Probing I²C devices in low power state
======================================
Introduction
============
In some cases it may be preferred to leave certain devices powered off for the
entire system bootup if powering on these devices has adverse side effects,
beyond just powering on the said device. Linux recognizes the _DSD property [1]
"i2c-allow-low-power-probe" that can be used for this purpose.
How it works
============
The boolean device property "i2c-allow-low-power-probe" may be used to tell
Linux that the I²C framework should instruct the kernel ACPI framework to leave
the device in the low power state. If the driver indicates its support for this
by setting the I2C_DRV_FL_ALLOW_LOW_POWER_PROBE flag in struct i2c_driver.flags
field and the "i2c-allow-low-power-probe" property is present, the device will
not be powered on for probe.
The downside is that as the device is not powered on, even if there's a problem
with the device, the driver likely probes just fine but the first user will
find out the device doesn't work, instead of a failure at probe time. This
feature should thus be used sparingly.
Example
=======
An ASL example describing an ACPI device using this property looks like
this. Some objects not relevant from the example point of view have been
omitted.
Device (CAM0)
{
Name (_HID, "SONY319A")
Name (_UID, Zero)
Name (_CRS, ResourceTemplate ()
{
I2cSerialBus(0x0020, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.PCI0.I2C0",
0x00, ResourceConsumer)
})
Name (PRT4, Package() {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package () { "i2c-allow-low-power-probe", 1 },
}
})
}
References
==========
[1] Device Properties UUID For _DSD.
https://www.uefi.org/sites/default/files/resources/_DSD-device-properties-UUID.pdf,
referenced 2020-09-02.