在 ACPI 中描述和引用 LED¶
单个 LED 由设备节点(LED 驱动芯片)下的分层数据扩展 [5] 节点描述。LED 特定节点中的“reg”属性指示每个 LED 输出的数值 ID,LED 连接到该输出。[leds] 分层数据节点命名为“led@X”,其中 X 是 LED 输出的编号。
在设备树中引用 LED 的文档在 [video-interfaces] 中的“flash-leds”属性文档中。简而言之,LED 直接通过使用 phandle 引用。
虽然设备树允许引用树中的任何节点 [devicetree],但在 ACPI 中,引用仅限于设备节点 [acpi]。因此,不可能在 ACPI 上使用相同的机制。引用非设备 ACPI 节点的机制在 [data-node-ref] 中有文档说明。
ACPI 允许(就像 DT 一样)在引用后使用整数参数。LED 驱动设备引用和整数参数的组合用于标识单个 LED,该整数参数指的是相关 LED 的“reg”属性。“reg”属性的值是固件和软件之间的协议,它唯一地标识 LED 驱动输出。
在 LED 驱动设备下,第一个分层数据扩展包列表条目应包含字符串“led@”,后跟 LED 的编号,然后是引用的对象名称。该对象应命名为“LED”,后跟 LED 的编号。
示例¶
下面显示了一个摄像头传感器设备和两个 LED 的 LED 驱动设备 ASL 示例。与 LED 或其引用无关的对象已被省略。
Device (LED)
{
Name (_DSD, Package () {
ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
Package () {
Package () { "led@0", LED0 },
Package () { "led@1", LED1 },
}
})
Name (LED0, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package () { "reg", 0 },
Package () { "flash-max-microamp", 1000000 },
Package () { "flash-timeout-us", 200000 },
Package () { "led-max-microamp", 100000 },
Package () { "label", "white:flash" },
}
})
Name (LED1, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package () { "reg", 1 },
Package () { "led-max-microamp", 10000 },
Package () { "label", "red:indicator" },
}
})
}
Device (SEN)
{
Name (_DSD, Package () {
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package () {
Package () {
"flash-leds",
Package () { ^LED, "led@0", ^LED, "led@1" },
}
}
})
}
其中
LED LED driver device
LED0 First LED
LED1 Second LED
SEN Camera sensor device (or another device the LED is related to)
参考文献¶
- [acpi] 高级配置和电源接口规范。
https://uefi.org/specifications/ACPI/6.4/,引用日期 2021-11-30。
[data-node-ref] 引用分层数据节点
[devicetree] 设备树。https://www.devicetree.org,引用日期 2019-02-21。
- [dsd-guide] DSD 指南。
https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc,引用日期 2021-11-30。
[leds] Documentation/devicetree/bindings/leds/common.yaml
[video-interfaces] Documentation/devicetree/bindings/media/video-interfaces.yaml