123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- .. 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)
- }
- }
|