162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci.. include:: <isonum.txt> 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci=================================================== 562306a36Sopenharmony_ciACPI Device Tree - Representation of ACPI Namespace 662306a36Sopenharmony_ci=================================================== 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci:Copyright: |copy| 2013, Intel Corporation 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci:Author: Lv Zheng <lv.zheng@intel.com> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci:Credit: Thanks for the help from Zhang Rui <rui.zhang@intel.com> and 1362306a36Sopenharmony_ci Rafael J.Wysocki <rafael.j.wysocki@intel.com>. 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciAbstract 1662306a36Sopenharmony_ci======== 1762306a36Sopenharmony_ciThe Linux ACPI subsystem converts ACPI namespace objects into a Linux 1862306a36Sopenharmony_cidevice tree under the /sys/devices/LNXSYSTEM:00 and updates it upon 1962306a36Sopenharmony_cireceiving ACPI hotplug notification events. For each device object 2062306a36Sopenharmony_ciin this hierarchy there is a corresponding symbolic link in the 2162306a36Sopenharmony_ci/sys/bus/acpi/devices. 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ciThis document illustrates the structure of the ACPI device tree. 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ciACPI Definition Blocks 2662306a36Sopenharmony_ci====================== 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ciThe ACPI firmware sets up RSDP (Root System Description Pointer) in the 2962306a36Sopenharmony_cisystem memory address space pointing to the XSDT (Extended System 3062306a36Sopenharmony_ciDescription Table). The XSDT always points to the FADT (Fixed ACPI 3162306a36Sopenharmony_ciDescription Table) using its first entry, the data within the FADT 3262306a36Sopenharmony_ciincludes various fixed-length entries that describe fixed ACPI features 3362306a36Sopenharmony_ciof the hardware. The FADT contains a pointer to the DSDT 3462306a36Sopenharmony_ci(Differentiated System Description Table). The XSDT also contains 3562306a36Sopenharmony_cientries pointing to possibly multiple SSDTs (Secondary System 3662306a36Sopenharmony_ciDescription Table). 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciThe DSDT and SSDT data is organized in data structures called definition 3962306a36Sopenharmony_ciblocks that contain definitions of various objects, including ACPI 4062306a36Sopenharmony_cicontrol methods, encoded in AML (ACPI Machine Language). The data block 4162306a36Sopenharmony_ciof the DSDT along with the contents of SSDTs represents a hierarchical 4262306a36Sopenharmony_cidata structure called the ACPI namespace whose topology reflects the 4362306a36Sopenharmony_cistructure of the underlying hardware platform. 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ciThe relationships between ACPI System Definition Tables described above 4662306a36Sopenharmony_ciare illustrated in the following diagram:: 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci +---------+ +-------+ +--------+ +------------------------+ 4962306a36Sopenharmony_ci | RSDP | +->| XSDT | +->| FADT | | +-------------------+ | 5062306a36Sopenharmony_ci +---------+ | +-------+ | +--------+ +-|->| DSDT | | 5162306a36Sopenharmony_ci | Pointer | | | Entry |-+ | ...... | | | +-------------------+ | 5262306a36Sopenharmony_ci +---------+ | +-------+ | X_DSDT |--+ | | Definition Blocks | | 5362306a36Sopenharmony_ci | Pointer |-+ | ..... | | ...... | | +-------------------+ | 5462306a36Sopenharmony_ci +---------+ +-------+ +--------+ | +-------------------+ | 5562306a36Sopenharmony_ci | Entry |------------------|->| SSDT | | 5662306a36Sopenharmony_ci +- - - -+ | +-------------------| | 5762306a36Sopenharmony_ci | Entry | - - - - - - - -+ | | Definition Blocks | | 5862306a36Sopenharmony_ci +- - - -+ | | +-------------------+ | 5962306a36Sopenharmony_ci | | +- - - - - - - - - -+ | 6062306a36Sopenharmony_ci +-|->| SSDT | | 6162306a36Sopenharmony_ci | +-------------------+ | 6262306a36Sopenharmony_ci | | Definition Blocks | | 6362306a36Sopenharmony_ci | +- - - - - - - - - -+ | 6462306a36Sopenharmony_ci +------------------------+ 6562306a36Sopenharmony_ci | 6662306a36Sopenharmony_ci OSPM Loading | 6762306a36Sopenharmony_ci \|/ 6862306a36Sopenharmony_ci +----------------+ 6962306a36Sopenharmony_ci | ACPI Namespace | 7062306a36Sopenharmony_ci +----------------+ 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci Figure 1. ACPI Definition Blocks 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci.. note:: RSDP can also contain a pointer to the RSDT (Root System 7562306a36Sopenharmony_ci Description Table). Platforms provide RSDT to enable 7662306a36Sopenharmony_ci compatibility with ACPI 1.0 operating systems. The OS is expected 7762306a36Sopenharmony_ci to use XSDT, if present. 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ciExample ACPI Namespace 8162306a36Sopenharmony_ci====================== 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ciAll definition blocks are loaded into a single namespace. The namespace 8462306a36Sopenharmony_ciis a hierarchy of objects identified by names and paths. 8562306a36Sopenharmony_ciThe following naming conventions apply to object names in the ACPI 8662306a36Sopenharmony_cinamespace: 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci 1. All names are 32 bits long. 8962306a36Sopenharmony_ci 2. The first byte of a name must be one of 'A' - 'Z', '_'. 9062306a36Sopenharmony_ci 3. Each of the remaining bytes of a name must be one of 'A' - 'Z', '0' 9162306a36Sopenharmony_ci - '9', '_'. 9262306a36Sopenharmony_ci 4. Names starting with '_' are reserved by the ACPI specification. 9362306a36Sopenharmony_ci 5. The '\' symbol represents the root of the namespace (i.e. names 9462306a36Sopenharmony_ci prepended with '\' are relative to the namespace root). 9562306a36Sopenharmony_ci 6. The '^' symbol represents the parent of the current namespace node 9662306a36Sopenharmony_ci (i.e. names prepended with '^' are relative to the parent of the 9762306a36Sopenharmony_ci current namespace node). 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ciThe figure below shows an example ACPI namespace:: 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci +------+ 10262306a36Sopenharmony_ci | \ | Root 10362306a36Sopenharmony_ci +------+ 10462306a36Sopenharmony_ci | 10562306a36Sopenharmony_ci | +------+ 10662306a36Sopenharmony_ci +-| _PR | Scope(_PR): the processor namespace 10762306a36Sopenharmony_ci | +------+ 10862306a36Sopenharmony_ci | | 10962306a36Sopenharmony_ci | | +------+ 11062306a36Sopenharmony_ci | +-| CPU0 | Processor(CPU0): the first processor 11162306a36Sopenharmony_ci | +------+ 11262306a36Sopenharmony_ci | 11362306a36Sopenharmony_ci | +------+ 11462306a36Sopenharmony_ci +-| _SB | Scope(_SB): the system bus namespace 11562306a36Sopenharmony_ci | +------+ 11662306a36Sopenharmony_ci | | 11762306a36Sopenharmony_ci | | +------+ 11862306a36Sopenharmony_ci | +-| LID0 | Device(LID0); the lid device 11962306a36Sopenharmony_ci | | +------+ 12062306a36Sopenharmony_ci | | | 12162306a36Sopenharmony_ci | | | +------+ 12262306a36Sopenharmony_ci | | +-| _HID | Name(_HID, "PNP0C0D"): the hardware ID 12362306a36Sopenharmony_ci | | | +------+ 12462306a36Sopenharmony_ci | | | 12562306a36Sopenharmony_ci | | | +------+ 12662306a36Sopenharmony_ci | | +-| _STA | Method(_STA): the status control method 12762306a36Sopenharmony_ci | | +------+ 12862306a36Sopenharmony_ci | | 12962306a36Sopenharmony_ci | | +------+ 13062306a36Sopenharmony_ci | +-| PCI0 | Device(PCI0); the PCI root bridge 13162306a36Sopenharmony_ci | +------+ 13262306a36Sopenharmony_ci | | 13362306a36Sopenharmony_ci | | +------+ 13462306a36Sopenharmony_ci | +-| _HID | Name(_HID, "PNP0A08"): the hardware ID 13562306a36Sopenharmony_ci | | +------+ 13662306a36Sopenharmony_ci | | 13762306a36Sopenharmony_ci | | +------+ 13862306a36Sopenharmony_ci | +-| _CID | Name(_CID, "PNP0A03"): the compatible ID 13962306a36Sopenharmony_ci | | +------+ 14062306a36Sopenharmony_ci | | 14162306a36Sopenharmony_ci | | +------+ 14262306a36Sopenharmony_ci | +-| RP03 | Scope(RP03): the PCI0 power scope 14362306a36Sopenharmony_ci | | +------+ 14462306a36Sopenharmony_ci | | | 14562306a36Sopenharmony_ci | | | +------+ 14662306a36Sopenharmony_ci | | +-| PXP3 | PowerResource(PXP3): the PCI0 power resource 14762306a36Sopenharmony_ci | | +------+ 14862306a36Sopenharmony_ci | | 14962306a36Sopenharmony_ci | | +------+ 15062306a36Sopenharmony_ci | +-| GFX0 | Device(GFX0): the graphics adapter 15162306a36Sopenharmony_ci | +------+ 15262306a36Sopenharmony_ci | | 15362306a36Sopenharmony_ci | | +------+ 15462306a36Sopenharmony_ci | +-| _ADR | Name(_ADR, 0x00020000): the PCI bus address 15562306a36Sopenharmony_ci | | +------+ 15662306a36Sopenharmony_ci | | 15762306a36Sopenharmony_ci | | +------+ 15862306a36Sopenharmony_ci | +-| DD01 | Device(DD01): the LCD output device 15962306a36Sopenharmony_ci | +------+ 16062306a36Sopenharmony_ci | | 16162306a36Sopenharmony_ci | | +------+ 16262306a36Sopenharmony_ci | +-| _BCL | Method(_BCL): the backlight control method 16362306a36Sopenharmony_ci | +------+ 16462306a36Sopenharmony_ci | 16562306a36Sopenharmony_ci | +------+ 16662306a36Sopenharmony_ci +-| _TZ | Scope(_TZ): the thermal zone namespace 16762306a36Sopenharmony_ci | +------+ 16862306a36Sopenharmony_ci | | 16962306a36Sopenharmony_ci | | +------+ 17062306a36Sopenharmony_ci | +-| FN00 | PowerResource(FN00): the FAN0 power resource 17162306a36Sopenharmony_ci | | +------+ 17262306a36Sopenharmony_ci | | 17362306a36Sopenharmony_ci | | +------+ 17462306a36Sopenharmony_ci | +-| FAN0 | Device(FAN0): the FAN0 cooling device 17562306a36Sopenharmony_ci | | +------+ 17662306a36Sopenharmony_ci | | | 17762306a36Sopenharmony_ci | | | +------+ 17862306a36Sopenharmony_ci | | +-| _HID | Name(_HID, "PNP0A0B"): the hardware ID 17962306a36Sopenharmony_ci | | +------+ 18062306a36Sopenharmony_ci | | 18162306a36Sopenharmony_ci | | +------+ 18262306a36Sopenharmony_ci | +-| TZ00 | ThermalZone(TZ00); the FAN thermal zone 18362306a36Sopenharmony_ci | +------+ 18462306a36Sopenharmony_ci | 18562306a36Sopenharmony_ci | +------+ 18662306a36Sopenharmony_ci +-| _GPE | Scope(_GPE): the GPE namespace 18762306a36Sopenharmony_ci +------+ 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci Figure 2. Example ACPI Namespace 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ciLinux ACPI Device Objects 19362306a36Sopenharmony_ci========================= 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_ciThe Linux kernel's core ACPI subsystem creates struct acpi_device 19662306a36Sopenharmony_ciobjects for ACPI namespace objects representing devices, power resources 19762306a36Sopenharmony_ciprocessors, thermal zones. Those objects are exported to user space via 19862306a36Sopenharmony_cisysfs as directories in the subtree under /sys/devices/LNXSYSTM:00. The 19962306a36Sopenharmony_ciformat of their names is <bus_id:instance>, where 'bus_id' refers to the 20062306a36Sopenharmony_ciACPI namespace representation of the given object and 'instance' is used 20162306a36Sopenharmony_cifor distinguishing different object of the same 'bus_id' (it is 20262306a36Sopenharmony_citwo-digit decimal representation of an unsigned integer). 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ciThe value of 'bus_id' depends on the type of the object whose name it is 20562306a36Sopenharmony_cipart of as listed in the table below:: 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_ci +---+-----------------+-------+----------+ 20862306a36Sopenharmony_ci | | Object/Feature | Table | bus_id | 20962306a36Sopenharmony_ci +---+-----------------+-------+----------+ 21062306a36Sopenharmony_ci | N | Root | xSDT | LNXSYSTM | 21162306a36Sopenharmony_ci +---+-----------------+-------+----------+ 21262306a36Sopenharmony_ci | N | Device | xSDT | _HID | 21362306a36Sopenharmony_ci +---+-----------------+-------+----------+ 21462306a36Sopenharmony_ci | N | Processor | xSDT | LNXCPU | 21562306a36Sopenharmony_ci +---+-----------------+-------+----------+ 21662306a36Sopenharmony_ci | N | ThermalZone | xSDT | LNXTHERM | 21762306a36Sopenharmony_ci +---+-----------------+-------+----------+ 21862306a36Sopenharmony_ci | N | PowerResource | xSDT | LNXPOWER | 21962306a36Sopenharmony_ci +---+-----------------+-------+----------+ 22062306a36Sopenharmony_ci | N | Other Devices | xSDT | device | 22162306a36Sopenharmony_ci +---+-----------------+-------+----------+ 22262306a36Sopenharmony_ci | F | PWR_BUTTON | FADT | LNXPWRBN | 22362306a36Sopenharmony_ci +---+-----------------+-------+----------+ 22462306a36Sopenharmony_ci | F | SLP_BUTTON | FADT | LNXSLPBN | 22562306a36Sopenharmony_ci +---+-----------------+-------+----------+ 22662306a36Sopenharmony_ci | M | Video Extension | xSDT | LNXVIDEO | 22762306a36Sopenharmony_ci +---+-----------------+-------+----------+ 22862306a36Sopenharmony_ci | M | ATA Controller | xSDT | LNXIOBAY | 22962306a36Sopenharmony_ci +---+-----------------+-------+----------+ 23062306a36Sopenharmony_ci | M | Docking Station | xSDT | LNXDOCK | 23162306a36Sopenharmony_ci +---+-----------------+-------+----------+ 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_ci Table 1. ACPI Namespace Objects Mapping 23462306a36Sopenharmony_ci 23562306a36Sopenharmony_ciThe following rules apply when creating struct acpi_device objects on 23662306a36Sopenharmony_cithe basis of the contents of ACPI System Description Tables (as 23762306a36Sopenharmony_ciindicated by the letter in the first column and the notation in the 23862306a36Sopenharmony_cisecond column of the table above): 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci N: 24162306a36Sopenharmony_ci The object's source is an ACPI namespace node (as indicated by the 24262306a36Sopenharmony_ci named object's type in the second column). In that case the object's 24362306a36Sopenharmony_ci directory in sysfs will contain the 'path' attribute whose value is 24462306a36Sopenharmony_ci the full path to the node from the namespace root. 24562306a36Sopenharmony_ci F: 24662306a36Sopenharmony_ci The struct acpi_device object is created for a fixed hardware 24762306a36Sopenharmony_ci feature (as indicated by the fixed feature flag's name in the second 24862306a36Sopenharmony_ci column), so its sysfs directory will not contain the 'path' 24962306a36Sopenharmony_ci attribute. 25062306a36Sopenharmony_ci M: 25162306a36Sopenharmony_ci The struct acpi_device object is created for an ACPI namespace node 25262306a36Sopenharmony_ci with specific control methods (as indicated by the ACPI defined 25362306a36Sopenharmony_ci device's type in the second column). The 'path' attribute containing 25462306a36Sopenharmony_ci its namespace path will be present in its sysfs directory. For 25562306a36Sopenharmony_ci example, if the _BCL method is present for an ACPI namespace node, a 25662306a36Sopenharmony_ci struct acpi_device object with LNXVIDEO 'bus_id' will be created for 25762306a36Sopenharmony_ci it. 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ciThe third column of the above table indicates which ACPI System 26062306a36Sopenharmony_ciDescription Tables contain information used for the creation of the 26162306a36Sopenharmony_cistruct acpi_device objects represented by the given row (xSDT means DSDT 26262306a36Sopenharmony_cior SSDT). 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ciThe fourth column of the above table indicates the 'bus_id' generation 26562306a36Sopenharmony_cirule of the struct acpi_device object: 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci _HID: 26862306a36Sopenharmony_ci _HID in the last column of the table means that the object's bus_id 26962306a36Sopenharmony_ci is derived from the _HID/_CID identification objects present under 27062306a36Sopenharmony_ci the corresponding ACPI namespace node. The object's sysfs directory 27162306a36Sopenharmony_ci will then contain the 'hid' and 'modalias' attributes that can be 27262306a36Sopenharmony_ci used to retrieve the _HID and _CIDs of that object. 27362306a36Sopenharmony_ci LNXxxxxx: 27462306a36Sopenharmony_ci The 'modalias' attribute is also present for struct acpi_device 27562306a36Sopenharmony_ci objects having bus_id of the "LNXxxxxx" form (pseudo devices), in 27662306a36Sopenharmony_ci which cases it contains the bus_id string itself. 27762306a36Sopenharmony_ci device: 27862306a36Sopenharmony_ci 'device' in the last column of the table indicates that the object's 27962306a36Sopenharmony_ci bus_id cannot be determined from _HID/_CID of the corresponding 28062306a36Sopenharmony_ci ACPI namespace node, although that object represents a device (for 28162306a36Sopenharmony_ci example, it may be a PCI device with _ADR defined and without _HID 28262306a36Sopenharmony_ci or _CID). In that case the string 'device' will be used as the 28362306a36Sopenharmony_ci object's bus_id. 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ciLinux ACPI Physical Device Glue 28762306a36Sopenharmony_ci=============================== 28862306a36Sopenharmony_ci 28962306a36Sopenharmony_ciACPI device (i.e. struct acpi_device) objects may be linked to other 29062306a36Sopenharmony_ciobjects in the Linux' device hierarchy that represent "physical" devices 29162306a36Sopenharmony_ci(for example, devices on the PCI bus). If that happens, it means that 29262306a36Sopenharmony_cithe ACPI device object is a "companion" of a device otherwise 29362306a36Sopenharmony_cirepresented in a different way and is used (1) to provide configuration 29462306a36Sopenharmony_ciinformation on that device which cannot be obtained by other means and 29562306a36Sopenharmony_ci(2) to do specific things to the device with the help of its ACPI 29662306a36Sopenharmony_cicontrol methods. One ACPI device object may be linked this way to 29762306a36Sopenharmony_cimultiple "physical" devices. 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ciIf an ACPI device object is linked to a "physical" device, its sysfs 30062306a36Sopenharmony_cidirectory contains the "physical_node" symbolic link to the sysfs 30162306a36Sopenharmony_cidirectory of the target device object. In turn, the target device's 30262306a36Sopenharmony_cisysfs directory will then contain the "firmware_node" symbolic link to 30362306a36Sopenharmony_cithe sysfs directory of the companion ACPI device object. 30462306a36Sopenharmony_ciThe linking mechanism relies on device identification provided by the 30562306a36Sopenharmony_ciACPI namespace. For example, if there's an ACPI namespace object 30662306a36Sopenharmony_cirepresenting a PCI device (i.e. a device object under an ACPI namespace 30762306a36Sopenharmony_ciobject representing a PCI bridge) whose _ADR returns 0x00020000 and the 30862306a36Sopenharmony_cibus number of the parent PCI bridge is 0, the sysfs directory 30962306a36Sopenharmony_cirepresenting the struct acpi_device object created for that ACPI 31062306a36Sopenharmony_cinamespace object will contain the 'physical_node' symbolic link to the 31162306a36Sopenharmony_ci/sys/devices/pci0000:00/0000:00:02:0/ sysfs directory of the 31262306a36Sopenharmony_cicorresponding PCI device. 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ciThe linking mechanism is generally bus-specific. The core of its 31562306a36Sopenharmony_ciimplementation is located in the drivers/acpi/glue.c file, but there are 31662306a36Sopenharmony_cicomplementary parts depending on the bus types in question located 31762306a36Sopenharmony_cielsewhere. For example, the PCI-specific part of it is located in 31862306a36Sopenharmony_cidrivers/pci/pci-acpi.c. 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_ciExample Linux ACPI Device Tree 32262306a36Sopenharmony_ci================================= 32362306a36Sopenharmony_ci 32462306a36Sopenharmony_ciThe sysfs hierarchy of struct acpi_device objects corresponding to the 32562306a36Sopenharmony_ciexample ACPI namespace illustrated in Figure 2 with the addition of 32662306a36Sopenharmony_cifixed PWR_BUTTON/SLP_BUTTON devices is shown below:: 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_ci +--------------+---+-----------------+ 32962306a36Sopenharmony_ci | LNXSYSTEM:00 | \ | acpi:LNXSYSTEM: | 33062306a36Sopenharmony_ci +--------------+---+-----------------+ 33162306a36Sopenharmony_ci | 33262306a36Sopenharmony_ci | +-------------+-----+----------------+ 33362306a36Sopenharmony_ci +-| LNXPWRBN:00 | N/A | acpi:LNXPWRBN: | 33462306a36Sopenharmony_ci | +-------------+-----+----------------+ 33562306a36Sopenharmony_ci | 33662306a36Sopenharmony_ci | +-------------+-----+----------------+ 33762306a36Sopenharmony_ci +-| LNXSLPBN:00 | N/A | acpi:LNXSLPBN: | 33862306a36Sopenharmony_ci | +-------------+-----+----------------+ 33962306a36Sopenharmony_ci | 34062306a36Sopenharmony_ci | +-----------+------------+--------------+ 34162306a36Sopenharmony_ci +-| LNXCPU:00 | \_PR_.CPU0 | acpi:LNXCPU: | 34262306a36Sopenharmony_ci | +-----------+------------+--------------+ 34362306a36Sopenharmony_ci | 34462306a36Sopenharmony_ci | +-------------+-------+----------------+ 34562306a36Sopenharmony_ci +-| LNXSYBUS:00 | \_SB_ | acpi:LNXSYBUS: | 34662306a36Sopenharmony_ci | +-------------+-------+----------------+ 34762306a36Sopenharmony_ci | | 34862306a36Sopenharmony_ci | | +- - - - - - - +- - - - - - +- - - - - - - -+ 34962306a36Sopenharmony_ci | +-| PNP0C0D:00 | \_SB_.LID0 | acpi:PNP0C0D: | 35062306a36Sopenharmony_ci | | +- - - - - - - +- - - - - - +- - - - - - - -+ 35162306a36Sopenharmony_ci | | 35262306a36Sopenharmony_ci | | +------------+------------+-----------------------+ 35362306a36Sopenharmony_ci | +-| PNP0A08:00 | \_SB_.PCI0 | acpi:PNP0A08:PNP0A03: | 35462306a36Sopenharmony_ci | +------------+------------+-----------------------+ 35562306a36Sopenharmony_ci | | 35662306a36Sopenharmony_ci | | +-----------+-----------------+-----+ 35762306a36Sopenharmony_ci | +-| device:00 | \_SB_.PCI0.RP03 | N/A | 35862306a36Sopenharmony_ci | | +-----------+-----------------+-----+ 35962306a36Sopenharmony_ci | | | 36062306a36Sopenharmony_ci | | | +-------------+----------------------+----------------+ 36162306a36Sopenharmony_ci | | +-| LNXPOWER:00 | \_SB_.PCI0.RP03.PXP3 | acpi:LNXPOWER: | 36262306a36Sopenharmony_ci | | +-------------+----------------------+----------------+ 36362306a36Sopenharmony_ci | | 36462306a36Sopenharmony_ci | | +-------------+-----------------+----------------+ 36562306a36Sopenharmony_ci | +-| LNXVIDEO:00 | \_SB_.PCI0.GFX0 | acpi:LNXVIDEO: | 36662306a36Sopenharmony_ci | +-------------+-----------------+----------------+ 36762306a36Sopenharmony_ci | | 36862306a36Sopenharmony_ci | | +-----------+-----------------+-----+ 36962306a36Sopenharmony_ci | +-| device:01 | \_SB_.PCI0.DD01 | N/A | 37062306a36Sopenharmony_ci | +-----------+-----------------+-----+ 37162306a36Sopenharmony_ci | 37262306a36Sopenharmony_ci | +-------------+-------+----------------+ 37362306a36Sopenharmony_ci +-| LNXSYBUS:01 | \_TZ_ | acpi:LNXSYBUS: | 37462306a36Sopenharmony_ci +-------------+-------+----------------+ 37562306a36Sopenharmony_ci | 37662306a36Sopenharmony_ci | +-------------+------------+----------------+ 37762306a36Sopenharmony_ci +-| LNXPOWER:0a | \_TZ_.FN00 | acpi:LNXPOWER: | 37862306a36Sopenharmony_ci | +-------------+------------+----------------+ 37962306a36Sopenharmony_ci | 38062306a36Sopenharmony_ci | +------------+------------+---------------+ 38162306a36Sopenharmony_ci +-| PNP0C0B:00 | \_TZ_.FAN0 | acpi:PNP0C0B: | 38262306a36Sopenharmony_ci | +------------+------------+---------------+ 38362306a36Sopenharmony_ci | 38462306a36Sopenharmony_ci | +-------------+------------+----------------+ 38562306a36Sopenharmony_ci +-| LNXTHERM:00 | \_TZ_.TZ00 | acpi:LNXTHERM: | 38662306a36Sopenharmony_ci +-------------+------------+----------------+ 38762306a36Sopenharmony_ci 38862306a36Sopenharmony_ci Figure 3. Example Linux ACPI Device Tree 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_ci.. note:: Each node is represented as "object/path/modalias", where: 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_ci 1. 'object' is the name of the object's directory in sysfs. 39362306a36Sopenharmony_ci 2. 'path' is the ACPI namespace path of the corresponding 39462306a36Sopenharmony_ci ACPI namespace object, as returned by the object's 'path' 39562306a36Sopenharmony_ci sysfs attribute. 39662306a36Sopenharmony_ci 3. 'modalias' is the value of the object's 'modalias' sysfs 39762306a36Sopenharmony_ci attribute (as described earlier in this document). 39862306a36Sopenharmony_ci 39962306a36Sopenharmony_ci.. note:: N/A indicates the device object does not have the 'path' or the 40062306a36Sopenharmony_ci 'modalias' attribute. 401