1.. SPDX-License-Identifier: GPL-2.0
2.. include:: <isonum.txt>
3
4========================================
5Describing and referring to LEDs in ACPI
6========================================
7
8Individual LEDs are described by hierarchical data extension [5] nodes under the
9device node, the LED driver chip. The "reg" property in the LED specific nodes
10tells the numerical ID of each individual LED output to which the LEDs are
11connected. [leds] The hierarchical data nodes are named "led@X", where X is the
12number of the LED output.
13
14Referring to LEDs in Device tree is documented in [video-interfaces], in
15"flash-leds" property documentation. In short, LEDs are directly referred to by
16using phandles.
17
18While Device tree allows referring to any node in the tree [devicetree], in
19ACPI references are limited to device nodes only [acpi]. For this reason using
20the same mechanism on ACPI is not possible. A mechanism to refer to non-device
21ACPI nodes is documented in [data-node-ref].
22
23ACPI allows (as does DT) using integer arguments after the reference. A
24combination of the LED driver device reference and an integer argument,
25referring to the "reg" property of the relevant LED, is used to identify
26individual LEDs. The value of the "reg" property is a contract between the
27firmware and software, it uniquely identifies the LED driver outputs.
28
29Under the LED driver device, The first hierarchical data extension package list
30entry shall contain the string "led@" followed by the number of the LED,
31followed by the referred object name. That object shall be named "LED" followed
32by the number of the LED.
33
34Example
35=======
36
37An ASL example of a camera sensor device and a LED driver device for two LEDs is
38show below. Objects not relevant for LEDs or the references to them have been
39omitted. ::
40
41	Device (LED)
42	{
43		Name (_DSD, Package () {
44			ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"),
45			Package () {
46				Package () { "led@0", LED0 },
47				Package () { "led@1", LED1 },
48			}
49		})
50		Name (LED0, Package () {
51			ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
52			Package () {
53				Package () { "reg", 0 },
54				Package () { "flash-max-microamp", 1000000 },
55				Package () { "flash-timeout-us", 200000 },
56				Package () { "led-max-microamp", 100000 },
57				Package () { "label", "white:flash" },
58			}
59		})
60		Name (LED1, Package () {
61			ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
62			Package () {
63				Package () { "reg", 1 },
64				Package () { "led-max-microamp", 10000 },
65				Package () { "label", "red:indicator" },
66			}
67		})
68	}
69
70	Device (SEN)
71	{
72		Name (_DSD, Package () {
73			ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
74			Package () {
75				Package () {
76					"flash-leds",
77					Package () { ^LED, "led@0", ^LED, "led@1" },
78				}
79			}
80		})
81	}
82
83where
84::
85
86	LED	LED driver device
87	LED0	First LED
88	LED1	Second LED
89	SEN	Camera sensor device (or another device the LED is related to)
90
91References
92==========
93
94[acpi] Advanced Configuration and Power Interface Specification.
95    https://uefi.org/specifications/ACPI/6.4/, referenced 2021-11-30.
96
97[data-node-ref] Documentation/firmware-guide/acpi/dsd/data-node-references.rst
98
99[devicetree] Devicetree. https://www.devicetree.org, referenced 2019-02-21.
100
101[dsd-guide] DSD Guide.
102    https://github.com/UEFI/DSD-Guide/blob/main/dsd-guide.adoc, referenced
103    2021-11-30.
104
105[leds] Documentation/devicetree/bindings/leds/common.yaml
106
107[video-interfaces] Documentation/devicetree/bindings/media/video-interfaces.yaml
108