79 lines
2.2 KiB
ReStructuredText
79 lines
2.2 KiB
ReStructuredText
.. SPDX-License-Identifier: GPL-2.0
|
|
|
|
========================================
|
|
Probing devices in other D states than 0
|
|
========================================
|
|
|
|
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.
|
|
|
|
How it works
|
|
============
|
|
|
|
The _DSC (Device State for Configuration) object that evaluates to an integer
|
|
may be used to tell Linux the highest allowed D state for a device during
|
|
probe. The support for _DSC requires support from the kernel bus type if the
|
|
bus driver normally sets the device in D0 state for probe.
|
|
|
|
The downside of using _DSC 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.
|
|
|
|
I²C
|
|
---
|
|
|
|
If an I²C driver indicates its support for this by setting the
|
|
I2C_DRV_ACPI_WAIVE_D0_PROBE flag in struct i2c_driver.flags field and the
|
|
_DSC object evaluates to integer higher than the D state of the device,
|
|
the device will not be powered on (put in D0 state) for probe.
|
|
|
|
D states
|
|
--------
|
|
|
|
The D states and thus also the allowed values for _DSC are listed below. Refer
|
|
to [1] for more information on device power states.
|
|
|
|
.. code-block:: text
|
|
|
|
Number State Description
|
|
0 D0 Device fully powered on
|
|
1 D1
|
|
2 D2
|
|
3 D3hot
|
|
4 D3cold Off
|
|
|
|
References
|
|
==========
|
|
|
|
[1] https://uefi.org/specifications/ACPI/6.4/02_Definition_of_Terms/Definition_of_Terms.html#device-power-state-definitions
|
|
|
|
Example
|
|
=======
|
|
|
|
An ASL example describing an ACPI device using _DSC object to tell Operating
|
|
System the device should remain powered off during probe looks like this. Some
|
|
objects not relevant from the example point of view have been omitted.
|
|
|
|
.. code-block:: text
|
|
|
|
Device (CAM0)
|
|
{
|
|
Name (_HID, "SONY319A")
|
|
Name (_UID, Zero)
|
|
Name (_CRS, ResourceTemplate ()
|
|
{
|
|
I2cSerialBus(0x0020, ControllerInitiated, 0x00061A80,
|
|
AddressingMode7Bit, "\\_SB.PCI0.I2C0",
|
|
0x00, ResourceConsumer)
|
|
})
|
|
Method (_DSC, 0, NotSerialized)
|
|
{
|
|
Return (0x4)
|
|
}
|
|
}
|